Stratégie d'indicateurs longs et courts


Date de création: 2023-09-25 17:34:46 Dernière modification: 2023-09-25 17:34:46
Copier: 5 Nombre de clics: 909
1
Suivre
1617
Abonnés

Aperçu

L’idée centrale de cette stratégie est de combiner les indicateurs polygones et les moyennes mobiles de base pour réaliser le suivi de la tendance et le renversement de la tendance. Le suivi de la tendance est effectué lorsque le prix est aligné avec l’indicateur et le renversement de la tendance lorsque le prix et l’indicateur sont divergents.

Principe de stratégie

La stratégie est basée sur trois indicateurs personnalisés:

  1. Indicateur de la tendance: Calcule la relation entre le prix et le canal de survente et de survente, détermine les tendances de la tendance à la hausse et à la baisse, retourne 1, 0, -1, trois états.

  2. Le canal de survente (Tsl): ATR est calculé en fonction de la trajectoire ascendante et descendante. Une rupture de la trajectoire ascendante est considérée comme une survente et une rupture de la trajectoire descendante comme une rupture de la trajectoire descendante.

  3. Moyenne mobile de base ((MA): calcul de la moyenne mobile simple du prix de clôture sur 20 cycles.

En particulier, la stratégie est basée sur la valeur de l’indicateur polyvalent pour déterminer si le prix est en hausse, en oscillation ou en hausse. Lorsque l’indicateur polyvalent est de 1, il est en hausse; Lorsque l’indicateur polyvalent est de -1, il est en hausse.

En outre, la rupture des moyennes mobiles sert également de signal auxiliaire pour orienter les transactions. Les prix augmentent lorsqu’ils traversent la moyenne supérieure et baissent lorsqu’ils traversent la moyenne inférieure.

Les stratégies de négociation à plusieurs niveaux sont les suivantes:

  1. Indicateur d’hypermarché > 0, la hausse des prix a atteint son paroxysme, il s’agit d’une situation de suivi de tendance, faites plus.

  2. La baisse des prix est une reprise de la tendance, une reprise de la tendance.

  3. Le prix de clôture > le prix d’ouverture > le point central, considéré comme une opportunité de faire plus, de faire plus pour percer le centre.

  4. Le prix de clôture a atteint la barre et le prix de clôture est > moyenne mobile, plus que prévu.

La stratégie de trading à vide est la suivante:

  1. Indicateur de plus-value < 0, baisse des prix, déraillement, suivi de la tendance, couvert.

  2. Indicateur d’abondance > 0, la hausse des prix a atteint son paroxysme, il s’agit d’un renversement de tendance, faites plus.

  3. Le prix d’ouverture > le prix de clôture < le point central, considéré comme une opportunité de dépréciation de la centrale, le point central.

  4. Le cours de clôture a déraillé et le cours de clôture est resté en dessous de la moyenne mobile.

La stratégie de placement est plus simple, avec une rupture du canal de survente par la reprise du prix.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Les indicateurs de la polyvalence permettent d’évaluer avec précision les tendances du marché et constituent un indicateur central de la stratégie.

  2. Les canaux de survente et de surachat, associés à l’indicateur, permettent de détecter des opportunités potentielles de reprise.

  3. Les moyennes mobiles de base peuvent servir de filtres auxiliaires afin d’éviter les fausses ruptures.

  4. Les points centraux sont associés à des indicateurs de polyvalence, formant des points de transaction à haute probabilité.

  5. Il est possible de suivre les tendances et de les inverser, ce qui offre de meilleures opportunités de profit.

  6. Les canaux de survente et de surachat sont clairs et concis, ce qui favorise la maîtrise des risques.

Analyse des risques

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

  1. Les indicateurs de l’hyperspatial peuvent émettre des signaux erronés et doivent être filtrés par d’autres indicateurs.

  2. Les transactions de rupture sont faciles à piéger et nécessitent un stop-loss strict.

  3. Les moyennes mobiles sont mal réglées et risquent de manquer une tendance ou de produire un faux signal.

  4. Les points centraux nécessitent un retour d’examen pour vérifier la fiabilité des probabilités.

  5. Les canaux de survente nécessitent des paramètres optimisés pour s’adapter aux différentes variétés.

  6. Les paramètres de l’indicateur ne correspondent pas, ce qui peut entraîner des transactions fréquentes.

Les mesures suivantes peuvent être prises pour contrer ces risques:

  1. En combinaison avec d’autres indicateurs tels que les lignes K, les signaux d’indicateur de confirmation de la quantité de transaction et les signaux d’indicateur d’espace.

  2. Il est recommandé de suivre strictement la stratégie d’arrêt des pertes de la chaîne de surachat et de survente, et d’arrêter rapidement.

  3. Testez différents paramètres de périodes de moyenne mobile pour trouver le paramètre optimal.

  4. Les probabilités d’une stratégie centralisée sont suffisamment vérifiées.

  5. Optimiser les paramètres du canal pour trouver la meilleure combinaison de paramètres pour chaque variété.

  6. Ajustez les paramètres de l’indicateur pour assurer la stabilité du système.

Direction d’optimisation

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

  1. L’ajout d’algorithmes d’apprentissage automatique permettant d’entraîner les indicateurs de polyvalence à l’aide de données volumineuses permet d’améliorer l’exactitude des indicateurs et de réduire les signaux erronés.

  2. Ajout d’un canal d’adaptation qui ajuste automatiquement les paramètres du canal en fonction de la volatilité du marché.

  3. L’utilisation de l’apprentissage en profondeur pour extraire plus d’indicateurs de changement, pour constituer un ensemble d’indicateurs optimisant les stratégies d’entrée et de sortie.

  4. L’ajout d’un algorithme de stop-loss avancé permettant de suivre les stops de tendance et d’éviter les stops inversés.

  5. Optimisation des paramètres et tests combinés pour améliorer la stabilité de la stratégie globale.

  6. L’ajout d’un module de gestion de fonds pour rendre le contrôle des risques plus scientifique.

Résumer

Cette stratégie permet de juger de la structure du marché à l’aide d’indicateurs polyvalents, de canaux et de signaux de trading générés par des moyennes mobiles. Elle offre une combinaison organique de suivi de la tendance et de renversement de tendance. Elle présente les avantages d’une bonne efficacité des indicateurs, d’une abondance d’opportunités de négociation et d’un arrêt de perte clair.

Code source de la stratégie
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-24 00:00:00
period: 2h
basePeriod: 15m
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/
// © amysojexson

//@version=3
strategy(title="Pivots strategy", overlay=true)

// Input settings
// Create a pull-down menu for the pivot type
pivotType = input(title="Pivot Type",
     options=["Daily", "Intraday", "Weekly"], defval="Daily")

// Make toggles for pivot level options
plotPP   = input(title="Plot PP", type=bool, defval=true)
plotS1R1 = input(title="Plot S1 and R1", type=bool, defval=true)
plotS2R2 = input(title="Plot S2 and R2", type=bool, defval=true)
plotS3R3 = input(title="Plot S3 and R3", type=bool, defval=true)
plotTCBC = input(title="Plot S3 and R3", type=bool, defval=true)
// Configure session options
sessRange = input(title="Trading Session",  defval="0800-1600")
showSess  = input(title="Highlight Session?", type=bool, defval=false)

// Enable or disable pivot labels
showLabels = input(title="Show Labels?", type=bool, defval=false)

// Step 2. Calculate indicator values
// Create a function to fetch daily and weekly data
GetData(res, data) =>
    security(syminfo.tickerid, res, data[1],
         lookahead=barmerge.lookahead_on)

// Fetch daily and weekly price data
dailyHigh  = GetData("D", high)
dailyLow   = GetData("D", low)
dailyClose = GetData("D", close)

weeklyHigh  = GetData("W", high)
weeklyLow   = GetData("W", low)
weeklyClose = GetData("W", close)

// Determine session pivot data
// First see how the price bar relates to
// the session time range
inSession = not na(time(timeframe.period, sessRange)[1])
sessStart = inSession and not inSession[1]
sessEnd   = not inSession and inSession[1]

// Determine session price data
sessHigh  = 0.0
sessLow   = 0.0
sessClose = 0.0

sessHigh := sessStart ? high :
     inSession ? max(high, sessHigh[1]) : na
sessLow := sessStart ? low :
     inSession ? min(low, sessLow[1]) : na
sessClose := sessEnd ? close[1] : na

// Compute high, low, close from previous intra-day session
highPrevSess  = 0.0
lowPrevSess   = 0.0
closePrevSess = 0.0

highPrevSess  := sessEnd ? fixnan(sessHigh) : highPrevSess[1]
lowPrevSess   := sessEnd ? fixnan(sessLow) : lowPrevSess[1]
closePrevSess := sessEnd ? fixnan(sessClose) : closePrevSess[1]

// Now figure out which kind of price data
// to use for the pivot calculation
theHigh = if (pivotType == "Daily")
    dailyHigh
else
    if (pivotType == "Intraday")
        highPrevSess
    else
        weeklyHigh

theLow = if (pivotType == "Daily")
    dailyLow
else
    if (pivotType == "Intraday")
        lowPrevSess
    else
        weeklyLow

theClose = if (pivotType == "Daily")
    dailyClose
else
    if (pivotType == "Intraday")
        closePrevSess
    else
        weeklyClose

// Finally calculate the pivot levels
pp = (theHigh + theLow + theClose) / 3
bc= (theHigh + theLow)/2
tc= (pp-bc)+pp

r1 = pp+(.382*(theHigh-theLow))
s1 = pp-(.382*(theHigh-theLow))
r2 = pp +(.618*(theHigh-theLow))
s2 = pp -(.618*(theHigh-theLow))
r3 = pp +(1*(theHigh-theLow))
s3 = pp -(1*(theHigh-theLow))

// Step 3. Output indicator data
// Plot the various pivot levels
plot(series=plotS3R3 ? r3 : na, title="R3",
     style=circles, linewidth=1, color=#0023FF)
plot(series=plotS2R2 ? r2 : na, title="R2",
     style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS1R1 ? r1 : na, title="R1",
     style=circles, linewidth=1, color=#09E0F3)

plot(series=plotTCBC ? tc : na, title="TC",
     style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotPP ? pp : na, title="PP",
     style=circles, linewidth=1, color=#000000)
plot(series=plotTCBC ? bc : na, title="BC",
     style=circles, linewidth=.75, color=#FF00D1)

plot(series=plotS1R1 ? s1 : na, title="S1",
     style=circles, linewidth=1, color=#09E0F3)
plot(series=plotS2R2 ? s2 : na, title="S2",
     style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS3R3 ? s3 : na, title="S3",
     style=circles, linewidth=1, color=#0023FF)

// Display the pivot names on the chart, if applicable
newPivots = (showLabels == false) ? false :
     (pivotType == "Intraday") ? sessEnd :
     (pivotType == "Daily") ? dayofmonth != dayofmonth[1] :
     dayofweek == monday and dayofmonth != dayofmonth[1]

plotchar(series=newPivots and plotS3R3 ? r3 : na,
     char='', text="R3", offset=1,
     location=location.absolute,
     color=#0023FF, title="R3 label")

plotchar(series=newPivots and plotS2R2 ? r2 : na,
     char='', text="R2", offset=1,
     location=location.absolute,
     color=#1E90FF, title="R2 label")

plotchar(series=newPivots and plotS1R1 ? r1 : na,
     char='', text="R1", offset=1,
     location=location.absolute,
     color=#09E0F3, title="R1 label")

plotchar(series=newPivots and plotTCBC ? r1 : na,
     char='', text="TC", offset=1,
     location=location.absolute,
     color=#FF00D1, title="TC label")
     
plotchar(series=newPivots and plotTCBC ? r1 : na,
     char='', text="BC", offset=1,
     location=location.absolute,
     color=#FF00D1, title="BC label")

plotchar(series=newPivots and plotS1R1 ? s1 : na,
     char='', text="S1", offset=1,
     location=location.absolute,
     color=#09E0F3, title="S1 label")

plotchar(series=newPivots and plotS2R2 ? s2 : na,
     char='', text="S2", offset=1,
     location=location.absolute,
     color=#1E90FF, title="S2 label")

plotchar(series=newPivots and plotS3R3 ? s3 : na,
     char='', text="S3", offset=1,
     location=location.absolute,
     color=#0023FF, title="S3 label")

// Highlight the intra-day price data session on the chart
bgcolor(color=showSess and inSession and (pivotType == "Intraday") ?
     orange : na, transp=95)

// Step 4. Create indicator alerts
alertcondition(condition=cross(close, s3),
     title="Pivot S3 Cross",
     message="Prices crossed Pivot S3 level")

alertcondition(condition=cross(close, s2),
     title="Pivot S2 Cross",
     message="Prices crossed Pivot S2 level")

alertcondition(condition=cross(close, s1),
     title="Pivot S1 Cross",
     message="Prices crossed Pivot S1 level")
     
alertcondition(condition=cross(close, tc),
     title="Pivot TC Cross",
     message="Prices crossed Pivot TC level")

alertcondition(condition=cross(close, pp),
     title="Pivot PP Cross",
     message="Prices crossed the main Pivot Point level")
     
alertcondition(condition=cross(close, bc),
     title="Pivot BC Cross",
     message="Prices crossed Pivot BC level")

alertcondition(condition=cross(close, r1),
     title="Pivot R1 Cross",
     message="Prices crossed Pivot R1 level")

alertcondition(condition=cross(close, r2),
     title="Pivot R2 Cross",
     message="Prices crossed Pivot R2 level")

alertcondition(condition=cross(close, r3),
     title="Pivot R3 Cross",
     message="Prices crossed Pivot R3 level")
    
MA = sma(close, 20)
plot(MA, color=red)

Factor				= input(2, type=float)
Pd					= input(10, minval=1,maxval = 100)
Up					= hl2-(Factor*atr(Pd))
Dn					= hl2+(Factor*atr(Pd))
TrendUp				= 0.0
TrendUp				:= close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown			= 0.0
TrendDown			:= close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend				= 0.0
Trend 				:= close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl 				= Trend==1? TrendUp: TrendDown

plot(Tsl, color=blue)

if close>open
    if open<pp
        if close>pp
            if close>MA
                strategy.entry("long", true) 
if close<open
    if open>pp
        if close<pp
            if close<MA
                strategy.entry("short", false) 
                
strategy.close("long", when = open<Tsl)
strategy.close("short", when = open>Tsl)