
La stratégie utilise une méthode d’augmentation progressive de la position pour juger de la direction de la tendance en fonction de la comparaison du prix de clôture avec le prix de clôture de la veille. Lorsqu’elle est jugée comme une opportunité de hausse, elle augmente progressivement la position plusieurs fois; lorsqu’elle est jugée comme une opportunité de baisse, elle augmente progressivement la position plusieurs fois.
Comparaison de la clôture actuelle de la ligne K avec la clôture précédente de la ligne K[1], si près > près[1] est considéré comme une opportunité de vente, et longCondition=1; si close < close[1], on considère que c’est une opportunité de baisse et on définit shortCondition=1。
Dans la période de temps autorisée, si longCondition = 1, le gain est progressif; si shortCondition = 1, le gain est progressif.
Le nombre de mises en réserve est défini par les paramètres de pyramiding, avec une sélection de 1 à 5 mises en réserve et 4 par défaut.
Chaque fois qu’il y a un gain de position, il y a aussi une condition de couverture, et s’il y a un revirement, il y a une perte immédiate.
Il est possible de choisir d’exporter le signal de transaction vers différentes interfaces de transaction, telles que toast, télégramme, etc.
Cette stratégie prend en compte principalement les avantages des stratégies de rupture et des stratégies de linéaire, en adoptant une approche de prise de position progressive en cas de hausse ou de baisse, permettant de suivre pleinement la tendance et de contrôler les risques. En même temps, il combine un filtrage temporel pour éviter les signaux GENERATED pendant les heures de négociation non principales.
La méthode de l’accumulation progressive permet de mieux suivre les tendances
Plus de flexibilité dans le stockage
Des interfaces de négociation différentes, un large éventail de types de quantités
Il y a des mécanismes de prévention et des risques contrôlables.
Filtrage du temps pour éviter les signaux erronés
Une mauvaise configuration des paramètres peut augmenter les pertes
Les problèmes de réseau pourraient empêcher la réparation en temps opportun
Les paramètres doivent être adaptés aux différentes variétés
Il faut un arrêt en temps opportun pour bloquer les bénéfices
La solution est simple:
Ajustez le nombre de prises de position à 4 par défaut
Vérifiez la connexion réseau
Adaptation des paramètres en fonction des caractéristiques de la variété
Définition du stop-loss
Il est possible d’envisager d’ajouter plus d’indicateurs pour juger de la force du signal.
Test de l’optimisation des paramètres pour différentes variétés
Paramètres d’optimisation des algorithmes d’apprentissage automatique peuvent être ajoutés
Les mécanismes de gestion des risques peuvent être optimisés
La stratégie de rupture progressive de la courbe de la hausse des positions intègre les avantages du suivi de la tendance et de la maîtrise des risques. Elle suit la tendance progressivement lorsque des signaux efficaces sont jugés. Elle contrôle l’ouverture des risques en ajustant le nombre de prises de position. Elle intègre également des fonctions telles que le filtrage des périodes de temps pour contrôler les signaux erronés.
/*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')