Stratégie de négociation fondamentale de la ligne de paiement

Auteur:ChaoZhang est là., Date: 2023-11-15 15h25 et 57 min
Les étiquettes:

img

Résumé

Cette stratégie utilise le modèle de pinbar avec la détermination de la tendance en déplaçant les moyennes vers les écarts commerciaux dans la direction de la tendance. Elle génère des signaux de trading lorsque le prix se démarque du haut / bas formé par le chandelier de pinbar. De plus, elle utilise des moyennes mobiles rapides et lentes pour déterminer la direction générale de la tendance, évitant ainsi les mauvais signaux pendant l'action des prix dans la plage.

La logique de la stratégie

  1. Calculer les moyennes mobiles rapides (20 périodes) et lentes (50 périodes).

  2. Identifiez les barres haussières (close>open) et baissières (close

  3. Vérifiez si le pinbar haut/bas brise le haut/bas de la bougie précédente. Un pinbar haussier qui brise le haut précédent donne un signal long. Un pinbar baissier qui brise le bas précédent donne un signal court.

  4. Vérifiez également si l'AM rapide est supérieure à l'AM lente pour déterminer une tendance haussière et inversement pour une tendance baissière.

  5. Les signaux longs ne sont valables que lorsque l'AM rapide/lente indique une tendance haussière. Les signaux courts ne sont valables que lorsque l'AM rapide/lente indique une tendance baissière. Cela évite les mauvais signaux pendant l'action des prix dans la fourchette.

  6. Sur les signaux longs valides, allez long avec stoploss et takeprofit prédéfinis. sur les signaux courts valides, allez court avec stoploss et takeprofit prédéfinis.

  7. Si le MA rapide passe sous le MA lent, toute position existante est clôturée.

Les avantages

  • Utilise la barre haute/basse comme niveaux de rupture représentant une forte dynamique.

  • Considère la direction de la tendance pour éviter les mauvais signaux lors de l'action des prix dans la fourchette, améliorant ainsi la précision.

  • Capture les tendances et les écarts, avec de bonnes performances sur les marchés en tendance.

  • Les paramètres peuvent être optimisés pour différents produits et délais.

Risques et atténuation

  • Le risque d'échec peut être atténué en utilisant des niveaux d'échec plus larges et une dynamique plus forte.

  • Risque d'identification de tendance inexacte, qui peut être atténué en ajustant les paramètres de l'AM ou en ajoutant d'autres indicateurs de tendance.

  • Le stop-loss est trop serré, ce qui conduit à une sortie prématurée.

  • Le "take profit" est trop serré, ce qui restreint les bénéfices.

Des possibilités d'amélioration

  • Dans l'ensemble, les paramètres MA, breakout, stoploss et takeprofit peuvent être optimisés pour les produits et les délais pour une stratégie adaptée.

  • Différents indicateurs de performance tels que l'EMA, l'SMA, etc. peuvent être testés pour trouver l'indicateur optimal.

  • Des indicateurs supplémentaires comme le Momentum peuvent améliorer la précision de la tendance.

  • Les paramètres peuvent être optimisés dynamiquement à l'aide de techniques d'apprentissage automatique.

  • Le taux de réussite de l'évasion peut être amélioré grâce à l'apprentissage statistique.

Résumé

Cette stratégie combine tendance et dynamique pour des signaux filtrés théoriquement. La clé est une optimisation des paramètres robuste à travers les produits et les délais pour une bonne performance. De plus, des indicateurs auxiliaires et des techniques d'apprentissage automatique peuvent améliorer davantage la stratégie. Avec des améliorations continues, cela peut devenir un système de trading de rupture de tendance robuste.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Backtested Time Frame: H1
//Default Settings: Are meant to run successfully on all currency pairs to reduce over-fitting.
//Risk Warning: This is a forex trading robot, backtest performance will not equal future performance, USE AT YOUR OWN RISK.
//Code Warning: Although every effort has been made for robustness, this code has not been vetted by independent 3rd parties.
strategy("Pin Bar Strategy v1", overlay=true)

// User Input
usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false)
atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=1.9,confirm=false)
trd_rewd = input(title="Risk : Reward (1 : x*SL, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=3.1,confirm=false)
sma_fast = input(title="Fast MA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=20,confirm=false)
sma_slow = input(title="Slow MA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false)
use_slpe = input(title="Use MA Slope (Boolean)",type=input.bool,defval=true,confirm=false)
slp_long = input(title="Bull Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=1,confirm=false)
slp_shrt = input(title="Bear Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=-1,confirm=false)
emg_exit = input(title="Exit When MA Re-Cross (Boolean)",type=input.bool,defval=true,confirm=false)
ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false)

// Create Indicators
fastSMA = sma(close, sma_fast)
slowSMA = sma(close, sma_slow)
bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low)))
bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low)))
atr = atr(atr_valu)

// Specify Trend Conditions
smaUpTrend = (fastSMA > slowSMA) and (fastSMA[1] > slowSMA[1]) and (fastSMA[2] > slowSMA[2]) and (fastSMA[3] > slowSMA[3]) and (fastSMA[4] > slowSMA[4])
smaDnTrend = (fastSMA < slowSMA) and (fastSMA[1] < slowSMA[1]) and (fastSMA[2] < slowSMA[2]) and (fastSMA[3] < slowSMA[3]) and (fastSMA[4] < slowSMA[4])
candleUpTrend = (close[5] > fastSMA[5]) and (open[5] > fastSMA[5]) and (close[6] > fastSMA[6]) and (open[6] > fastSMA[6]) and (close[7] > fastSMA[7]) and (open[7] > fastSMA[7]) and (close[8] > fastSMA[8]) and (open[8] > fastSMA[8]) and (close[9] > fastSMA[9]) and (open[9] > fastSMA[9]) and (close[10] > fastSMA[10]) and (open[10] > fastSMA[10])
candleDnTrend = (close[5] < fastSMA[5]) and (open[5] < fastSMA[5]) and (close[6] < fastSMA[6]) and (open[6] < fastSMA[6]) and (close[7] < fastSMA[7]) and (open[7] < fastSMA[7]) and (close[8] < fastSMA[8]) and (open[8] < fastSMA[8]) and (close[9] < fastSMA[9]) and (open[9] < fastSMA[9]) and (close[10] < fastSMA[10]) and (open[10] < fastSMA[10])

// Specify Piercing Conditions
bullPierce = ((low < fastSMA) and (open > fastSMA) and (close > fastSMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastSMA) and (open < fastSMA) and (close < fastSMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))

// MA Slope Function
angle(_source) =>
    rad2degree=180/3.14159265359
    ang=rad2degree*atan((_source[0] - _source[1])/atr(atr_valu)) 

// Calculate MA Slope
fastSlope=angle(fastSMA)
slowSlope=angle(slowSMA)
slopingUp = fastSlope > slp_long
slopingDn = fastSlope < slp_shrt
    
// Specify Entry Conditions
longEntry = smaUpTrend and bullishPinBar and bullPierce
shortEntry = smaDnTrend and bearishPinBar and bearPierce
longEntryWithSlope = smaUpTrend and bullishPinBar and bullPierce and slopingUp
shortEntryWithSlope = smaDnTrend and bearishPinBar and bearPierce and slopingDn

// Specify Secondary Exit Conditions
longExit = crossunder(fastSMA, slowSMA)
shortExit = crossover(fastSMA, slowSMA)

// Long Entry Function
enterlong() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = low[1] - atr[1] * atr_mult
    entryPrice = high[1]
    units = risk / (entryPrice - stopLoss)
    takeProfit = entryPrice + trd_rewd * (entryPrice - stopLoss)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", "long", stop=stopLoss, limit=takeProfit)
    
// Short Entry Function
entershort() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = high[1] + atr[1] * atr_mult
    entryPrice = low[1]
    units = risk / (stopLoss - entryPrice)
    takeProfit = entryPrice - trd_rewd * (stopLoss - entryPrice)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", "short", stop=stopLoss, limit=takeProfit)
    
// Execute Long Entry w/o Slope
if (longEntry and use_slpe == false)
    enterlong()
    
// Execute Long Entry w/ Slope
if (longEntryWithSlope and use_slpe == true)
    enterlong()

// Exit Long Due to Re-Cross
if(longExit and strategy.position_size > 0 and emg_exit)    
    strategy.order("exit long, re-cross", strategy.short, abs(strategy.position_size))

// Cancel the Long Entry
strategy.cancel("long", barssince(longEntry) > ent_canc)

// Execute Short Entry w/o Slope
if (shortEntry and use_slpe == false)
    entershort() 
    
// Execute Short Entry w/ Slope
if (shortEntryWithSlope and use_slpe == true)
    entershort() 

// Exit Short Due to Re-Cross
if(shortExit and strategy.position_size < 0 and emg_exit)    
    strategy.order("exit short, re-cross", strategy.long, abs(strategy.position_size))

// Cancel the Short Entry
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Plot Moving Averages to Chart
plot(fastSMA, color=color.red)
plot(slowSMA, color=color.blue)

// Plot Pin Bars to Chart
plotshape(bullishPinBar, style=shape.arrowup, location=location.abovebar, color=#FF0000, text='')
plotshape(bearishPinBar, style=shape.arrowdown, location=location.belowbar, color=#0000FF, text='')

Plus de