Esta estratégia usa uma abordagem de pirâmide gradual baseada na comparação entre o preço de fechamento atual e o preço de fechamento anterior para determinar a direção do mercado. Quando uma oportunidade longa é identificada, ela será longa com várias entradas graduais. Quando uma oportunidade curta é identificada, ela será curta com várias entradas graduais. O número de entradas pode ser definido através de parâmetros.
Comparar o preço de fechamento da barra atual (fechar) com o preço de fechamento da barra anterior (fechar [1]). Se fechar > fechar[1], é determinado como uma oportunidade longa e definido longCondition=1.
Dentro do prazo de negociação permitido, se longCondition=1, ele será longo com várias entradas graduais.
O número de entradas é definido através do parâmetro de pirâmide, que pode ser configurado de 1 a 5, com 4 como padrão.
Uma condição de stop loss é definida após cada entrada no caso de o mercado reverter.
Os sinais de negociação podem ser emitidos para diferentes interfaces de negociação, como toast ou telegrama.
A estratégia considera principalmente as vantagens das estratégias de breakout e média móvel. Durante as oportunidades longas ou curtas, usa uma abordagem de pirâmide gradual para seguir melhor a tendência enquanto controla os riscos.
A pirâmide gradual segue melhor as tendências.
O número ajustável de entradas torna mais flexível.
Suporta diferentes interfaces de negociação para escalabilidade.
Tem mecanismos de stop loss para controlar os riscos.
O filtro de tempo evita sinais falsos.
A configuração incorreta dos parâmetros pode levar a perdas maiores.
Problemas de rede podem impedir a perda de parada oportuna.
Os parâmetros necessitam de ajustamentos para diferentes produtos.
Precisamos de um stop loss oportuno para garantir lucros.
Soluções:
É apropriada a entrada padrão 4.
Verifique a ligação à rede.
Ajustar os parâmetros de acordo com as características do produto.
Defina os níveis de stop loss.
Considere adicionar mais indicadores para avaliar a força do sinal.
Resultados da otimização dos parâmetros de ensaio em diferentes produtos.
Incorporar algoritmos de aprendizagem de máquina para otimizar parâmetros.
Melhorar os mecanismos de gestão dos riscos.
Esta estratégia de ruptura de média móvel em pirâmide gradual integra as vantagens do seguimento da tendência e do controle de risco. Quando sinais eficazes são identificados, ela usa a pirâmide gradual para seguir a tendência, controlando a exposição ao risco através de um número configurável de entradas. Também incorpora funcionalidades como o filtro de prazo para evitar falsos sinais. A estratégia pode ser otimizada em muitos aspectos e tem grande extensão.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © torresbitmex //@version=5 strategy("torres_strategy_real_test_v1.0", process_orders_on_close=true, overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.03, calc_on_order_fills=false, pyramiding=4) in_trade(int start_time, int end_time) => allowedToTrade = (time>=start_time) and (time<=end_time) if barstate.islastconfirmedhistory var myLine = line(na) line.delete(myLine) myLine := line.new(start_time, low, start_time, high, xloc=xloc.bar_time, color = color.rgb(255, 153, 0, 50), width = 3, extend = extend.both, style = line.style_dashed) allowedToTrade // 매매시간세팅 start_time = input(timestamp("31 Jan 2024 00:00 +0900"), title="매매 시작", group='매매 시간세팅') end_time = input(timestamp("31 Dec 2030 00:00 +0900"), title="매매 종료", group='매매 시간세팅') start_trade = true bgcolor(start_trade ? color.new(color.gray, 90) : color(na)) var bool Alarm_TVExtbot = false var bool Alarm_Alert = false bot_mode = input.string(title='봇선택', defval = "POA", options = ["TVEXTBOT", "POA"], group = "봇선택", inline = '1') if bot_mode == "TVEXTBOT" Alarm_TVExtbot := true else if bot_mode == "POA" Alarm_Alert := true else Alarm_TVExtbot := false Alarm_Alert := false // 계정정보 account = input.string(title='계정', defval='아무거나입력', inline='1', group='계정정보') token = input.string(title='TVExtBot 인증키', defval='', inline='1', group='계정정보') mul_input = input.float(4, minval=1, maxval=5, step=1, title="분할진입수", group='진입 세팅', inline='1') // 진입주문메세지입력 buyOrderid = input.string(title='롱 진입1', defval='', group='진입주문 메세지입력', inline='2') buyOrderid2 = input.string(title='롱 진입2', defval='', group='진입주문 메세지입력', inline='3') buyOrderid3 = input.string(title='롱 진입3', defval='', group='진입주문 메세지입력', inline='4') buyOrderid4 = input.string(title='롱 진입4', defval='', group='진입주문 메세지입력', inline='5') buyOrderid5 = input.string(title='롱 진입5', defval='', group='진입주문 메세지입력', inline='6') sellOrderid = input.string(title='숏 진입1', defval='', group='진입주문 메세지입력', inline='2') sellOrderid2 = input.string(title='숏 진입2', defval='', group='진입주문 메세지입력', inline='3') sellOrderid3 = input.string(title='숏 진입3', defval='', group='진입주문 메세지입력', inline='4') sellOrderid4 = input.string(title='숏 진입4', defval='', group='진입주문 메세지입력', inline='5') sellOrderid5 = input.string(title='숏 진입5', defval='', group='진입주문 메세지입력', inline='6') // 종료주문메세지입력 buycloseOrderid = input.string(title='롱 전체종료', defval='', group='종료주문 메세지입력', inline='1') sellcloseOrderid = input.string(title='숏 전체종료', defval='', group='종료주문 메세지입력', inline='1') longCondition = 0, shortCondition = 0 if(close[1] < close) longCondition := 1 else longCondition := 0 if(close[1] > close) shortCondition := 1 else shortCondition := 0 if start_trade if Alarm_Alert if strategy.position_size == 0 if (longCondition == 1) strategy.entry("buy1", strategy.long, alert_message = buyOrderid) if (shortCondition == 1) strategy.entry("sell1", strategy.short, alert_message = sellOrderid) if strategy.position_size > 0 if (longCondition == 1) if (strategy.opentrades == 1) and (mul_input == 2 or mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("buy2", strategy.long, alert_message = buyOrderid2) if (strategy.opentrades == 2) and (mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("buy3", strategy.long, alert_message = buyOrderid3) if (strategy.opentrades == 3) and (mul_input == 4 or mul_input == 5) strategy.entry("buy4", strategy.long, alert_message = buyOrderid4) if (strategy.opentrades == 4) and (mul_input == 5) strategy.entry("buy5", strategy.long, alert_message = buyOrderid5) if strategy.position_size < 0 if (shortCondition == 1) if (strategy.opentrades == 1) and (mul_input == 2 or mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("sell2", strategy.short, alert_message = sellOrderid2) if (strategy.opentrades == 2) and (mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("sell3", strategy.short, alert_message = sellOrderid3) if (strategy.opentrades == 3) and (mul_input == 4 or mul_input == 5) strategy.entry("sell4", strategy.short, alert_message = sellOrderid4) if (strategy.opentrades == 4) and (mul_input == 5) strategy.entry("sell5", strategy.short, alert_message = sellOrderid5) if (longCondition == 1 and strategy.position_size > 0) if mul_input == 1 and strategy.opentrades == 1 strategy.close_all(comment='롱전체종료', alert_message = buycloseOrderid) if mul_input == 2 and strategy.opentrades == 2 strategy.close_all(comment='롱전체종료', alert_message = buycloseOrderid) if mul_input == 3 and strategy.opentrades == 3 strategy.close_all(comment='롱전체종료', alert_message = buycloseOrderid) if mul_input == 4 and strategy.opentrades == 4 strategy.close_all(comment='롱전체종료', alert_message = buycloseOrderid) if mul_input == 5 and strategy.opentrades == 5 strategy.close_all(comment='롱전체종료', alert_message = buycloseOrderid) if (shortCondition == 1 and strategy.position_size < 0) if mul_input == 1 and strategy.opentrades == 1 strategy.close_all(comment='숏전체종료', alert_message = sellcloseOrderid) if mul_input == 2 and strategy.opentrades == 2 strategy.close_all(comment='숏전체종료', alert_message = sellcloseOrderid) if mul_input == 3 and strategy.opentrades == 3 strategy.close_all(comment='숏전체종료', alert_message = sellcloseOrderid) if mul_input == 4 and strategy.opentrades == 4 strategy.close_all(comment='숏전체종료', alert_message = sellcloseOrderid) if mul_input == 5 and strategy.opentrades == 5 strategy.close_all(comment='숏전체종료', alert_message = sellcloseOrderid) else if Alarm_TVExtbot if strategy.position_size == 0 if (longCondition == 1) strategy.entry("buy1", strategy.long, alert_message = '롱 1차 진입 📈📈 TVM:{"orderid":"' + buyOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (shortCondition == 1) strategy.entry("sell1", strategy.short, alert_message = '숏 1차 진입 📉📉 TVM:{"orderid":"' + sellOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if strategy.position_size > 0 if (longCondition == 1) if (strategy.opentrades == 1) and (mul_input == 2 or mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("buy2", strategy.long, alert_message = '롱 2차 진입 📈📈 TVM:{"orderid":"' + buyOrderid2 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (strategy.opentrades == 2) and (mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("buy3", strategy.long, alert_message = '롱 3차 진입 📈📈 TVM:{"orderid":"' + buyOrderid3 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (strategy.opentrades == 3) and (mul_input == 4 or mul_input == 5) strategy.entry("buy4", strategy.long, alert_message = '롱 4차 진입 📈📈 TVM:{"orderid":"' + buyOrderid4 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (strategy.opentrades == 4) and (mul_input == 5) strategy.entry("buy5", strategy.long, alert_message = '롱 5차 진입 📈📈 TVM:{"orderid":"' + buyOrderid5 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if strategy.position_size < 0 if (shortCondition == 1) if (strategy.opentrades == 1) and (mul_input == 2 or mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("sell2", strategy.short, alert_message = '숏 2차 진입 📉📉 TVM:{"orderid":"' + sellOrderid2 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (strategy.opentrades == 2) and (mul_input == 3 or mul_input == 4 or mul_input == 5) strategy.entry("sell3", strategy.short, alert_message = '숏 3차 진입 📉📉 TVM:{"orderid":"' + sellOrderid3 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (strategy.opentrades == 3) and (mul_input == 4 or mul_input == 5) strategy.entry("sell4", strategy.short, alert_message = '숏 4차 진입 📉📉 TVM:{"orderid":"' + sellOrderid4 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (strategy.opentrades == 4) and (mul_input == 5) strategy.entry("sell5", strategy.short, alert_message = '숏 5차 진입 📉📉 TVM:{"orderid":"' + sellOrderid5 + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (longCondition == 1 and strategy.position_size > 0) if mul_input == 1 and strategy.opentrades == 1 strategy.close_all(comment='롱전체종료', alert_message = '롱 종료 📈⛔TVM:{"orderid":"' + buycloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 2 and strategy.opentrades == 2 strategy.close_all(comment='롱전체종료', alert_message = '롱 종료 📈⛔TVM:{"orderid":"' + buycloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 3 and strategy.opentrades == 3 strategy.close_all(comment='롱전체종료', alert_message = '롱 종료 📈⛔TVM:{"orderid":"' + buycloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 4 and strategy.opentrades == 4 strategy.close_all(comment='롱전체종료', alert_message = '롱 종료 📈⛔TVM:{"orderid":"' + buycloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 5 and strategy.opentrades == 5 strategy.close_all(comment='롱전체종료', alert_message = '롱 종료 📈⛔TVM:{"orderid":"' + buycloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if (shortCondition == 1 and strategy.position_size < 0) if mul_input == 1 and strategy.opentrades == 1 strategy.close_all(comment='숏전체종료', alert_message = '숏 종료 📉⛔TVM:{"orderid":"' + sellcloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 2 and strategy.opentrades == 2 strategy.close_all(comment='숏전체종료', alert_message = '숏 종료 📉⛔TVM:{"orderid":"' + sellcloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 3 and strategy.opentrades == 3 strategy.close_all(comment='숏전체종료', alert_message = '숏 종료 📉⛔TVM:{"orderid":"' + sellcloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 4 and strategy.opentrades == 4 strategy.close_all(comment='숏전체종료', alert_message = '숏 종료 📉⛔TVM:{"orderid":"' + sellcloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT') if mul_input == 5 and strategy.opentrades == 5 strategy.close_all(comment='숏전체종료', alert_message = '숏 종료 📉⛔TVM:{"orderid":"' + sellcloseOrderid + '","memo":"' + account + '","token":"' + token + '"}:MVT')