Stratégie composite de stop loss et de take profit basée sur une entrée aléatoire


Date de création: 2024-01-24 15:38:49 Dernière modification: 2024-01-24 15:38:49
Copier: 5 Nombre de clics: 688
1
Suivre
1617
Abonnés

Stratégie composite de stop loss et de take profit basée sur une entrée aléatoire

Aperçu

L’idée principale de cette stratégie est de déterminer le point d’entrée à partir d’un nombre aléatoire, en définissant trois points d’arrêt et un point d’arrêt pour gérer le risque et contrôler les pertes de chaque transaction.

Principe de stratégie

La stratégie utilise le nombre aléatoire de rd_number_entry pour décider de faire plus de points d’entrée entre 11 et 13, et le nombre aléatoire de rd_number_exit entre 20 et 22 pour décider d’ouvrir la position. Après avoir fait plus, le stop loss est réglé sur le prix d’entrée moinsatr(14) * slx。 En même temps, trois points d’arrêt sont réglés, le premier point d’arrêt sur le prix d’entrée plusatr(14) * tpx, le deuxième point d’arrêt sur le prix d’entrée plus 2* tpx, le troisième point d’arrêt sur le prix d’entrée plus 3* tpx。 Le principe de la blanchisserie est similaire, mais la différence est que le point d’arrêt est réglé sur la rd_number_entry en prenant une valeur différente et le stop loss dans la direction opposée。

Cette stratégie permet de contrôler le risque en ajustant le tpx (coefficient d’arrêt) et le slx (coefficient d’arrêt).

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation d’une entrée aléatoire peut réduire la probabilité d’une adéquation de la courbe
  2. La mise en place de plusieurs points de stop-loss permet de contrôler le risque d’une seule transaction
  3. L’atr est utilisé pour définir un stop loss et un point de perte basé sur les fluctuations du marché.
  4. Le risque de transaction peut être contrôlé en ajustant le coefficient

Analyse des risques

La stratégie présente également les risques suivants:

  1. L’entrée au hasard peut vous faire manquer quelque chose
  2. Un point d’arrêt trop petit peut être arrêté.
  3. L’espace de stockage est trop grand, les bénéfices peuvent être faibles
  4. Des paramètres inappropriés peuvent augmenter les pertes

Le risque peut être réduit en ajustant le coefficient de stop-loss et en optimisant la logique d’entrée aléatoire.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Amélioration de la logique d’entrée aléatoire, combinée à des indicateurs de tendance
  2. Optimiser le coefficient de stop-loss pour rendre les gains plus raisonnables que les pertes
  3. Augmentation du contrôle de la position et utilisation de différents espaces de freinage à différentes étapes
  4. Paramètres d’optimisation combinés à des algorithmes d’apprentissage automatique

Résumer

Cette stratégie est basée sur l’entrée aléatoire, la mise en place de plusieurs points d’arrêt et de perte pour contrôler le risque d’une seule transaction. La probabilité de corrélation est réduite par l’optimisation des paramètres, car une forte aléatoire peut réduire le risque de transaction. La possibilité d’optimisation ultérieure est grande et mérite une étude plus approfondie.

Code source de la stratégie
/*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)