Esta estrategia utiliza un enfoque de pirámide paso a paso basado en la comparación entre el precio de cierre actual y el precio de cierre anterior para determinar la dirección del mercado. Cuando se identifica una oportunidad larga, se prolongará con múltiples entradas graduales. Cuando se identifica una oportunidad corta, se acortará con múltiples entradas graduales. El número de entradas se puede establecer a través de parámetros.
Compara el precio de cierre de la barra actual (close) con el precio de cierre de la barra anterior (close[1]). Si close > close[1], se determina como una oportunidad larga y se establece longCondition=1.
Dentro del marco de tiempo de negociación permitido, si longCondition=1, será largo con múltiples entradas graduales.
El número de entradas se establece a través del parámetro de pirámide, que se puede configurar de 1 a 5, con 4 por defecto.
Se establece una condición de stop loss después de cada entrada en caso de que el mercado se invierta.
Las señales comerciales se pueden emitir a diferentes interfaces comerciales como toast o telegrama.
La estrategia considera principalmente las ventajas de las estrategias de breakout y promedio móvil. Durante las oportunidades largas o cortas, utiliza un enfoque de pirámide paso a paso para seguir mejor la tendencia mientras controla los riesgos. También incorpora filtros de marco de tiempo para evitar generar señales durante las sesiones comerciales no importantes.
La pirámide escalonada sigue mejor las tendencias.
El número ajustable de entradas lo hace más flexible.
Soporta diferentes interfaces de negociación para la escalabilidad.
Tiene mecanismos de stop loss para controlar los riesgos.
El filtro de tiempo evita señales falsas.
La configuración incorrecta de los parámetros puede llevar a mayores pérdidas.
Los problemas de la red pueden impedir que se detenga la pérdida en el momento oportuno.
Los parámetros deben ajustarse para diferentes productos.
Necesitas un stop loss oportuno para obtener ganancias.
Soluciones:
Es apropiado incluir 4 entradas por defecto.
Compruebe la conectividad de red.
Ajustar los parámetros de acuerdo con las características del producto.
Establezca los niveles de stop loss.
Considera añadir más indicadores para juzgar la fuerza de la señal.
Resultados de optimización de parámetros de prueba en diferentes productos.
Incorporar algoritmos de aprendizaje automático para optimizar los parámetros.
Mejorar los mecanismos de gestión de riesgos.
Esta estrategia de ruptura de promedios móviles de pirámide gradual integra las ventajas de seguir tendencias y controlar riesgos. Cuando se identifican señales efectivas, utiliza la pirámide gradual para seguir la tendencia mientras controla la exposición al riesgo a través de un número configurable de entradas. También incorpora funcionalidades como el filtro de marcos de tiempo para evitar señales falsas. La estrategia se puede optimizar aún más en muchos aspectos y tiene una gran extensibilidad. En general, es muy eficaz para productos de tendencias y se recomienda encarecidamente.
/*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')