イチモク・イイン・ヤング キャンドルスタイク ブレイク戦略

作者: リン・ハーンチャオチャン開催日:2023年12月21日 10:44:37
タグ:

img

概要

この戦略は,技術分析における非常に有名な指標であるイチモク・キンコ・ヒョーに基づいている.雲の形状と価格と雲の間の関係を用いて,トレンド方向を決定し,取引機会を発見する.価格が雲層を突破すると取引信号が生成される.この戦略は中長期のポジショナル取引に適している.

戦略原則

イチモク・キンコ・ヒョー指標のいくつかの構成要素を使用する戦略は,テンカン・セン (変換線),キジュン・セン (ベースライン),センコウ・スパンA (リード・スパンA),センコウ・スパンB (リード・スパンB),チコウ・スパン (遅れ・スパン) などである.これらの線が収束し,いわゆるイチモク・クラウドを形成する.価格がクラウド層を突破すると,買い売り信号が生成される.

特に,この戦略は,価格がクラウド層を突破するかどうかを,主にセンコスパンA線とセンコスパンB線に基づいて判断する.この2つの線間の領域がクラウド層を構成する.閉じる価格がクラウド層の上端を突破すると,購入信号が生成され,閉じる価格がクラウド層の下端を突破すると,販売信号が生成される.

さらに,戦略はストップ・ロスの価格と利益の価格も設定します.それは syminfo.pointvalueと戦略の位置情報を利用して,利益と損失のポイントを計算し,それらを特定の価格に変換します.

利点分析

この戦略には以下の利点があります.

  1. イチモク指標を使用してトレンド方向を決定することで,市場のノイズを効果的にフィルタリングし,中長期トレンドを特定することができます.
  2. 雲層を突破すると 偽の突破による損失を回避できる信号が形成される
  3. ストップ・ロストとテイク・プロフィートの設定を組み込むことで,単一の損失を制限し,利益をロックすることができます.
  4. 調整可能なパラメータにより,戦略の業績に対する異なるパラメータの影響をテストできます
  5. 視覚化されたクラウドレイヤと他のIchimokuコンポーネントは直感的なグラフィック取引信号を形成します

リスク分析

この戦略にはいくつかのリスクもあります:

  1. 中期から長期のポジションは,より大きな浮動損失につながる可能性があります.
  2. 突破信号が遅れて 最良の入口点を逃す
  3. 誤ったブレイクが誤った信号と損失を引き起こす可能性があります
  4. 持有期間が長すぎると,費用が高くなります.
  5. 設定されたストップ・ロストと収益価格が破られる.

対策:

  1. 保有期間を適度に短縮し,単一の変動損失のリスクを軽減する
  2. 突破信号の有効性を決定するための他の指標を組み込む
  3. ストップ・ロスの有効性を向上させ,誤ったポジションに引っかかることを避けるために利益を取ります
  4. 保持期間を最適化して費用を削減する

オプティマイゼーションの方向性

戦略は以下の側面で最適化できます.

  1. 最適なパラメータを見つけるために異なるパラメータ組み合わせをテスト
  2. 誤ったブレイクを避けるため,信号フィルタリングのための他の指標を組み込む.
  3. ストップ損失を動的に調整し,利益レベルを取って,ストップ損失をトレイル
  4. 退出基準をカスタマイズする:逆信号破裂雲層,価格リトレーストリガー
  5. ポジション管理メカニズムを追加する

結論

一般的には,イチモク・イイン・ヤング・キャンドルストレーキ・ブレイクアウト戦略は,イチモク・キンコ・ヒョー指標を使用してブレイクアウトの中長期トレンド方向を決定する典型的な戦略である.調整可能なパラメータ,直感的な形状,可視化可能なシグナルなどの利点がある.また,偽ブレイクアウトや保有リスクなどのリスクもある.パラメータ最適化,シグナルフィルタリング,ストップ・ロスト/テイク・プロフィート設定などにより,リスクは軽減され,戦略の安定性が向上する.この戦略は,特に雲層を壊してシグナルが形成されたときに効率的にトレンド方向に侵入する中長期ポジショナル取引に適している.全体的に見ると,これは実用的な価値のある戦略である.


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

もっと