Diese Strategie verwendet einen schrittweisen Pyramidenansatz, der auf dem Vergleich zwischen dem aktuellen Schlusskurs und dem vorherigen Schlusskurs basiert, um die Marktrichtung zu bestimmen. Wenn eine lange Gelegenheit identifiziert wird, wird sie mit mehreren allmählichen Einträgen lang. Wenn eine kurze Gelegenheit identifiziert wird, wird sie mit mehreren allmählichen Einträgen kurz. Die Anzahl der Einträge kann durch Parameter festgelegt werden. Gleichzeitig enthält die Strategie Zeitrahmenfilter, bei denen Handelssignale nur innerhalb des konfigurierten Handelszeitrahmens generiert werden.
Vergleichen Sie den aktuellen Bar
Innerhalb des zulässigen Handelszeitrahmens, wenn longCondition=1, wird es mit mehreren allmählichen Einträgen lang. Wenn shortCondition=1, wird es mit mehreren allmählichen Einträgen kurz.
Die Anzahl der Einträge wird durch den Pyramidenparameter festgelegt, der von 1 bis 5 konfiguriert werden kann, wobei 4 standardmäßig ist.
Eine Stop-Loss-Bedingung wird nach jedem Eintrag für den Fall gesetzt, dass der Markt umkehrt.
Handelssignale können auf verschiedene Handelsschnittstellen wie Toast oder Telegramm ausgeführt werden.
Die Strategie berücksichtigt hauptsächlich die Vorteile von Breakout- und gleitenden Durchschnittsstrategien. Während langen oder kurzen Gelegenheiten verwendet sie einen schrittweisen Pyramidenansatz, um dem Trend besser zu folgen und gleichzeitig Risiken zu kontrollieren. Sie enthält auch Zeitrahmenfilter, um zu vermeiden, dass während nicht wichtiger Handelssitzungen Signale generiert werden.
Schrittweise Pyramiden folgen den Trends besser.
Durch die Anpassung der Anzahl der Einträge wird es flexibler.
Unterstützt verschiedene Handelsschnittstellen für Skalierbarkeit.
Hat Stop-Loss-Mechanismen zur Risikokontrolle.
Der Zeitrahmenfilter vermeidet falsche Signale.
Eine falsche Einstellung der Parameter kann zu größeren Verlusten führen.
Netzwerkprobleme können einen rechtzeitigen Stop-Loss verhindern.
Die Parameter müssen für verschiedene Produkte angepasst werden.
Sie brauchen einen rechtzeitigen Stop-Loss, um Gewinne zu erzielen.
Lösungen:
Standard 4 Eintragungen sind angemessen.
Überprüfen Sie die Netzwerkverbindung.
Anpassung der Parameter an die Merkmale des Produkts.
Stellen Sie die Stop-Loss-Levels fest.
Erwägen Sie, weitere Indikatoren hinzuzufügen, um die Signalstärke zu beurteilen.
Testparameteroptimierungsergebnisse für verschiedene Produkte.
Einbeziehung von Algorithmen für maschinelles Lernen zur Optimierung von Parametern.
Verbesserung der Risikomanagementmechanismen.
Diese schrittweise pyramidierende gleitende Durchschnitts-Breakout-Strategie integriert die Vorteile von Trendfolgung und Risikokontrolle. Wenn wirksame Signale identifiziert werden, verwendet sie schrittweise Pyramidierung, um dem Trend zu folgen und gleichzeitig das Risiko durch konfigurierbare Anzahl von Einträgen zu kontrollieren. Sie beinhaltet auch Funktionalitäten wie einen Zeitrahmenfilter, um falsche Signale zu vermeiden. Die Strategie kann in vielen Aspekten weiter optimiert werden und hat eine große Erweiterbarkeit. Im Allgemeinen ist sie sehr effektiv für Trending-Produkte und wird dringend empfohlen.
/*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')