Ichimoku Yin Yang Candlestick Breakout Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-21 10:44:37
Tag:

img

Ringkasan

Strategi ini berdasarkan kepada penunjuk yang sangat terkenal dalam analisis teknikal - Ichimoku Kinko Hyo, menggunakan bentuk awan dan hubungan antara harga dan awan untuk menentukan arah trend dan menemui peluang perdagangan. Isyarat perdagangan dihasilkan apabila harga memecahkan lapisan awan. Strategi ini sesuai untuk perdagangan kedudukan jangka menengah dan panjang.

Prinsip Strategi

Strategi ini menggunakan beberapa komponen penunjuk Ichimoku Kinko Hyo, termasuk Tenkan-Sen (Garis Penukaran), Kijun-Sen (Garis Asas), Senkou Span A (Leading Span A), Senkou Span B (Leading Span B) dan Chikou Span (Lagging Span).

Secara khusus, strategi ini menilai sama ada harga menembusi lapisan awan terutamanya berdasarkan garis Senkou Span A dan Senkou Span B. Kawasan di antara kedua-dua garis ini membentuk lapisan awan. Apabila harga penutupan menembusi tepi atas lapisan awan, isyarat beli dihasilkan; apabila harga penutupan menembusi tepi bawah lapisan awan, isyarat jual dihasilkan.

Di samping itu, strategi ini juga menetapkan harga stop loss dan mengambil keuntungan. Ia menggunakan syminfo.pointvalue dan maklumat kedudukan strategi untuk mengira mata keuntungan dan kerugian, dan kemudian menukarnya menjadi harga tertentu.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan penunjuk Ichimoku untuk menentukan arah trend dapat menapis bunyi pasaran dengan berkesan dan mengenal pasti trend jangka menengah dan panjang
  2. Menembusi lapisan awan membentuk isyarat yang boleh mengelakkan kerugian yang disebabkan oleh pecah palsu
  3. Memasukkan tetapan stop loss dan mengambil keuntungan boleh mengehadkan kerugian tunggal dan mengunci keuntungan
  4. Parameter yang boleh diselaraskan membolehkan ujian kesan parameter yang berbeza terhadap prestasi strategi
  5. Lapisan awan yang dilihat dan komponen Ichimoku lain membentuk isyarat perdagangan grafik yang intuitif

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Posisi jangka sederhana hingga panjang boleh membawa kepada kerugian terapung yang lebih besar
  2. Isyarat pecah mungkin terlambat, kehilangan titik masuk terbaik
  3. Penembusan palsu boleh menyebabkan isyarat yang salah dan kerugian
  4. Tempoh penyimpanan yang terlalu lama menimbulkan perbelanjaan yang lebih tinggi
  5. Harga stop loss dan mengambil keuntungan yang ditetapkan boleh dipecahkan melalui

Tindakan balas:

  1. Memendekkan tempoh pegangan dengan sewajarnya untuk mengurangkan risiko kerugian terapung tunggal
  2. Masukkan penunjuk lain untuk menentukan keberkesanan isyarat pecah
  3. Meningkatkan keberkesanan stop loss dan mengambil keuntungan untuk mengelakkan terjebak dalam kedudukan yang salah
  4. Mengoptimumkan tempoh penyimpanan untuk mengurangkan perbelanjaan

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Uji kombinasi parameter yang berbeza untuk mencari parameter optimum
  2. Masukkan penunjuk lain untuk penapisan isyarat untuk mengelakkan pecah palsu
  3. Dinamis menyesuaikan stop loss dan mengambil tahap keuntungan, jejak stop loss
  4. Sesuaikan kriteria keluar: lapisan awan yang mematahkan isyarat terbalik, pencetus retracement harga
  5. Tambah mekanisme pengurusan kedudukan

Kesimpulan

Secara amnya, Strategi Breakout Lilin Ichimoku Yin Yang adalah strategi biasa yang menggunakan penunjuk Ichimoku Kinko Hyo untuk menentukan arah trend jangka menengah dan panjang untuk breakout. Ia mempunyai kelebihan seperti parameter yang boleh disesuaikan, bentuk intuitif, dan isyarat yang dapat dilihat. Ia juga mempunyai beberapa risiko seperti breakout palsu dan memegang risiko. Dengan pengoptimuman parameter, penapisan isyarat, tetapan stop loss / take profit, dll., risiko dapat dikurangkan dan kestabilan strategi ditingkatkan. Strategi ini sesuai untuk perdagangan posisi jangka menengah dan panjang, terutama memasuki arah trend dengan cekap apabila isyarat terbentuk dengan memecahkan lapisan awan. Secara keseluruhan, ini adalah strategi dengan nilai praktikal.


/*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))

Lebih lanjut