Stratégie de suivi de la tendance des prix Momentum


Date de création: 2023-11-13 16:44:58 Dernière modification: 2023-11-13 16:44:58
Copier: 0 Nombre de clics: 652
1
Suivre
1621
Abonnés

Stratégie de suivi de la tendance des prix Momentum

Aperçu

La stratégie de suivi des tendances des prix dynamiques utilise plusieurs indicateurs dynamiques pour identifier la tendance des prix, établir des positions au début de la tendance, et suivre la tendance des prix en fixant des arrêts de perte et de profit.

Principe de stratégie

La stratégie de suivi des tendances des prix dynamiques utilise principalement les indicateurs techniques suivants:

  1. Le ROC indique la dynamique des prix en calculant le pourcentage de la vitesse à laquelle les prix évoluent sur une période donnée. Lorsqu’il est positif, le ROC indique que les prix sont en hausse; lorsqu’il est négatif, le ROC indique que les prix sont en baisse.

  2. Indicateur de l’énergie de la pluralité: cet indicateur reflète la relation entre la force de la pluralité et la force de la tête vide. L’énergie de la pluralité> 0 signifie que la force de la pluralité est supérieure à la force de la tête vide, le prix augmente; au contraire, le prix baisse.

  3. Indicateur de déviation: L’indicateur de déviation est utilisé pour déterminer le renversement de la tendance en calculant la déviation du prix par rapport au volume de transaction. La stratégie utilise le signal de déviation comme moment d’entrée.

4.Le canal de Donchian: l’indicateur construit le canal par le prix le plus élevé et le prix le plus bas, les limites du canal peuvent servir de points de support et de résistance. La stratégie utilise le canal pour déterminer la direction de la tendance.

  1. Moyenne mobile: l’indicateur permet d’éliminer les fluctuations des prix supportés, révélant la direction des principales tendances. La stratégie consiste à l’utiliser pour déterminer la tendance générale des prix.

La stratégie consiste à déterminer la tendance des prix et le moment du revirement en fonction de plusieurs indicateurs ci-dessus. Au début de la tendance, la position de tête supérieure ou vide est établie en fonction du signal de l’indicateur.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Appliquer plusieurs indicateurs pour évaluer les tendances et réduire la probabilité d’erreur.

  2. L’utilisation d’indicateurs déviant de l’objectif de capture précise du point de basculement de la tendance.

  3. Les courants de tendance, combinés avec les courants et les moyennes mobiles, déterminent la direction des grandes tendances.

  4. Il est possible d’arrêter le freinage en temps opportun pour éviter le retrait et l’expansion.

  5. Adaptable en fonction des paramètres et adaptée aux différentes périodes et variétés de transactions.

  6. La logique de la stratégie est claire et compréhensible pour une optimisation ultérieure.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les jugements de combinaison de plusieurs indicateurs augmentent la probabilité d’erreur de signal et nécessitent un ajustement des paramètres pour optimiser le poids des indicateurs.

  2. Un arrêt trop petit peut augmenter la probabilité d’un arrêt, un arrêt trop grand peut augmenter le recul. Un arrêt raisonnable doit être considéré de manière globale.

  3. Les paramètres des différents cycles de marché nécessitent des ajustements, et une application aveugle peut entraîner une inadaptation au marché.

  4. Il est nécessaire d’avoir suffisamment de fonds pour soutenir les transactions simultanées à plusieurs unités, sans quoi il est difficile d’obtenir des rendements excessifs.

  5. Les transactions programmatiques présentent un risque de surcorrection et une certaine incertitude quant à l’efficacité de la plateforme.

Direction d’optimisation

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

  1. Optimiser les paramètres de l’indicateur pour trouver la combinaison optimale de paramètres pour différents cycles et variétés.

  2. Ajout d’algorithmes d’apprentissage automatique pour trouver automatiquement le paramètre optimal.

  3. Ajout d’un mécanisme d’adaptation des arrêts de perte et d’ajustement des points de perte en fonction des conditions du marché.

  4. La combinaison des facteurs de haute fréquence et des indicateurs fondamentaux améliore l’alpha de la stratégie.

  5. Développer un cadre de test automatisé, ajuster les combinaisons de paramètres et vérifier l’efficacité des transactions.

  6. L’introduction d’un module de gestion des risques pour contrôler la taille des positions et réduire les retraits.

  7. L’ajout de transactions simulées et de vérifications en direct pour améliorer la stabilité des stratégies.

Résumer

Cette stratégie utilise une combinaison de plusieurs indicateurs dynamiques pour déterminer la tendance des prix et définir des arrêts et des arrêts de perte pour bloquer les gains. Cette stratégie est capable de capturer efficacement la tendance des prix et présente une forte stabilité.

Code source de la stratégie
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")