Ichimoku Kumo tourne la stratégie pour absorber l'or

Auteur:ChaoZhang est là., Date: 2023-11-28 16:12:09 Je vous en prie.
Les étiquettes:

img

Résumé

L'Ichimoku Kumo Twist Gold-Absorbing Strategy est une stratégie de trading quantitative qui combine l'indicateur technique du marché Ichimoku et le filtrage de gamme.

Principe de stratégie

La stratégie est principalement basée sur l'indicateur Ichimoku et les modèles de chandeliers pour juger des tendances du marché. L'Ichimoku contient la ligne de conversion, la ligne de base et les lignes de nuage, leurs relations de croisement indiquent les tendances du marché. Les lignes de nuage agissent également comme des niveaux de support et de résistance. La stratégie définit différentes combinaisons de paramètres pour ajuster la sensibilité des lignes Ichimoku. En outre, la stratégie identifie des modèles et génère des signaux d'achat lorsque la ligne de conversion traverse au-dessus de la ligne de base, et des signaux de vente lorsqu'elle traverse en dessous.

En outre, la stratégie dispose de filtres d'intervalle de date, de sorte qu'elle ne négocie que dans des intervalles de dates spécifiés. Cela contrôle la fréquence de négociation.

Analyse des avantages

  • Utiliser l'indicateur Ichimoku pour juger des tendances du marché, paramètres réglables en fonction de la sensibilité
  • Signaux de négociation clairs provenant de la reconnaissance des modèles de chandeliers
  • Filtre d'intervalle de date contrôle la fréquence de négociation
  • Réglage du stop loss pour réduire les risques en temps opportun

Analyse des risques

  • Ichimoku qui est en retard peut manquer les tendances en évolution rapide.
  • Le filtre d'intervalle de date peut manquer certaines opportunités de négociation
  • Un paramètre de stop loss incorrect peut accroître les pertes

Des méthodes telles que l'ajustement des paramètres Ichimoku, l'optimisation de la plage de dates, la modification des points de stop loss peuvent améliorer et contrôler les risques.

Directions d'optimisation

  • Testez différentes combinaisons de paramètres pour trouver la configuration optimale Ichimoku
  • Combinez avec d' autres indicateurs pour éviter les problèmes de retard Ichimoku
  • Backtest pour optimiser les paramètres de la plage de dates
  • Définir le stop-loss dynamique conditionnel

Résumé

La stratégie d'absorption d'or Ichimoku Kumo Twist intègre l'indicateur Ichimoku, la reconnaissance des modèles de bougies, le filtrage de gamme pour déterminer les tendances du marché. Il peut saisir les directions de tendance assez clairement. Grâce à des moyens tels que l'ajustement des paramètres, le contrôle des risques, etc., une bonne performance de la stratégie peut être atteinte. Mais le problème de retard Ichimoku doit être noté et des ajustements d'optimisation continus doivent être effectués.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
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 == "Cpt 20 60 120 30"
        20
    else
        if presets == "Cpt 10 30 60 30"
            10
        else
            if presets == "Std 18 52 104 26"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Cpt 20 60 120 30"
        60
    else
        if presets == "Cpt 10 30 60 30"
            30
        else
            if presets == "Std 18 52 104 26"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Cpt 20 60 120 30"
        120
    else
        if presets == "Cpt 10 30 60 30"
            60
        else
            if presets == "Std 18 52 104 26"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Cpt 20 60 120 30"
        30
    else
        if presets == "Cpt 10 30 60 30"
            30
        else
            if presets == "Std 18 52 104 26"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets", options=["Cpt 20 60 120 30", "Cpt 10 30 60 30", "Std 18 52 104 26", "Std 9 26 52 26"], defval="Cpt 20 60 120 30")
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)

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)

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

strategy.entry("Buy", strategy.long, when=(golong and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
strategy.entry("Sell", strategy.short, when=(goshort and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))

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