이치모쿠 진양 촛불 트 전략

저자:차오장, 날짜: 2023-12-21 10:44:37
태그:

img

전반적인 설명

이 전략은 기술 분석에서 매우 유명한 지표인 Ichimoku Kinko Hyo를 기반으로 트렌드 방향을 결정하고 거래 기회를 발견하기 위해 클라우드 모양과 가격과 클라우드 사이의 관계를 사용합니다. 이 전략은 가격이 클라우드 층을 통과 할 때 거래 신호가 생성됩니다. 이 전략은 중장기 포지셔널 트레이딩에 적합합니다.

전략 원칙

이 전략은 이치모쿠 킨코 히오 지표의 여러 구성 요소를 사용합니다. 텐칸-센 (변환선), 키준-센 (기본선), 센코 스판 A (리딩 스판 A), 센코 스판 B (리딩 스판 B) 및 치코 스판 (래깅 스판) 등이 있습니다. 이 라인은 이른바 이치모쿠 클라우드를 형성하기 위해 융합됩니다. 가격이 클라우드 층을 통과 할 때 구매 및 판매 신호가 생성됩니다.

구체적으로, 전략은 가격이 클라우드 레이어를 통과하는지 여부를 주로 센쿠 스판 A와 센쿠 스판 B 라인을 기반으로 판단합니다. 이 두 라인 사이의 영역은 클라우드 레이어를 구성합니다. 종료 가격이 클라우드 레이어의 상단 가장자리를 통과하면 구매 신호가 생성됩니다. 종료 가격이 클라우드 레이어의 하단 가장자리를 통과하면 판매 신호가 생성됩니다.

또한, 전략은 또한 중지 손실을 설정하고 수익을 가져가는 가격을 설정합니다. 그것은 syminfo.pointvalue 및 전략의 위치 정보를 사용하여 이익과 손실 포인트를 계산하고 특정 가격으로 변환합니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트렌드 방향을 결정하기 위해 이치모쿠 지표를 사용하면 시장 소음을 효과적으로 필터하고 중장기 트렌드를 식별 할 수 있습니다.
  2. 구름층을 뚫고 지나간다는 것은 가짜 파업으로 인한 손실을 피할 수 있는 신호를 형성합니다.
  3. 스톱 로스 및 수익 취득 설정을 포함하면 단일 손실을 제한하고 수익을 차단 할 수 있습니다.
  4. 조정 가능한 매개 변수는 전략 성과에 대한 다른 매개 변수의 영향을 테스트 할 수 있습니다.
  5. 시각화 된 클라우드 계층과 다른 Ichimoku 구성 요소는 직관적인 그래픽 거래 신호를 형성합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 중장기 포지션은 더 큰 변동 손실로 이어질 수 있습니다.
  2. 침투 신호가 늦어지거나 가장 좋은 입구 지점을 놓칠 수 있습니다.
  3. 가짜 브레이크는 잘못된 신호와 손실을 일으킬 수 있습니다.
  4. 지나치게 긴 보유 기간은 더 많은 비용을 발생
  5. 설정된 스톱 손실 및 수익을 얻을 수 있습니다

대책:

  1. 단일 변동 손실 위험을 줄이기 위해 보유 기간을 적절히 단축합니다.
  2. 브레이크오웃 신호의 효과를 결정하기 위해 다른 지표를 포함합니다.
  3. 잘못된 포지션에 걸리지 않기 위해 Stop Loss의 효과를 높이고 수익을 취하십시오.
  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))

더 많은