Il s'agit d'une stratégie de trading à court terme basée sur les ruptures de canal. Elle utilise les ruptures des rails supérieur et inférieur du canal pour déterminer le début et la fin des tendances, et prendre des décisions commerciales en conséquence.
La stratégie calcule d'abord le plus haut haut et le plus bas bas au cours d'une certaine période pour construire le rail supérieur et inférieur du canal.
Si le prix dépasse le niveau supérieur, allez long.
Utilisez un stop loss mobile pour contrôler les risques.
Il existe deux règles de sortie facultatives: revenir à la ligne du milieu ou suivre le stop loss en mouvement.
La durée du canal et d'autres paramètres peuvent être ajustés pour optimiser la stratégie en fonction des différentes conditions du marché.
Il suffit de surveiller la relation prix-canal et de suivre les règles pour le commerce.
On négocie selon la tendance, pas de risque de contre-tendance.
Un canal clair et intuitif donne des signaux d'entrée explicites.
Une bonne marge bénéficiaire, peut réaliser des rendements satisfaisants dans la plupart des cas.
Beaucoup de paramètres réglables pour l'optimisation sur différents marchés.
L'évasion peut échouer, il y a des risques d'être pris au piège.
Le canal a besoin d'une période pour se former, ce qui n'est pas approprié pour les marchés limités.
Le retour au stop loss moyen peut être trop conservateur, incapable de maintenir les tendances.
L'optimisation des paramètres nécessite des données historiques, un surajustement possible dans le trading en direct.
La négociation mécanique des points de rupture peut augmenter la fréquence des transactions et les coûts de glissement.
Évaluez les canaux de différentes périodes et choisissez le meilleur.
Essayez de revenir au milieu et de déplacer le stop loss pour trouver un meilleur mécanisme de sortie.
Optimiser le pourcentage de stop loss pour réduire les risques d'être arrêté.
Ajouter un filtre de tendance pour éviter les transactions de rupture inappropriées.
Envisager d'augmenter la taille de la position mais de contrôler les risques.
Dans l'ensemble, il s'agit d'une stratégie de rupture à court terme mature. Elle a des règles d'entrée claires, un contrôle de risque approprié et fonctionne bien en général. Une amélioration supplémentaire peut être obtenue grâce à l'ajustement des paramètres. Mais des limitations inhérentes doivent être notées, des ajustements nécessaires pour différents marchés. Si elle est utilisée systématiquement, elle devrait générer des profits globaux cohérents.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // Strategy testing and optimisation for free Bitmex trading bot // © algotradingcc //@version=4 strategy("Channel Break [for free bot]", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.075) //Options buyPeriod = input(13, "Channel Period for Long position") sellPeriod = input(18, "Channel Period for Short position") isMiddleExit = input(true, "Is exit on Base Line?") takeProfit = input(46, "Take Profit (%) for position") stopLoss = input(9, "Stop Loss (%) for position") // Test Start startYear = input(2005, "Test Start Year") startMonth = input(1, "Test Start Month") startDay = input(1, "Test Start Day") startTest = timestamp(startYear,startMonth,startDay,0,0) //Test End endYear = input(2050, "Test End Year") endMonth = input(12, "Test End Month") endDay = input(30, "Test End Day") endTest = timestamp(endYear,endMonth,endDay,23,59) timeRange = time > startTest and time < endTest ? true : false // Long&Short Levels BuyEnter = highest(buyPeriod) BuyExit = isMiddleExit ? (highest(buyPeriod) + lowest(buyPeriod)) / 2: lowest(buyPeriod) SellEnter = lowest(sellPeriod) SellExit = isMiddleExit ? (highest(sellPeriod) + lowest(sellPeriod)) / 2: highest(sellPeriod) // Plot Data plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter") plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50) plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter") plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50) // Calc Take Profits & Stop Loss TP = 0.0 SL = 0.0 if strategy.position_size > 0 TP := strategy.position_avg_price*(1 + takeProfit/100) SL := strategy.position_avg_price*(1 - stopLoss/100) if strategy.position_size > 0 and SL > BuyExit BuyExit := SL if strategy.position_size < 0 TP := strategy.position_avg_price*(1 - takeProfit/100) SL := strategy.position_avg_price*(1 + stopLoss/100) if strategy.position_size < 0 and SL < SellExit SellExit := SL // Long Position if timeRange and strategy.position_size <= 0 strategy.entry("Long", strategy.long, stop = BuyEnter) strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TP, when = strategy.position_size > 0) // Short Position if timeRange and strategy.position_size >= 0 strategy.entry("Short", strategy.short, stop = SellEnter) strategy.exit("Short Exit", "Short", stop=SellExit, limit = TP, when = strategy.position_size < 0) // Close & Cancel when over End of the Test if time > endTest strategy.close_all() strategy.cancel_all()