August 31, 2022

Примеры формирования торговых команд для SaltanatBot:

Переменные, необходимые для команд

Ввод кол-ва знаков после запятой для лота:
OKRqty = input.int(3, title='QTY_(x.xxx)', options=[0,1,2,3,4,5,6,7,8], group='=== QTY ROUND ===')

long_lotsize - размер Вашего лота для лонга
short_lotsize - размер Вашего лота для шорта

long_lot_take1 - размер Вашего лота для лонг-тейка №1
long_lot_take2 - размер Вашего лота для лонг-тейка №2

short_lot_take1 - размер Вашего лота для шорт-тейка №1
short_lot_take2 - размер Вашего лота для шорт-тейка №2

ltake1 - цена тейка №1 для лонга
ltake2 - цена тейка №2 для лонга

stake1 - цена тейка №1 для шорта
stake2 - цена тейка №2 для шорта

l_stop - цена стопа для лонга
s_stop - цена стопа для шорта

leverage - торговое плечо

Тикер:
ticker=str.replace_all(syminfo.ticker,"PERP","")

// лоты для открытия позиции
lot_long = math.round(long_lotsize, OKRqty)
lot_short = math.round(short_lotsize, OKRqty)

// лоты для закрытия позиций
close_size_l = math.round(2*lot_long, OKRqty)
close_size_s = math.round(2*lot_short, OKRqty)

//лоты для тейков
lot_l1 = math.round(long_lot_take1, OKRqty)
lot_l2 = math.round(long_lot_take2, OKRqty)

lot_s1 = math.round(short_lot_take1, OKRqty)
lot_s2 = math.round(short_lot_take2, OKRqty)

=== Режим односторонней торговли ===

Отмена всех лимиток:
cancel_lim = "market=binancefru;symbol="+ticker+";allclose=true;"

Закрытие LONG по маркету:
close_pos_l = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(close_size_l)+";ordertype=market;side=sell;reduceonly=true;"

Закрытие SHORT по маркету:
close_pos_s = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(close_size_s)+";ordertype=market;side=buy;reduceonly=true;"

Закрытие любой позиции по маркету:
command_all_close = cancel_lim+"::"+close_pos_s+"::"+close_pos_l

Покупка по маркету:
open_long = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_long)+";leverage="+str.tostring(leverage)+";ordertype=market;side=buy;"

Продажа по маркету:
open_short = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_short)+";leverage="+str.tostring(leverage)+";ordertype=market;side=sell;"

Универсальный вход в long (включает в себя переворот позиции, при необходимости):
open_long_position = command_all_close+"::"+open_long

Универсальный вход в short (включает в себя переворот позиции, при необходимости):
open_short_position = command_all_close+"::"+open_short

Формируем тейки:
long_take1 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_l1)+";ordertype=limit;side=sell;price="+str.tostring(ltake1)+";reduceonly=true;timeinforce=gtx;"
long_take2 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_l2)+";ordertype=limit;side=sell;price="+str.tostring(ltake2)+";reduceonly=true;timeinforce=gtx;"

short_take1 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_s1)+";ordertype=limit;side=buy;price="+str.tostring(stake1)+";reduceonly=true;timeinforce=gtx;"
short_take2 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_s2)+";ordertype=limit;side=buy;price="+str.tostring(stake2)+";reduceonly=true;timeinforce=gtx;"

Формируем стопы:
long_stop = 'market=binancefru;symbol='+ticker+';quantity='+close_size_l+';orderType=stop_market;side=sell;stopPrice='+str.tostring(l_stop)+';closePosition=true;newClientOrderId=stop_long;'
short_stop = 'market=binancefru;symbol='+ticker+';quantity='+close_size_s+';orderType=stop_market;side=buy;stopPrice='+str.tostring(s_stop)+';closePosition=true;newClientOrderId=stop_short;'

Смещаем стоп (трейлинг по Вашему алгоритму из tradingview):
change_stop_l = "market=binancefru;symbol="+ticker+";allclose=order;origClientOrderId=stop_long;"+"::"+long_stop
change_stop_s = "market=binancefru;symbol="+ticker+";allclose=order;origClientOrderId=stop_short;"+"::"+short_stop

Вход в long с выставлением стопа и тейков (переворот позиции, при необходимости):
open_long_trade = command_all_close+"::"+open_long+"::"+long_stop+"::"+long_take1+"::"+long_take2

Вход в short с выставлением стопа и тейков (переворот позиции, при необходимости):
open_short_trade = command_all_close+"::"+open_short+"::"+short_stop+"::"+short_take1+"::"+short_take2

=== Режим двухсторонней торговли ===

Отмена всех лимиток:
cancel_lim = "market=binancefru;symbol="+ticker+";allclose=true;"

Закрытие LONG по маркету:
close_pos_l = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(close_size_l)+";ordertype=market;side=sell;positionside=long;"

Закрытие SHORT по маркету:
close_pos_s = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(close_size_s)+";ordertype=market;side=buy;positionside=short;"

Закрытие любой позиции по маркету:
command_all_close = cancel_lim+"::"+close_pos_s+"::"+close_pos_l

Покупка по маркету:
open_long = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_long)+";leverage="+str.tostring(leverage)+";ordertype=market;side=buy;positionside=long;"

Продажа по маркету:
open_short = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_short)+";leverage="+str.tostring(leverage)+";ordertype=market;side=sell;positionside=short;"

Вход в long с переворотом (переворот позиции, при необходимости):
open_long_position = command_all_close+"::"+open_long

Вход в short с переворотом (переворот позиции, при необходимости):
open_short_position = command_all_close+"::"+open_short

Формируем тейки:
long_take1 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_l1)+";ordertype=limit;side=sell;price="+str.tostring(ltake1)+";positionside=long;timeinforce=gtx;"
long_take2 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_l2)+";ordertype=limit;side=sell;price="+str.tostring(ltake2)+";positionside=long;timeinforce=gtx;"

short_take1 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_s1)+";ordertype=limit;side=buy;price="+str.tostring(stake1)+";positionside=short;timeinforce=gtx;"
short_take2 = "market=binancefru;symbol="+ticker+";quantity="+str.tostring(lot_s2)+";ordertype=limit;side=buy;price="+str.tostring(stake2)+";positionside=short;timeinforce=gtx;"

Формируем стопы:
long_stop = 'market=binancefru;symbol='+ticker+';quantity='+close_size_l+';orderType=stop_market;side=sell;stopPrice='+str.tostring(l_stop)+';positionside=long;newClientOrderId=stop_long;'
short_stop = 'market=binancefru;symbol='+ticker+';quantity='+close_size_s+';orderType=stop_market;side=buy;stopPrice='+str.tostring(s_stop)+';positionside=short;newClientOrderId=stop_short;'

Смещаем стоп (трейлинг по Вашему алгоритму из tradingview):
change_stop_l = "market=binancefru;symbol="+ticker+";allclose=order;origClientOrderId=stop_long;"+"::"+long_stop
change_stop_s = "market=binancefru;symbol="+ticker+";allclose=order;origClientOrderId=stop_short;"+"::"+short_stop

Вход в long с выставлением стопа и тейков:

без переворота позиции:
open_long_trade = open_long+"::"+long_stop+"::"+long_take1+"::"+long_take2

с переворотом позиции:
open_long_trade = command_all_close+"::"+open_long+"::"+long_stop+"::"+long_take1+"::"+long_take2

Вход в short с выставлением стопа и тейков:

без переворота позиции: open_short_trade = open_short+"::"+short_stop+"::"+short_take1+"::"+short_take2

с переворотом позиции:
open_short_trade = command_all_close+"::"+open_short+"::"+short_stop+"::"+short_take1+"::"+short_take2

Отправляем команду с помощью alert()

if longcondition and truetime
alert(open_long_trade, freq=alert.freq_once_per_bar_close)

if shortcondition and truetime
alert(open_short_trade, freq=alert.freq_once_per_bar_close)

Отправляем команду с помощью {{strategy.order.alert_message}}

if longcondition and truetime
strategy.close('Short',comment = 'Short_close')
strategy.entry('Long', strategy.long, lot_long, alert_message=open_long_trade)

if shortcondition and truetime
strategy.close('Long',comment = 'Long_close')
strategy.entry('Short', strategy.short, lot_short, alert_message=open_short_trade)

Здесь указаны основные варианты формирования необходимых команд, при торговле на бирже BINANCE через SaltanatBot.

С уважением, @Shuttle_trader