Die Ressourcen sind geladen. Beförderung...

Ichimoku Yin Yang Candlestick Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 21.12.2023
Tags:

img

Übersicht

Diese Strategie basiert auf einem sehr bekannten Indikator in der technischen Analyse - dem Ichimoku Kinko Hyo, der die Wolkenformen und die Beziehung zwischen Preis und Wolke verwendet, um die Trendrichtung zu bestimmen und Handelsmöglichkeiten zu entdecken.

Strategieprinzip

Die Strategie verwendet mehrere Komponenten des Ichimoku Kinko Hyo-Indikators, darunter den Tenkan-Sen (Konversionslinie), Kijun-Sen (Basislinie), Senkou Span A (Leading Span A), Senkou Span B (Leading Span B) und Chikou Span (Lagging Span). Diese Linien konvergieren, um die sogenannte Ichimoku-Wolke zu bilden.

Insbesondere beurteilt die Strategie, ob der Preis durch die Cloud-Schicht durchbricht, hauptsächlich anhand der Linien Senkou Span A und Senkou Span B. Der Bereich zwischen diesen beiden Linien bildet die Cloud-Schicht. Wenn der Schlusskurs durch den oberen Rand der Cloud-Schicht durchbricht, wird ein Kaufsignal generiert; wenn der Schlusskurs durch den unteren Rand der Cloud-Schicht durchbricht, wird ein Verkaufssignal generiert.

Darüber hinaus legt die Strategie auch Stop-Loss- und Take-Profit-Preise fest. Sie verwendet syminfo.pointvalue und Positionsinformationen der Strategie, um Gewinn- und Verlustpunkte zu berechnen und sie dann in spezifische Preise umzuwandeln.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Verwendung des Ichimoku-Indikators zur Bestimmung der Trendrichtung kann Marktlärm effektiv filtern und mittelfristige Trends identifizieren
  2. Das Durchbrechen der Wolkeschicht bildet Signale, die Verluste durch falsche Ausbrüche vermeiden können
  3. Die Einbeziehung von Stop-Loss- und Take-Profit-Einstellungen kann einen einzigen Verlust begrenzen und die Gewinne sperren.
  4. Anpassbare Parameter ermöglichen die Prüfung der Auswirkungen verschiedener Parameter auf die Strategieleistung
  5. Visualisierte Cloud-Schicht und andere Ichimoku-Komponenten bilden intuitive grafische Handelssignale

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Mittelfristige bis langfristige Positionen können zu größeren variablen Verlusten führen
  2. Ausbruchsignale können sich verzögern und den besten Einstiegspunkt verpassen.
  3. Falsche Ausbrüche können zu falschen Signalen und Verlusten führen
  4. Zu lange Haltedauer führen zu höheren Kosten
  5. Die festgelegten Stop-Loss- und Take-Profit-Preise können durchbrochen werden

Gegenmaßnahmen:

  1. Um das Risiko eines einmaligen variablen Verlusts zu verringern, sollte der Haltungszeitraum angemessen verkürzt werden.
  2. Einbeziehung anderer Indikatoren zur Bestimmung der Wirksamkeit von Ausbruchssignalen
  3. Verbesserung der Wirksamkeit von Stop-Loss und Gewinngewinn, um nicht in falschen Positionen gefangen zu werden
  4. Optimierung der Aufbewahrungszeit zur Reduzierung der Kosten

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Verschiedene Parameterkombinationen testen, um die optimalen Parameter zu finden
  2. Einbeziehung anderer Indikatoren zur Signalfilterung zur Vermeidung falscher Ausbrüche
  3. Dynamisch anpassen Stop-Loss und nehmen Sie Gewinnniveaus, Spuren Stop-Loss
  4. Anpassung der Ausstiegskriterien: Umkehrsignal-Break-Cloud-Schicht, Auslöser für die Preisrückführung
  5. Hinzufügen von Positionsmanagementmechanismen

Schlussfolgerung

Im Allgemeinen ist die Ichimoku Yin Yang Candlestick Breakout Strategie eine typische Strategie, die den Ichimoku Kinko Hyo Indikator verwendet, um die mittelfristige Trendrichtung für Breakouts zu bestimmen. Sie hat Vorteile wie verstellbare Parameter, intuitive Formen und visualisierbare Signale. Sie birgt auch einige Risiken wie falsche Breakouts und Halterrisiken. Durch Parameteroptimierung, Signalfilterung, Stop-Loss/Take-Profit-Einstellung usw. können Risiken reduziert und die Stabilität der Strategie verbessert werden.


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

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © moneyofthegame
// Basado en estrategias con el indicador ICHIMOKU KINKO HIYO
// El tiempo es oro colega :)

//@version=5
strategy('Ichimoku Cloud Estrategia Ruptura Nubes SWING TRADER  (By Insert Cheese)', shorttitle='Ichimoku Cloud Estrategia Ruptura Nubes SWING TRADER  (By Insert Cheese)',

         overlay=true,
         initial_capital=500,
         process_orders_on_close=true,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=100,
         commission_type=strategy.commission.percent,
         commission_value=0.05,
         currency=currency.NONE)
         




// Inputs: Ichimoku parametros
ts_bars =   input.int(9,  minval=1, title='Tenkan-Sen ',          group='Parámetros Ichimoku')
ks_bars =   input.int(26, minval=1, title='Kijun-Sen ',           group='Parámetros Ichimoku')
ssb_bars =  input.int(52, minval=1, title='Senkou-Span B ',       group='Parámetros Ichimoku')
cs_offset = input.int(26, minval=1, title='Chikou-Span',          group='Parámetros Ichimoku')
ss_offset = input.int(26, minval=1, title='Senkou-Span A',        group='Parámetros Ichimoku')

middle(len) => // LONGITITUD Ichimoku (SenkouB)
    math.avg(ta.lowest(len), ta.highest(len))

// Ichimoku Componentes
tenkan = middle (ts_bars)
kijun   = middle (ks_bars)
senkouA = math.avg(tenkan, kijun)
senkouB = middle (ssb_bars)


// Plot Ichimoku Kinko Hyo
plot(tenkan,                                     color=color.rgb(171, 128, 0),                              title="Tenkan-Sen",    display = display.none)
plot(kijun,                                      color=color.rgb(39, 0, 112),                               title="Kijun-Sen",     display = display.none)
plot(close, offset=-cs_offset+1,                 color=color.rgb(224, 200, 251),                            title="Chikou-Span",   display = display.none)
sa=plot(senkouA, offset=ss_offset-1,             color=color.rgb(68, 128, 0),                               title="Senkou-Span A", display = display.none)
sb=plot(senkouB, offset=ss_offset-1,             color=color.rgb(131, 0, 120),                              title="Senkou-Span B", display = display.none)
fill(sa, sb, color = senkouA > senkouB ?         color.rgb(0, 211, 11, 82) : color.rgb(75, 0, 126, 82),   title="Cloud color")

// Calculating 
ss_high = math.max(senkouA[ss_offset - 1], senkouB[ss_offset - 1])  //parte alta de la nube
ss_low = math.min(senkouA[ss_offset - 1], senkouB[ss_offset - 1])   //parte baja de la nube
ss_medium = ss_low + (ss_high - ss_low) / 2                         //parte intermedia


// Input para seleccionar largos o cortos
long_entry_enable =  input.bool(true, title='Entradas Largo',   group='Backtest Operativa', inline='SP20')
short_entry_enable = input.bool(true, title='Entradas Corto',   group='Backtest Operativa', inline='SP20')

// Input backtest rango de fechas 
fromMonth =  input.int  (defval=1,     title='Desde Mes',  minval=1,     maxval=12,      group='Backtest rango de fechas')
fromYear  =  input.int  (defval=2000,  title='Desde Año',  minval=1970,                  group='Backtest rango de fechas')
fromDay   =  input.int  (defval=1,     title='Desde Día',  minval=1,     maxval=31,      group='Backtest rango de fechas')
thruDay   =  input.int  (defval=1,     title='Hasta Día',  minval=1,     maxval=31,      group='Backtest rango de fechas')
thruMonth =  input.int  (defval=1,     title='Hasta Mes',  minval=1,     maxval=12,      group='Backtest rango de fechas')
thruYear  =  input.int  (defval=2099,  title='Hasta Año',  minval=1970,                  group='Backtest rango de fechas')

inDataRange = time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0) and time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0)


//Estrategia

// Señales de entrada y salida

price_above_kumo = close  > ss_high // precio cierra arriba de la nube
price_below_kumo = close  < ss_low // precio cierra abajo de la nube
price_cross_above_kumo = ta.crossover  (close  , ss_high )   //precio cruza la nube parte alta
price_cross_below_kumo = ta.crossunder (close  , ss_low )     // precio cruza la nube parte baja

bullish = (price_above_kumo and price_cross_above_kumo)
bearish = (price_below_kumo and price_cross_below_kumo)

comprado = strategy.position_size > 0
vendido = strategy.position_size  < 0

sl_long =  price_above_kumo
sl_short = price_below_kumo


if ( not comprado and bullish and inDataRange and long_entry_enable)
//realizar compra
    strategy.entry("Buy", strategy.long)

//realizar salida long
if (comprado and bearish and inDataRange and long_entry_enable)
    strategy.close ("Buy", comment = "cerrado")

if ( not vendido and bearish and inDataRange and short_entry_enable)
//realizar venta
    strategy.entry("Sell", strategy.short)
    
//realizar salida long
if (vendido  and bullish and inDataRange and short_entry_enable)
    strategy.close ("Buy", comment = "cerrado")

// Función Calcular TP y SL

// Inputs para SL y TP


tpenable = input.bool(true, title =  "SL y TP metodo")



moneyToSLPoints(money)  =>
    strategy.position_size !=0 and tpenable ?  (money / syminfo.pointvalue / math.abs (strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input.float(  100.0, minval=0.1, step=10.0, title = "Take Profit $$"))
l = moneyToSLPoints(input.float(  100.0, minval=0.1, step=10.0, title = "Stop Loss $$"))
strategy.exit("Close", profit = p, loss = l)



// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * math.sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p),color = color.rgb(76, 175, 79, 96), style = plot.style_linebr )
lp = plot(pointsToPrice(-l),color = color.rgb(76, 175, 79, 96), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, color = color.rgb(76, 175, 79, 96), style = plot.style_linebr )
fill(pp, avg, color = color.rgb(76, 175, 79, 96))
fill(avg, lp, color = color.rgb(255, 82, 82, 97))

Mehr