Je vous en supplie, vous avez raison.

Auteur:ChaoZhang est là., Date: le 27 octobre 2023 à 16 h 36 min 59 s
Les étiquettes:

img

Résumé

La stratégie Ichimoku Kumo Twist utilise la ligne de conversion, la ligne de base et les lignes de portée principales de l'indicateur Ichimoku pour construire des signaux de trading en tant que stratégie de suivi de tendance.

La logique de la stratégie

La stratégie utilise principalement trois lignes Ichimoku la ligne de conversion, la ligne de base et la portée principale 1, ainsi que les prix hauts et bas des chandeliers pour calculer les limites supérieures et inférieures des nuages. La ligne de conversion calcule le point médian du haut et du bas sur les 9 dernières bougies, représentant la moyenne à court terme. La ligne de base calcule le point médian du haut et du bas sur les 26 dernières bougies comme la moyenne à long terme.

Les signaux d'achat sont générés lorsque le lead span 1 traverse le lead span 2, tandis que les signaux de vente sont générés lorsque le lead span 1 traverse le lead span 2. La stratégie de trading suit simplement les croisements haussier et baissier des moyens à court et moyen terme pour capturer les changements de tendance.

Analyse des avantages

  • La stratégie Ichimoku cloud twist combine les tendances à court et à moyen terme, ce qui permet d'identifier efficacement les points d'inversion de tendance.

  • Les stratégies basées sur la réversion moyenne ont un certain retard intégré pour filtrer le bruit.

  • L'utilisation des nuages pour mesurer la force de la tendance permet d'améliorer les entrées et les sorties.

  • Aucune optimisation de paramètres n'est nécessaire - les paramètres standard Ichimoku fonctionnent bien.

Analyse des risques

  • Ichimoku a des internes assez complexes et n'est pas très sensible aux ajustements de paramètres rendant l'optimisation excessive difficile.

  • Il peut y avoir de multiples faux signaux sur les marchés à fourchette.

  • La divergence entre les tendances à court et à moyen terme peut entraîner des pannes de stratégie.

  • Les arrêts de pertes sont essentiels pour contrôler le risque, sinon de gros retrait sont possibles.

Des possibilités d'amélioration

  • Testez différentes combinaisons de périodes de conversion et de référence pour trouver l'équilibre optimal.

  • Ajouter des filtres avec d'autres indicateurs pour éviter de recevoir des signaux dans des formations défavorables.

  • Incorporer des stratégies de stop-loss comme les stops dynamiques ou de trailing.

  • Optimiser la taille des positions en fonction des conditions du marché.

  • Ajoutez des commissions de trading dans les backtests pour des résultats plus réalistes.

Résumé

Dans l'ensemble, la stratégie Ichimoku cloud twist est une stratégie de suivi de tendance modérée. Elle peut identifier efficacement les virages de tendance et prendre des positions en alignement avec la direction de la tendance. Mais une surveillance est requise et des contrôles de risque stricts sont nécessaires pour une utilisation à long terme. Des améliorations continues dans le réglage des paramètres, les filtres d'entrée, la mécanique de stop-loss, etc. peuvent encore améliorer la stabilité et la rentabilité de cette stratégie.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Crypto Doubled"
        20
    else
        if presets == "Crypto Singled"
            10
        else
            if presets == "Standard Doubled"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Crypto Doubled"
        60
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Crypto Doubled"
        120
    else
        if presets == "Crypto Singled"
            60
        else
            if presets == "Standard Doubled"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Crypto Doubled"
        30
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets",  options=["Crypto Doubled", "Crypto Singled", "Standard Doubled", "Standard Singled"], defval="Crypto Doubled")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=golong, stop=(stoploss ? high+syminfo.mintick : na))
strategy.entry("Sell", strategy.short, when=goshort, stop=(stoploss ? low-syminfo.mintick : na))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


Plus de