Cette stratégie est un système de trading de suivi des tendances basé sur le croisement des moyennes mobiles exponentielles (EMA) à 110 et 200 jours. Elle identifie les tendances du marché à travers l'intersection des moyennes mobiles exponentielles à court et à long terme, incorporant des mécanismes de stop-loss et de take-profit pour le contrôle des risques. Le système exécute automatiquement les positions longues et courtes à la confirmation de la tendance tout en surveillant continuellement le risque de position.
La logique de base repose sur la continuité des tendances des prix, en utilisant les croisements EMA110 et EMA200 pour capturer les signaux d'inversion de tendance. Lorsque la moyenne mobile à court terme (EMA110) franchit le seuil supérieur de la moyenne mobile à long terme (EMA200), elle signale une formation de tendance haussière, déclenchant une position longue. Inversement, lorsque la moyenne mobile à court terme franchit le seuil inférieur à la moyenne mobile à long terme, elle signale une formation de tendance baissière, déclenchant une position courte. Pour la gestion des risques, la stratégie fixe un niveau de stop-loss de 1% et un niveau de prise de profit de 0,5% pour chaque position afin de protéger les profits et limiter les pertes potentielles.
La stratégie capture les tendances grâce à des croisements moyens mobiles tout en gérant le risque grâce à des mécanismes de stop-loss et de take-profit, démontrant une conception saine et une rigueur logique.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA110/200 Cross with Stop-Loss and Take-Profit", overlay=true) // 定义EMA110和EMA200 ema110 = ta.ema(close, 110) ema200 = ta.ema(close, 250) // 画出EMA plot(ema110, color=color.blue, title="EMA110") plot(ema200, color=color.red, title="EMA200") // 计算交叉信号 longCondition = ta.crossover(ema110, ema200) // EMA110上穿EMA200,做多 shortCondition = ta.crossunder(ema110, ema200) // EMA110下穿EMA200,做空 // 设置止损和止盈 stopLoss = 0.01 // 止损1% takeProfit = 0.005 // 止盈0.5% // 判断是否已有仓位 isLong = strategy.position_size > 0 // 当前是否为多头仓位 isShort = strategy.position_size < 0 // 当前是否为空头仓位 // 执行策略:做多时平空,做空时平多 if (longCondition and not isLong) // 如果满足做多条件并且当前没有多头仓位 if (isShort) // 如果当前是空头仓位,先平空 strategy.close("Short") strategy.entry("Long", strategy.long) // 执行做多 strategy.exit("Take Profit/Stop Loss", "Long", stop=close * (1 - stopLoss), limit=close * (1 + takeProfit)) if (shortCondition and not isShort) // 如果满足做空条件并且当前没有空头仓位 if (isLong) // 如果当前是多头仓位,先平多 strategy.close("Long") strategy.entry("Short", strategy.short) // 执行做空 strategy.exit("Take Profit/Stop Loss", "Short", stop=close * (1 + stopLoss), limit=close * (1 - takeProfit)) // 在表格中显示信号 var table myTable = table.new(position.top_right, 1, 1) if (longCondition and not isLong) table.cell(myTable, 0, 0, "Buy Signal", text_color=color.green) if (shortCondition and not isShort) table.cell(myTable, 0, 0, "Sell Signal", text_color=color.red)