Ichimoku Kinko Hyo: Strategie zur Trendfolge mit gleitendem Durchschnitt


Erstellungsdatum: 2023-11-24 17:32:47 zuletzt geändert: 2023-11-24 17:32:47
Kopie: 0 Klicks: 797
1
konzentrieren Sie sich auf
1617
Anhänger

Ichimoku Kinko Hyo: Strategie zur Trendfolge mit gleitendem Durchschnitt

Überblick

Es ist eine Trendverfolgungsstrategie, die auf einem gleichgewichteten gleitenden Durchschnitt basiert. Es kombiniert die Gleichgewichtslinie, den gleichgewichteten gleitenden Durchschnitt der Kawasaki-Fusion und die genaue Ein- und Ausstiegsmechanik, um die Gewinnrate zu erhöhen.

Strategieprinzip

Die Strategie erstellt einen ausgeglichenen gleitenden Durchschnitt, der hauptsächlich aus der Berechnung des Schlusskurses des letzten Handelstages und von Benutzern definierten Eingabeparametern besteht. Wenn der Preis steigt, überschreitet er den Durchschnitt; wenn der Preis fällt, überschreitet er den Durchschnitt.

Gleichzeitig wurde ein Cloud-Bestätigungsmechanismus hinzugefügt, der die Farbe des gleichgewichteten gleitenden Durchschnitts auf den ersten Blick bestimmt. Nur wenn die Farbe des gleichgewichteten gleitenden Durchschnitts grün ist, wird mehr getan, und wenn die Farbe rot ist, wird leer gemacht. Dies kann einige ungenaue Signale filtern und die Gewinnwahrscheinlichkeit der Strategie verbessern.

Analyse der Stärken

Der größte Vorteil dieser Strategie liegt in der Kombination der Vorteile der beiden Indikatoren, der Durchschnittslinie und des gleichgewichteten gleitenden Durchschnitts, die sowohl die Gesamtentwicklung der Kursmittel als auch die quantitative Veränderung des Schlusskurses am letzten Handelstag berücksichtigen. Darüber hinaus verhindert die Cloud-Bestätigungsmechanik falsche Handelssignale und erhöht somit die Strategie.

In Bezug auf die Optimierung von Parametern ermöglicht die Stop-Loss-Stopp-Einstellung auch die Risikomanagement der Strategie. Schließlich bietet der Balanced Moving Average als neuer technischer Indikator, mit dem viele nicht vertraut sind, einen Vorteil für die Anwendung der Strategie.

Risikoanalyse

Das größte Risiko dieser Strategie liegt in der Instabilität des gleichgewichteten Moving Averages selbst. Seine langfristige Wirksamkeit als neuer Indikator und der Raum für Parameteroptimierung sind fraglich. Wenn die Modellhypothese fehlschlägt, werden zahlreiche falsche Signale erzeugt.

Darüber hinaus besteht bei jeder Strategie, die einen Trend verfolgt, die Gefahr einer Trendwende. Wenn der Preis die Durchschnittslinie überschreitet, aber schnell umschaltet, kann die Strategie einen großen Verlust erleiden.

Optimierungsrichtung

Die Strategie kann weiter optimiert werden, indem:

  1. Optimierung der Längenparameter des gleichgewichteten gleitenden Durchschnitts, um die optimale Balance zu finden.

  2. Verschiedene Stop-Loss-Parameter-Einstellungen werden getestet, um die optimale Kombination von Parametern zu ermitteln. Eine zu große Stop-Loss-Grenze begrenzt die Gewinnobergrenze, eine zu kleine Stop-Loss-Grenze ist zu riskant.

  3. Hinzufügen von anderen technischen Indikatoren, wie MACD, KD, etc., um eine Mehrindikator-Konsens zu bilden und Fehlsignale weiter zu vermeiden.

  4. Rückprüfungen für verschiedene Sorten und Perioden zur Ermittlung des optimalen Einsatzszenarios.

  5. Erwägen Sie die Einbeziehung von Machine-Learning-Modellen, um die dynamische Optimierung der Parameter und die adaptiven Anpassungen der Strategien zu realisieren.

Zusammenfassen

Die Strategie integriert die Vorteile der Mittellinie und des gleichgewichteten gleitenden Durchschnitts, setzt einen vernünftigen Stop-Loss-Stop und fügt eine Cloud-Bestätigungsmechanik hinzu, um Trends effektiv zu verfolgen und Risiken zu kontrollieren. Die Strategie kann in verschiedenen Sorten wie Aktienindizes, Devisen, Waren und Kryptowährungen angewendet werden und ist eine empfehlenswerte quantitative Strategie.

Strategiequellcode
/*backtest
start: 2022-11-17 00:00:00
end: 2023-11-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

strategy("Ichimoku Backtester with TP and SL", overlay=true, 
     currency = currency.USD, default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 95)
//@version=4

//Inputs
ts_bars = input(9, minval=1, title="Tenkan-Sen Bars")
ks_bars = input(26, minval=1, title="Kijun-Sen Bars")
ssb_bars = input(52, minval=1, title="Senkou-Span B Bars")
cs_offset = input(26, minval=1, title="Chikou-Span Offset")
ss_offset = input(26, minval=1, title="Senkou-Span Offset")
long_entry = input(true, title="Long Entry")
short_entry = input(true, title="Short Entry")

wait_for_cloud = input(true, title="Wait for Cloud Confirmation")

use_short_stop_loss = input(true, title="Use Short Stop Loss")
short_stop_loss = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, 
     defval=5) * 0.01
use_long_stop_loss = input(true, title="Use Long Stop Loss")
long_stop_loss = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, 
     defval=5) * 0.01
     
use_short_take_profit = input(true, title="Use Short Take Profit")
short_take_profit = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1,
     defval = 20) * .01
use_long_take_profit = input(true, title="Use Long Take Profit")
long_take_profit = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1,
     defval = 20) * .01

// === INPUT SHOW PLOT ===
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)



// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

middle(len) => avg(lowest(len), highest(len))

// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = avg(tenkan, kijun)
senkouB = middle(ssb_bars)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)  // plot within time window

// Plot Ichimoku Kinko Hyo
plot(tenkan, color=#0496ff, title="Tenkan-Sen")
plot(kijun, color=#991515, title="Kijun-Sen")
plot(close, offset=-cs_offset+1, color=#459915, title="Chikou-Span")
sa=plot(senkouA, offset=ss_offset-1, color=color.green, title="Senkou-Span A")
sb=plot(senkouB, offset=ss_offset-1, color=color.red, title="Senkou-Span B")
fill(sa, sb, color = senkouA > senkouB ? color.green : color.red, title="Cloud color")

ss_high = max(senkouA[ss_offset-1], senkouB[ss_offset-1])
ss_low = min(senkouA[ss_offset-1], senkouB[ss_offset-1])

// Entry/Exit Signals
tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = mom(close, cs_offset-1) > 0
cs_cross_bear = mom(close, cs_offset-1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low
senkou_green = senkouA > senkouB ? true : false

bullish = tk_cross_bull and cs_cross_bull and price_above_kumo
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo

if (wait_for_cloud)
    bullish := bullish and senkou_green
    bearish := bearish and not senkou_green

longStopPrice  = strategy.position_avg_price * (1 - long_stop_loss)
shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss)
longLimitPrice = strategy.position_avg_price * (1 + long_take_profit)
shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit)

in_long = false
in_long := in_long[1]


open_long = bullish and not in_long
open_short = bearish and in_long


if (open_long)
    in_long := true
if (open_short)
    in_long := false

strategy.entry("Long", strategy.long, when=open_long and long_entry and  (showDate ? window() : true))
strategy.entry("Short", strategy.short ,when=open_short and short_entry and (showDate ? window() : true))

if (strategy.position_size > 0.0)
    if (use_long_stop_loss and not use_long_take_profit)
        strategy.exit("Long", stop = longStopPrice)
    if (use_long_take_profit and not use_long_stop_loss)
        strategy.exit("Long", limit = longLimitPrice)
    if (use_long_take_profit and use_long_stop_loss)
        strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice)
if (strategy.position_size < 0.0)
    if (use_short_stop_loss and not use_short_take_profit)
        strategy.exit("Short", stop = shortStopPrice)
    if (use_short_take_profit and not use_short_stop_loss)
        strategy.exit("Short", limit = shortLimitPrice)
    if (use_short_take_profit and use_short_stop_loss)
        strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice)

strategy.close("Long", when=bearish and not short_entry and (showDate ? window() : true))
strategy.close("Short", when=bullish and not long_entry and (showDate ? window() : true))