Stratégie de tendance Super Ichimoku


Date de création: 2023-11-06 16:32:11 Dernière modification: 2023-11-06 16:32:11
Copier: 0 Nombre de clics: 1427
1
Suivre
1617
Abonnés

Stratégie de tendance Super Ichimoku

Aperçu

La stratégie de couverture est une stratégie de négociation de tendances basée sur des indicateurs de couverture pour prendre des décisions de négociation. La stratégie utilise la ligne de conversion, la ligne de référence et la relation de la bande de nuage de l’indicateur de couverture pour juger de la direction de la tendance actuelle et combiner la rétroaction du prix pour entrer.

La stratégie de super 1 est principalement utilisée pour les transactions de tendances sur les lignes moyennes et longues, et peut être rentable dans les grandes tendances. La stratégie possède également une forte capacité de reconnaissance des tendances.

Principe de stratégie

Les facteurs qui déterminent la direction de la transaction sont principalement les suivants:

  1. La relation entre la ligne de conversion et la ligne de référence:La ligne de conversion est positive en hausse et négative en baisse.

  2. La couleur des nuages:Quand les nuages sont verts, vous pouvez voir des aiguilles, quand ils sont rouges, vous pouvez voir des baisses.

  3. Les prix ont été revus:L’entrée nécessite une reprise des prix au-delà de la ligne de conversion et de la ligne de référence

Les signaux de négociation de la stratégie sont les suivants:

Il y a un autre problème.

  • La ligne de conversion est supérieure à la ligne de référence
  • Les prix sont supérieurs à la ligne de conversion et à la ligne de référence
  • Ligne de conversion et ligne de référence au-dessus de la bande nuageuse
  • Retour des prix en dessous de la ligne de conversion et de la ligne de référence

Je ne suis pas d’accord avec toi.

  • Ligne de conversion inférieure à la ligne de référence
  • Prix inférieurs à la ligne de conversion et à la ligne de référence
  • Ligne de conversion et ligne de référence en dessous de la bande nuageuse
  • Les prix se retournent au-dessus des lignes de conversion et de référence

Lorsqu’un signal de plus ou de moins est satisfait en même temps, l’opération d’ouverture est effectuée en fonction de la situation de la position.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Une meilleure précision pour déterminer la direction des tendances en utilisant une combinaison de plus d’un indicateur

  2. Les lignes de conversion et les lignes de référence permettent de déterminer clairement les tendances à court et moyen terme, les bandes nuageuses permettent de déterminer les tendances à long terme

  3. Les conditions exigent que le prix revienne sur la ligne de rotation pour éviter les pertes causées par les fausses percées.

  4. Le contrôle des risques utilise le plus bas prix le plus élevé de la période la plus récente pour régler le stop loss et contrôler efficacement les pertes individuelles

  5. Des profits plus que raisonnables, des gains plus stables

  6. Appliqué à différents cycles, adapté au trading de tendances à courte ou moyenne durée

  7. L’idée stratégique est claire et facile à comprendre, les paramètres sont optimisés.

  8. Il peut fonctionner dans plusieurs environnements de marché.

Analyse des risques

La stratégie de l’excès d’unité présente également les risques suivants:

  1. En cas de choc, les arrêts de perte peuvent être déclenchés fréquemment, ce qui affecte les résultats.

  2. L’incapacité à inverser une position en temps opportun peut entraîner des pertes lorsque les tendances changent rapidement

  3. Le rapport de profit/perte n’est pas adapté à toutes les variétés et nécessite des paramètres d’ajustement pour différents échantillons

  4. Les bénéfices peuvent être limités lorsque l’espace d’ascension est limité après la rupture de la bande nuageuse.

  5. Les paramètres de l’indicateur nécessitent des tests répétés et une optimisation, ce qui ne convient pas aux variétés dont les paramètres sont souvent ajustés

Le risque peut être réduit par:

  1. Optimisation des paramètres pour les rendre plus adaptés aux différents cycles et variétés

  2. En combinaison avec d’autres indicateurs, filtrer les signaux d’entrée de jeu pour éviter les fausses percées dans les marchés en crise

  3. Ajustez dynamiquement la position de votre arrêt pour réduire la probabilité qu’il soit déclenché

  4. Tester différents réglages de la rentabilité

  5. Déterminer la force des signaux de tendance en utilisant des méthodes telles que la forme du graphique

Direction d’optimisation

Les stratégies d’optimisation de l’excès peuvent être optimisées dans les domaines suivants:

  1. Optimisation des paramètres de la ligne de conversion et de la ligne de référence pour les rendre plus conformes aux caractéristiques des variétés négociées

  2. Optimisation des paramètres de la ceinture de nuages pour une meilleure compréhension des tendances à long terme

  3. Optimisation des algorithmes de stop loss, tels que le stop loss réglé selon l’ATR ou le stop loss dynamique

  4. Filtrage du signal en combinaison avec d’autres indicateurs, configuration d’autres conditions de filtrage, réduction de la probabilité de fausse entrée

  5. Optimiser les paramètres de la balance des gains et des pertes, adapter la stratégie aux différentes variétés et caractéristiques du cycle

  6. Gestion de positions selon le modèle Martinegger, adaptée à la fréquence des fluctuations de marché

  7. Optimisation des paramètres par apprentissage automatique pour une plus grande stabilité

  8. Configuration de différentes périodes de négociation, adaptée aux caractéristiques du marché pour les heures de nuit et les heures intermédiaires

Résumer

L’ensemble de la stratégie Super 1 est une stratégie très appropriée pour la négociation de tendances à moyen et long terme. Les avantages de l’utilisation de l’indicateur Super 1 pour déterminer la direction de la tendance sont évidents, tandis que l’entrée combinée à la rétroaction des prix permet d’éviter efficacement les entrées erronées.

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

// Strategy based on the the SuperIchi indicator.
//
// Strategy was designed for the purpose of back testing. 
// See strategy documentation for info on trade entry logic.
// 
// Credits:
//  - SuperIchi [LUX]: LuxAlgo (https://www.tradingview.com/script/vDGd9X9y-SuperIchi-LUX/)

//@version=5
strategy("SuperIchi Strategy", overlay=true, initial_capital=1000, currency=currency.NONE, max_labels_count=500, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.01)

// =============================================================================
// STRATEGY INPUT SETTINGS
// =============================================================================

// ---------------
// Risk Management
// ---------------
swingLength = input.int(15, "Swing High/Low Lookback Length", group='Strategy: Risk Management', tooltip='Stop Loss is calculated by the swing high or low over the previous X candles')
accountRiskPercent = input.float(2, "Account percent loss per trade", step=0.1, group='Strategy: Risk Management', tooltip='Each trade will risk X% of the account balance')
profitFactor = input.float(2, "Profit Factor (R:R Ratio)", step = 0.1, group='Strategy: Risk Management')
useAtrOverride = input.bool(true, "Use Swing High/Low ATR Override", group='Strategy: Risk Management', tooltip='In some cases price may not have a large enough (if any) swing withing previous X candles. Turn this on to use an ATR value when swing high/low is lower than the given ATR value')
atrMultiplier = input.int(1, "Swing High/Low ATR Override Multiplier", group='Strategy: Risk Management')
atrLength = input.int(14, "Swing High/Low ATR Override Length", group='Strategy: Risk Management')

// -----------------
// Strategy Settings
// -----------------
pullbackLength = input.int(5, "Pullback Lookback Length", group='Strategy: Settings', tooltip='Number of candles to consider for a pullback into the moving averages (prerequisite for trade entry)')

// ----------
// Date Range
// ----------
start_year = input.int(title='Start Date', defval=2022, minval=2010, maxval=3000, group='Strategy: Date Range', inline='1')
start_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
start_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
end_year = input.int(title='End Date', defval=2023, minval=1800, maxval=3000, group='Strategy: Date Range', inline='2')
end_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
end_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0)

// =============================================================================
// INDICATORS
// =============================================================================

// ---------------
// SuperIchi [LUX]
// ---------------
tenkan_len  = input(9,'Tenkan          ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
tenkan_mult = input(2.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')

kijun_len   = input(26,'Kijun             ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
kijun_mult  = input(4.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')

spanB_len   = input(52,'Senkou Span B ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
spanB_mult  = input(6.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')

offset      = input(26,'Displacement', inline='SuperIchi', group='Indicator: SuperIchi Settings')
//------------------------------------------------------------------------------
avg(src,length,mult)=>
    atr = ta.atr(length)*mult
    up = hl2 + atr
    dn = hl2 - atr
    upper = 0.,lower = 0.
    upper := src[1] < upper[1] ? math.min(up,upper[1]) : up
    lower := src[1] > lower[1] ? math.max(dn,lower[1]) : dn
    
    os = 0,max = 0.,min = 0.
    os := src > upper ? 1 : src < lower ? 0 : os[1]
    spt = os == 1 ? lower : upper
    max := ta.cross(src,spt) ? math.max(src,max[1]) : os == 1 ? math.max(src,max[1]) : spt
    min := ta.cross(src,spt) ? math.min(src,min[1]) : os == 0 ? math.min(src,min[1]) : spt
    math.avg(max,min)
//------------------------------------------------------------------------------
tenkan = avg(close,tenkan_len,tenkan_mult)
kijun = avg(close,kijun_len,kijun_mult)

senkouA = math.avg(kijun,tenkan)
senkouB = avg(close,spanB_len,spanB_mult)
//------------------------------------------------------------------------------
tenkan_css = #2157f3 //blue
kijun_css = #ff5d00 //red

cloud_a = color.new(color.teal,80)
cloud_b = color.new(color.red,80)

chikou_css = #7b1fa2

plot(tenkan,'Tenkan-Sen',tenkan_css)
plot(kijun,'Kijun-Sen',kijun_css)

plot(ta.crossover(tenkan,kijun) ? kijun : na,'Crossover',#2157f3,3,plot.style_circles)
plot(ta.crossunder(tenkan,kijun) ? kijun : na,'Crossunder',#ff5d00,3,plot.style_circles)

A = plot(senkouA,'Senkou Span A',na,offset=offset-1)
B = plot(senkouB,'Senkou Span B',na,offset=offset-1)
fill(A,B,senkouA > senkouB ? cloud_a : cloud_b)

plot(close,'Chikou',chikou_css,offset=-offset+1,display=display.none)


// =============================================================================
// STRATEGY LOGIC
// =============================================================================
plotchar(kijun, "kijun", "", location = location.top)
plotchar(senkouA[offset-1], "senkouA", "", location = location.top)


plotchar(tenkan > kijun, "line above", "", location = location.top)
plotchar(close > tenkan, "price above", "", location = location.top)
plotchar(kijun > senkouA[offset-1], "above cloud", "", location = location.top)
// blue line above red line + price above both lines + both lines above cloud
longSen = tenkan > kijun and close > tenkan and kijun > senkouA[offset-1]
// red line below blue line + price below both lines + both lines below cloud
shortSen = tenkan < kijun and close < tenkan and kijun < senkouA[offset-1]

plotchar(longSen, "longSen", "", location = location.top)
plotchar(shortSen, "shortSen", "", location = location.top)

// Cloud is green
longSenkou = senkouA[offset-1] > senkouB[offset-1]
// Cloud is red
shortSenkou = senkouA[offset-1] < senkouB[offset-1]

// price must have pulled back below sen lines before entry
barsSinceLongPullback = ta.barssince(close < kijun and close < tenkan)
longPullback = barsSinceLongPullback <= pullbackLength
// price must have pulled back above sen lines before entry
barsSinceShortPullback = ta.barssince(close > kijun and close > tenkan)
shortPullback = barsSinceShortPullback <= pullbackLength

// plotchar(lowestClose, "lowestClose", "", location = location.top)
// plotchar(highestClose, "highestClose", "", location = location.top)

inLong = strategy.position_size > 0
inShort = strategy.position_size < 0

longCondition = longSen and longSenkou and longPullback and in_date_range
shortCondition = shortSen and shortSenkou and shortPullback and in_date_range

swingLow = ta.lowest(source=low, length=swingLength)
swingHigh = ta.highest(source=high, length=swingLength)

atr = useAtrOverride ? ta.atr(atrLength) * atrMultiplier : 0
longSl = math.min(close - atr, swingLow)
shortSl = math.max(close + atr, swingHigh)

longStopPercent = math.abs((1 - (longSl / close)) * 100)
shortStopPercent = math.abs((1 - (shortSl / close)) * 100)

longTpPercent = longStopPercent * profitFactor
shortTpPercent = shortStopPercent * profitFactor
longTp = close + (close * (longTpPercent / 100))
shortTp = close - (close * (shortTpPercent / 100))

// Position sizing (default risk 2% per trade)
riskAmt = strategy.equity * accountRiskPercent / 100
longQty = math.abs(riskAmt / longStopPercent * 100) / close
shortQty = math.abs(riskAmt / shortStopPercent * 100) / close

if (longCondition and not inLong)
    strategy.entry("Long", strategy.long, qty=longQty)
    strategy.exit("Long  SL/TP", from_entry="Long", stop=longSl, limit=longTp, alert_message='Long SL Hit')
    buyLabel = label.new(x=bar_index, y=high[1], color=color.green, style=label.style_label_up)
    label.set_y(id=buyLabel, y=low)
    label.set_tooltip(id=buyLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(longQty) + "\nSwing low: " + str.tostring(swingLow) + "\nStop Percent: " + str.tostring(longStopPercent) + "\nTP Percent: " + str.tostring(longTpPercent))

if (shortCondition and not inShort)
    strategy.entry("Short", strategy.short, qty=shortQty)
    strategy.exit("Short  SL/TP", from_entry="Short", stop=shortSl, limit=shortTp, alert_message='Short SL Hit')
    sellLabel = label.new(x=bar_index, y=high[1], color=color.red, style=label.style_label_up)
    label.set_y(id=sellLabel, y=low)
    label.set_tooltip(id=sellLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(shortQty) + "\nSwing high: " + str.tostring(swingHigh) + "\nStop Percent: " + str.tostring(shortStopPercent) + "\nTP Percent: " + str.tostring(shortTpPercent))