一目均衡表ブレイクアウト戦略


作成日: 2023-12-21 10:44:37 最終変更日: 2023-12-21 10:44:37
コピー: 2 クリック数: 721
1
フォロー
1621
フォロワー

一目均衡表ブレイクアウト戦略

概要

この戦略は,市場技術分析において非常に有名な指標であるイチモク・キンコ・ヒョ指数に基づいている.この指数は,その雲の図形と価格と雲の関係を利用して,トレンドの方向を判断し,取引の機会を発見する.価格が雲を破るときに取引シグナルを生成する.この戦略は,中長線形の取引に適用される.

戦略原則

この戦略は,イチモク・キンコ・ヒョ指数のいくつかの構成要素,すなわち,変換線 ((Tenkan-Sen),基準線 ((Kijun-Sen),前沿線 ((Senkou Span A),先導線 ((Senkou Span B),および後退線 ((Chikou Span) を使用する.これらの線は,いわゆるイチモク・クラウドを形成する.価格が雲層を突破すると,買入と売却の信号が生じる.

具体的には,価格が雲域を突破するかどうかを判断する戦略は,主にSenkou Span AとSenkou Span Bの2つの線に基づいています. この2つの線間の領域が雲域を形成しています. 価格の閉塞が雲域の上沿いに突破すると買取シグナルが生じ,価格の閉塞が雲域の下沿いに突破すると売出シグナルが生じます.

さらに,戦略は,止損と停止価格を設定します.syminfo.pointvalueと戦略のポジション情報を利用して,損益ポイントを計算し,具体価格に変換します.

優位分析

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

  1. イチモク指数を使用してトレンドの方向性を判断し,市場騒音を効果的にフィルターし,中長線トレンドを識別します.
  2. 雲を突破して信号を作り出し,偽突破による損失を回避する
  3. ストップ・ロズとストップ・ストップの組み合わせで,単一損失を制限し,利益をロックします.
  4. パラメータを調整して,異なるパラメータが戦略のパフォーマンスに与える影響をテストできます.
  5. 視覚化された雲と他のイチモコの構成要素が,直感的なグラフィック取引信号を形成する

リスク分析

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

  1. 中長線で持仓,大きな浮動損失の可能性
  2. 突破信号が遅れて,入口のベストポイントを逃してしまう可能性
  3. 偽の突破により,誤信号と損失が発生する可能性があります.
  4. 長期にわたって保有し,高額な衍生費
  5. 設定したストップ・ロズとストップ・ストップの価格が破られる可能性

対策として

  1. ポジションの周期を適切に短縮し,単一の浮動損失リスクを低減する
  2. 突破信号の有効性を判断する他の指標と組み合わせた
  3. の効果を高め,を避ける
  4. ポジション保持期間を最適化し,コストを削減する

最適化の方向

この戦略は以下の点で最適化できます.

  1. 異なるパラメータの組み合わせをテストし,最適なパラメータを探します.
  2. 偽突破を防ぐために,他の指標と組み合わせた信号のフィルタリング
  3. 動的にストップ・ローズレベルを調整する, trails stop loss
  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))