Stratégie composée d'arrêt des pertes et de prise de bénéfices basée sur une entrée aléatoire

Auteur:ChaoZhang est là., Date: 24 janvier 2024
Les étiquettes:

img

Résumé

L'idée principale de cette stratégie est de déterminer le point d'entrée au hasard et de définir trois points de prise de profit et un point de stop-loss pour gérer les risques et contrôler les bénéfices et les pertes de chaque transaction.

La logique de la stratégie

Cette stratégie utilise le nombre aléatoire rd_number_entry entre 11 et 13 pour déterminer le point d'entrée long, et utilise rd_number_exit entre 20 et 22 pour déterminer la fermeture des positions.Le premier point de prise de profit est le prix d'entrée plus atr (((14)tpx, le deuxième point de prise de profit est le prix d'entrée plus 2tpx, et le troisième point de prise de profit est le prix d'entrée plus 3Le principe d'un short est similaire, sauf que la décision d'entrée prend des valeurs d'entrée différentes et que la direction de prise de profit et de stop loss est opposée.

Le risque peut être contrôlé en ajustant tpx (coefficient de prise de profit) et slx (coefficient de stop loss).

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'utilisation de l'entrée aléatoire peut réduire la probabilité d'ajustement de la courbe
  2. La mise en place de plusieurs points stop loss et take profit peut contrôler le risque d'une seule transaction.
  3. L'utilisation d'atr pour définir le profit et le stop loss permet de le baser sur la volatilité du marché.
  4. Le risque de négociation peut être contrôlé en ajustant les coefficients

Analyse des risques

Les risques de cette stratégie comprennent également:

  1. L'entrée aléatoire peut manquer les tendances
  2. Si le stop loss est trop faible, il peut être facilement arrêté
  3. Si le bénéfice est trop important, il peut être insuffisant
  4. Des paramètres inappropriés peuvent entraîner des pertes plus importantes

Les risques peuvent être réduits en ajustant les coefficients de prise de profit et de stop-loss et en optimisant la logique d'entrée aléatoire.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Améliorer la logique des entrées aléatoires et intégrer des jugements sur les indicateurs de tendance
  2. Optimiser les coefficients de prise de bénéfices et de stop-loss pour rendre le ratio de profit plus raisonnable
  3. Améliorer le contrôle de la position pour utiliser différents espaces de prise de profit à différentes étapes
  4. Optimiser les paramètres avec des algorithmes d'apprentissage automatique

Conclusion

Cette stratégie est basée sur l'entrée aléatoire et définit plusieurs points de prise de profit et de stop-loss pour contrôler le risque d'un seul commerce. En raison de la grande aléativité, la probabilité de corrélation de la courbe peut être réduite. Le risque de trading peut être réduit grâce à l'optimisation des paramètres. Il y a encore beaucoup de place pour une optimisation et des recherches supplémentaires.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Random Strategy with 3 TP levels and SL", overlay=true,max_bars_back = 50)

tpx = input(defval = 0.8, title = 'Atr multiplication for TPs?')
slx = input(defval = 1.2, title = 'Atr multiplication for SL?')
isLong = false
isLong := nz(isLong[1])

isShort = false
isShort := nz(isShort[1])

entryPrice = 0.0
entryPrice := nz(entryPrice[1])
tp1 = true
tp1 := nz(tp1[1])
tp2 = true
tp2 := nz(tp2[1])

sl_price = 3213.0
sl_price := nz(sl_price[1])

sl_atr = atr(14)*slx
tp_atr = atr(14)*tpx

rd_number_entry = 1.0
rd_number_entry := (16708 * nz(rd_number_entry[1], 1) % 2147483647)%17

rd_number_exit = 1.0
rd_number_exit := ((16708 * time % 2147483647) %17)


//plot(rd_number_entry)

shortCondition = (rd_number_entry == 13? true:false) and (year >= 2017) and not isLong and not isShort
longCondition = (rd_number_entry == 11 ? true:false) and (year >= 2017) and not isShort and not isShort
//Never exits a trade:
exitLong = (rd_number_exit == 22?true:false) and (year >= 2018) and not isShort
exitShort = (rd_number_exit ==  22?true:false) and (year >= 2018) and not isLong


//shortCondition = crossunder(sma(close, 14), sma(close, 28)) and year >= 2017
//longCondition = crossover(sma(close, 14), sma(close, 28)) and year >= 2017

//exitLong = crossunder(ema(close, 14), ema(close, 28)) and year >= 2017
//exitShort = crossover(ema(close, 14), ema(close, 28)) and year >= 2017

if (longCondition and not isLong)
    strategy.entry('Long1', strategy.long)
    strategy.entry('Long2', strategy.long)
    strategy.entry('Long3', strategy.long)
    isLong := true
    entryPrice := close
    isShort := false
    tp1 := false
    tp2 := false
    sl_price := close-sl_atr

if (shortCondition and not isShort)
    strategy.entry('Short1', strategy.short)
    strategy.entry('Short2', strategy.short)
    strategy.entry('Short3', strategy.short)
    isShort := true
    entryPrice := close
    isLong := false
    tp1 := false
    tp2 := false
    sl_price := close+sl_atr
    
if (exitShort and isShort)
    strategy.close('Short1')
    strategy.close('Short2')
    strategy.close('Short3')
    isShort :=  false

if (exitLong and isLong)
    strategy.close('Long1')
    strategy.close('Long2')
    strategy.close('Long3')
    isLong :=  false

if isLong
    if (close > entryPrice + tp_atr) and not tp1
        strategy.close('Long1')
        tp1 := true
        sl_price := close - tp_atr
    if (close > entryPrice + 2*tp_atr) and not tp2
        strategy.close('Long2')
        tp2 := true
        sl_price := close - tp_atr
    if (close > entryPrice + 3*tp_atr)
        strategy.close('Long3')
        isLong := false
    if (close < sl_price)
        strategy.close('Long1')
        strategy.close('Long2')
        strategy.close('Long3')
        isLong := false

if isShort
    if (close < entryPrice - tp_atr) and not tp1
        strategy.close('Short1')
        sl_price := close + tp_atr
        tp1 := true
    if (close < entryPrice - 2*tp_atr) and not tp2
        strategy.close('Short2')
        sl_price := close + tp_atr
        tp2 := true
    if (close < entryPrice - 3*tp_atr)
        strategy.close('Short3')
        isShort := false
    if (close > sl_price)
        strategy.close('Short1')
        strategy.close('Short2')
        strategy.close('Short3')
        isShort := false
plot(atr(14)*slx)
plot(sl_price)

Plus de