From da7742dc6055cbe3ff8c1e853949bae09e126ffe Mon Sep 17 00:00:00 2001 From: evzpav Date: Thu, 24 Jun 2021 13:40:56 -0300 Subject: [PATCH 1/2] Implement trailing stop order for Binance --- README.md | 5 +++++ README_en.md | 5 +++++ consts.go | 3 +++ exchanges/binancefutures/binancefutures.go | 4 ++++ go.sum | 2 -- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index adc59aa..4d89673 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,11 @@ func (s *BasicStrategy) OnTick() error { s.Exchange.OpenLong(symbol, OrderTypeLimit, 5000, 10) s.Exchange.CloseLong(symbol, OrderTypeLimit, 6000, 10) + //Trailing Stop Market Order - sell stop loss order for long position + callbackRate := 5.0 // from 0.1% until 5% allowed + s.Exchange.PlaceOrder(symbol, Sell, OrderTypeTrailingStopMarket, 0.0, 10, + OrderCallbackRateOption(callbackRate), OrderReduceOnlyOption(true)) + s.Exchange.PlaceOrder(symbol, Buy, OrderTypeLimit, 1000.0, 10, OrderPostOnlyOption(true)) diff --git a/README_en.md b/README_en.md index bcbc65a..981a1d4 100644 --- a/README_en.md +++ b/README_en.md @@ -85,6 +85,11 @@ func (s *BasicStrategy) OnTick() error { s.Exchange.OpenLong(symbol, OrderTypeLimit, 5000, 10) s.Exchange.CloseLong(symbol, OrderTypeLimit, 6000, 10) + //Trailing Stop Market Order - sell stop loss order for long position + callbackRate := 5.0 // from 0.1% until 5% allowed + s.Exchange.PlaceOrder(symbol, Sell, OrderTypeTrailingStopMarket, 0.0, 10, + OrderCallbackRateOption(callbackRate), OrderReduceOnlyOption(true)) + s.Exchange.PlaceOrder(symbol, Buy, OrderTypeLimit, 1000.0, 10, OrderPostOnlyOption(true)) diff --git a/consts.go b/consts.go index df2f0f7..fb63a0f 100644 --- a/consts.go +++ b/consts.go @@ -58,6 +58,7 @@ const ( OrderTypeLimit // 限价单 OrderTypeStopMarket // 市价止损单 OrderTypeStopLimit // 限价止损单 + OrderTypeTrailingStopMarket ) func (t OrderType) String() string { @@ -70,6 +71,8 @@ func (t OrderType) String() string { return "StopMarket" case OrderTypeStopLimit: return "StopLimit" + case OrderTypeTrailingStopMarket: + return "TrailingStopMarket" default: return "None" } diff --git a/exchanges/binancefutures/binancefutures.go b/exchanges/binancefutures/binancefutures.go index d21cc25..a132378 100644 --- a/exchanges/binancefutures/binancefutures.go +++ b/exchanges/binancefutures/binancefutures.go @@ -209,6 +209,8 @@ func (b *BinanceFutures) PlaceOrder(symbol string, direction Direction, orderTyp case OrderTypeStopLimit: _orderType = futures.OrderTypeStop service = service.StopPrice(fmt.Sprint(params.StopPx)) + case OrderTypeTrailingStopMarket: + _orderType = futures.OrderTypeTrailingStopMarket } if orderType != OrderTypeMarket { @@ -443,6 +445,8 @@ func (b *BinanceFutures) convertOrderType(orderType futures.OrderType) OrderType return OrderTypeStopLimit case futures.OrderTypeStopMarket: return OrderTypeStopMarket + case futures.OrderTypeTrailingStopMarket: + return OrderTypeTrailingStopMarket default: return OrderTypeLimit } diff --git a/go.sum b/go.sum index 1322544..da3af84 100644 --- a/go.sum +++ b/go.sum @@ -58,8 +58,6 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/adshao/go-binance/v2 v2.2.1 h1:H5tfXqDu+bx1mZqJP+5gc8ahidgDFvj683M3RStg9C4= -github.com/adshao/go-binance/v2 v2.2.1/go.mod h1:o+84WK3DQxq9vEKV9ncRcQi+J7RFCGhM27osbECZiJQ= github.com/adshao/go-binance/v2 v2.2.2 h1:vKpvZupkgcUPG/CSl9uW0s5hqxzVZgNI/nEzKG1JiUs= github.com/adshao/go-binance/v2 v2.2.2/go.mod h1:o+84WK3DQxq9vEKV9ncRcQi+J7RFCGhM27osbECZiJQ= github.com/airbrake/gobrake v3.6.1+incompatible/go.mod h1:wM4gu3Cn0W0K7GUuVWnlXZU11AGBXMILnrdOU8Kn00o= From 8dc9bf497ec061e9b0768ce56aa8daf2cd514377 Mon Sep 17 00:00:00 2001 From: evzpav Date: Sat, 26 Jun 2021 07:59:44 -0300 Subject: [PATCH 2/2] Add activation price option to README --- README.md | 7 +++++-- README_en.md | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4d89673..e64af03 100644 --- a/README.md +++ b/README.md @@ -85,10 +85,13 @@ func (s *BasicStrategy) OnTick() error { s.Exchange.OpenLong(symbol, OrderTypeLimit, 5000, 10) s.Exchange.CloseLong(symbol, OrderTypeLimit, 6000, 10) - //Trailing Stop Market Order - sell stop loss order for long position + //Trailing Stop Market Order - Binance - sell stop loss order for long position callbackRate := 5.0 // from 0.1% until 5% allowed s.Exchange.PlaceOrder(symbol, Sell, OrderTypeTrailingStopMarket, 0.0, 10, - OrderCallbackRateOption(callbackRate), OrderReduceOnlyOption(true)) + OrderCallbackRateOption(callbackRate), + OrderActivationPriceOption(5000.0), // optional - default as the latest price + OrderReduceOnlyOption(true), + ) s.Exchange.PlaceOrder(symbol, Buy, OrderTypeLimit, 1000.0, 10, OrderPostOnlyOption(true)) diff --git a/README_en.md b/README_en.md index 981a1d4..dc6725c 100644 --- a/README_en.md +++ b/README_en.md @@ -85,10 +85,13 @@ func (s *BasicStrategy) OnTick() error { s.Exchange.OpenLong(symbol, OrderTypeLimit, 5000, 10) s.Exchange.CloseLong(symbol, OrderTypeLimit, 6000, 10) - //Trailing Stop Market Order - sell stop loss order for long position + //Trailing Stop Market Order - Binance - sell stop loss order for long position callbackRate := 5.0 // from 0.1% until 5% allowed s.Exchange.PlaceOrder(symbol, Sell, OrderTypeTrailingStopMarket, 0.0, 10, - OrderCallbackRateOption(callbackRate), OrderReduceOnlyOption(true)) + OrderCallbackRateOption(callbackRate), + OrderActivationPriceOption(5000.0), // optional - default as the latest price + OrderReduceOnlyOption(true), + ) s.Exchange.PlaceOrder(symbol, Buy, OrderTypeLimit, 1000.0, 10, OrderPostOnlyOption(true))