
La stratégie est basée sur un système de confirmation de tendance formé de trois moyennes mobiles ((EMA rapide, EMA moyenne et SMA lente), combinant les formes de pointe classiques ((Pin Bar) en tant que signal d’entrée, et intégrant un mécanisme de contrôle du risque à plusieurs niveaux. La stratégie utilise la technologie de redessinage pour s’assurer que tous les signaux sont générés sur la base de données K-lignes confirmées, ce qui améliore efficacement la fiabilité du signal.
La stratégie est basée sur les principes de négociation suivants:
Système de confirmation de tendance à trois moyennes mobilesLa stratégie consiste à construire un environnement de tendance en utilisant des moyennes mobiles de trois cycles différents, ce qui nécessite une alignement de tendance clair entre les EMA rapides (default 6 cycles), les EMA moyennes (default 18 cycles) et les SMA lentes (default 50 cycles). Les tendances à plusieurs têtes nécessitent: EMA rapides > EMA moyennes > SMA lentes; les tendances à vide nécessitent: EMA rapides < EMA moyennes < SMA lentes.
Reconnaissance de signaux de forme de brocheLa stratégie: après avoir établi la direction de la tendance, recherchez une forme de broche qui est en accord avec la direction de la tendance (Pin Bar) comme point d’entrée spécifique. La forme de broche exige que les lignes K représentent plus de 66% de la longueur totale, ce qui garantit une force de rétroaction suffisante.
Mécanisme de confirmation du signal retardé: Pour éviter les problèmes de redessinage, la stratégie utilise des données de ligne K entièrement formées (confirmedClose, confirmedOpen, etc.) pour générer des signaux et retarder le signal de confirmation d’une ligne K, afin de s’assurer que la transaction est basée sur le comportement du marché confirmé.
Système de gestion dynamique des risques:
Double protection contre les dommages:
Contrôle de la fenêtre de temps:
Conception résistante à la peinture: la stratégie est entièrement basée sur les données de ligne K confirmées, évitant les problèmes de refonte des indicateurs courants et améliorant la cohérence des résultats de la rétroanalyse avec la performance du disque réel.
Un système de contrôle des risques parfait:
Filtrage de qualité du signal:
Une gestion du temps souple:
Gestion de position adaptative: Le système ajuste automatiquement la taille de la position en fonction de la volatilité du marché (ATR), réduit la position en cas de forte volatilité et augmente la position en cas de forte volatilité, ce qui permet un équilibre dynamique du risque.
Une dépendance excessive à l’environnement de tendanceLa stratégie peut générer de fréquents faux signaux dans les marchés de couverture horizontale, entraînant des arrêts continus. Remède: Un filtre de force de tendance peut être ajouté, tel que l’indicateur ADX, pour négocier uniquement lorsque la force de tendance est suffisante.
Limites du mode Pin Bar: Bien que la barre de broches soit un signal inversé puissant, elle peut apparaître fréquemment dans les marchés très volatils et n’a pas de signification pratique. Solution: Augmenter la confirmation de transaction ou augmenter les exigences de ratio de ligne d’ombre de la barre de broches.
Risques liés au levierRésolution: Utilisez le levier de manière conservatrice, en recommandant de ne pas dépasser 5 fois la valeur initiale, et de l’ajuster en fonction des résultats des retours historiques.
Risque d’optimisation des paramètres par rapport à la courbe: contient plusieurs paramètres réglables (cycle EMA, cycle ATR, etc.) qui exposent la stratégie à un risque d’optimisation excessive. Solution: tester la stabilité des paramètres sur plusieurs périodes de temps et sur le marché, en utilisant une analyse par étapes (paramètres de vérification Walk Forward).
Réservation de risque: un ATR trop petit peut entraîner des arrêts fréquents, un ATR trop grand peut entraîner des pertes excessives. Solution: en fonction des caractéristiques du marché et du cycle de négociation, recherchez un point d’équilibre pour le paramètre d’arrêt, il est recommandé de tester plusieurs paramètres en combinaison avec des limites de risque de fonds.
Augmenter le filtrage des conditions du marché:
Amélioration de la qualité du signal:
Les paramètres dynamiques s’adaptent:
Coordonnées à cycles multiples:
Optimisation de la gestion des fonds:
La stratégie de trading quantifiée de risque dynamique en forme de triple moyenne mobile est un système de trading quantifié professionnel qui combine l’analyse technique multiple et la gestion des risques. En combinant la confirmation de tendance en forme de triple moyenne mobile avec l’identification de la forme de la barre d’épingle, la stratégie est capable de capturer des opportunités de trading de haute qualité dans des marchés à forte tendance.
Cette stratégie est la mieux adaptée pour être utilisée dans des environnements de marché clairement tendanciels et est particulièrement efficace pour les produits financiers à forte volatilité. Cependant, les utilisateurs doivent être conscients des limites de la stratégie dans le comptage horizontal du marché, ainsi que des risques potentiels liés à l’utilisation du levier et au paramétrage. Il y a encore beaucoup de place pour améliorer la stratégie par des orientations d’optimisation suggérées, telles que l’augmentation du filtrage de l’environnement de marché, l’amélioration de la qualité du signal et l’adaptation des paramètres.
Dans l’ensemble, il s’agit d’une stratégie de trading quantitative, structurée, à risque contrôlable et logiquement claire, qui convient aux traders expérimentés et qui peut être appliquée à la négociation en bourse après avoir été suffisamment testée. Avec des paramètres de configuration raisonnables et une utilisation prudente du levier, la stratégie a le potentiel d’être un outil puissant dans l’arsenal des traders.
/*backtest
start: 2024-05-14 00:00:00
end: 2025-05-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("Rich Harvester", overlay=true,
initial_capital=200,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=2,
default_qty_type=strategy.cash)
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
// 抗重绘核心修改(使用已确认K线数据)
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
confirmedClose = close[1]
confirmedOpen = open[1]
confirmedHigh = high[1]
confirmedLow = low[1]
// User Input (新增参数)
leverage = input.float(title='杠杆倍数', minval=0.1, maxval=100.0, step=0.1, defval=1.0, group="★ 风险控制")
// User Input (原有参数完全保留)
usr_risk = input.int(title='Equity Risk (%)', minval=1, maxval=100, step=1, defval=3, confirm=false)
atr_mult = input.float(title='Stop Loss (x*ATR, Float)', minval=0.1, maxval=100, step=0.1, defval=0.5, confirm=false)
slPoints = input.int(title='Stop Loss Trail Points (Pips)', minval=1, maxval=1000, step=1, defval=1, confirm=false)
slOffset = input.int(title='Stop Loss Trail Offset (Pips)', minval=1, maxval=1000, step=1, defval=1, confirm=false)
sma_slow = input.int(title='Slow SMA (Period)', minval=1, maxval=500, step=1, defval=50, confirm=false)
ema_medm = input.int(title='Medm EMA (Period)', minval=1, maxval=500, step=1, defval=18, confirm=false)
ema_fast = input.int(title='Fast EMA (Period)', minval=1, maxval=500, step=1, defval=6, confirm=false)
atr_valu = input.int(title='ATR (Period)', minval=1, maxval=500, step=1, defval=14, confirm=false)
ent_canc = input.int(title='Cancel Entry After X Bars (Period)', minval=1, maxval=500, step=1, defval=3, confirm=false)
// Create Indicators (使用确认数据)
slowSMA = ta.sma(confirmedClose, sma_slow)
medmEMA = ta.ema(confirmedClose, ema_medm)
fastEMA = ta.ema(confirmedClose, ema_fast)
atr = ta.atr(atr_valu)[1] // 使用前值
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
// 信号系统优化(延迟信号确认)
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
bullishPinBar = (confirmedClose > confirmedOpen and (confirmedOpen - confirmedLow) > 0.66 * (confirmedHigh - confirmedLow)) or
(confirmedClose < confirmedOpen and (confirmedClose - confirmedLow) > 0.66 * (confirmedHigh - confirmedLow))
bearishPinBar = (confirmedClose > confirmedOpen and (confirmedHigh - confirmedClose) > 0.66 * (confirmedHigh - confirmedLow)) or
(confirmedClose < confirmedOpen and (confirmedHigh - confirmedOpen) > 0.66 * (confirmedHigh - confirmedLow))
// 趋势过滤条件(使用确认数据)
fanUpTrend = fastEMA > medmEMA and medmEMA > slowSMA
fanDnTrend = fastEMA < medmEMA and medmEMA < slowSMA
// 延迟信号确认(等待K线闭合)
longCondition = fanUpTrend and bullishPinBar[1] // 延迟1根K线
shortCondition = fanDnTrend and bearishPinBar[1]
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
// 交易执行系统(仅修改风险计算部分)
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
enterlong() =>
risk = usr_risk * 0.01 * strategy.equity * leverage // 添加杠杆影响
stopLoss = confirmedLow - atr * atr_mult
entryPrice = confirmedHigh
units = risk / (entryPrice - stopLoss)
strategy.entry('long', strategy.long, units, stop=entryPrice)
strategy.exit('exit long', from_entry='long', trail_points=slPoints, trail_offset=slOffset)
entershort() =>
risk = usr_risk * 0.01 * strategy.equity * leverage // 添加杠杆影响
stopLoss = confirmedHigh + atr * atr_mult
entryPrice = confirmedLow
units = risk / (stopLoss - entryPrice)
strategy.entry('short', strategy.short, units, stop=entryPrice)
strategy.exit('exit short', from_entry='short', trail_points=slPoints, trail_offset=slOffset)
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
// 交易执行系统
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
if longCondition
enterlong()
if shortCondition
entershort()
strategy.cancel('long', ta.barssince(longCondition) > ent_canc)
strategy.cancel('short', ta.barssince(shortCondition) > ent_canc)
strategy.close_all(when=hour == 16 and dayofweek == dayofweek.friday, comment='exit all, market-closed')
strategy.close_all(when=ta.crossunder(fastEMA, medmEMA), comment='exit long, re-cross')
strategy.close_all(when=ta.crossover(fastEMA, medmEMA), comment='exit short, re-cross')
plot(fastEMA, "快EMA", color.new(#FF6B00, 0), 2)
plot(medmEMA, "中EMA", color.new(#0096FF, 0), 2)
plot(slowSMA, "慢SMA", color.new(#00C800, 0), 2)
plotshape(longCondition, "多信号", shape.labelup, location.belowbar, color=#00FF00, text="▲", textcolor=#FFFFFF)
plotshape(shortCondition, "空信号", shape.labeldown, location.abovebar, color=#FF0000, text="▼", textcolor=#FFFFFF)