
이 전략은 시장 기술 분석에서 매우 유명한 지표 Ichimoku Kinko Hyo 지표에 기초하여, 그 중의 클라우드 그래프 형태와 가격과 클라우드의 관계를 사용하여 트렌드 방향을 판단하여 거래 기회를 발견합니다. 가격이 클라우드를 뚫을 때 거래 신호를 생성합니다. 이 전략은 중장선 위치식 거래에 적용됩니다.
이 전략은 이치모쿠 킨코 히오 지표의 몇 가지 구성 요소를 사용한다. 전환선 ((Tenkan-Sen), 기준선 ((Kijun-Sen), 앞선선 ((Senkou Span A), 선도선 ((Senkou Span B), 그리고 뒤진선 ((Chikou Span) 이 있다. 이 몇 가지 선들이 모여 이치모쿠 구름이라고 불리는 것을 형성한다. 가격이 구름층을 뚫을 때, 구매와 판매 신호를 발생시킨다.
구체적으로, 전략은 가격의 클라우드 범위를 돌파했는지 여부를 결정하는 데 주로 세쿠 스판 A와 세쿠 스판 B의 두 선을 기반으로합니다. 이 두 라인 사이의 지역은 클라우드를 구성합니다. 가격이 클라우드 상단 상단을 돌파 할 때 구매 신호가 발생하며, 가격이 클라우드 하단 상단을 돌파 할 때 판매 신호가 발생합니다.
또한, 전략은 중지 및 중지 가격을 설정한다. syminfo.pointvalue와 전략의 위치 정보를 사용하여 손실 포인트를 계산하고 구체적인 가격으로 변환한다.
이 전략에는 다음과 같은 장점이 있습니다.
이 전략에는 위험도 있습니다.
대책:
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
이치모쿠 음양 ?? 라인 돌파전략은 전체적으로 이치모쿠 킨코 히오 지표를 사용하여 중장선 트렌드 방향을 판단하는 전형적인 돌파전략이다. 이치모쿠 킨코 히오 지표는 매개 변수 조정 가능, 직관적 형태, 시각적 신호 등의 장점이 있으며, 또한 일부 가짜 돌파 위험, 포지션 위험 등의 문제가 있다. 매개 변수 최적화, 필터링 신호, 스포드 스 설정 등의 방법으로 위험을 줄여 전략 안정성을 높일 수 있다. 이 전략은 중장기 위치식 거래에 적합하며, 특히 구름층을 돌파하여 신호를 형성할 때 높은 효율으로 트렌드 방향으로 진입한다.
/*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))