이 전략은 다수의 기하급수적인 이동 평균 (EMA), 카마릴라 지지/저항 수준, 중앙 회전 범위 (CPR) 를 결합한 트렌드 다음 거래 시스템이다. 이 시스템은 여러 이동 평균과 주요 가격 영역과의 가격 관계를 분석하여 시장 추세와 잠재적 거래 기회를 식별한다. 이 시스템은 비율 기반 포지션 사이징과 다양한 출구 메커니즘을 포함한 엄격한 돈 관리 및 위험 통제 조치를 구현한다.
이 전략은 몇 가지 핵심 요소를 기반으로 합니다.
이 전략은 완전한 거래 시스템을 구축하기 위해 여러 가지 고전적인 기술 분석 도구를 통합합니다. 이 전략의 강점은 다차원 시장 분석과 엄격한 위험 관리에 있으며, 다른 시장 환경에서 적응력에주의를 기울여야합니다. 지속적인 최적화와 개선을 통해 전략은 안정성을 유지하면서 수익성을 향상시킬 수 있습니다.
/*backtest start: 2020-01-06 00:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Pradeep Crude oil Entry and Exit", overlay=true) // Input settings for EMAs ema20_period = input.int(20, title="EMA 20 Period") ema50_period = input.int(50, title="EMA 50 Period") ema100_period = input.int(100, title="EMA 100 Period") ema200_period = input.int(200, title="EMA 200 Period") // Fixed line width settings for EMAs ema20_width = 2 // EMA 20 Line Width ema50_width = 2 // EMA 50 Line Width ema100_width = 3 // EMA 100 Line Width ema200_width = 4 // EMA 200 Line Width // Backtesting inputs initial_capital = input.float(50000, title="Initial Capital", minval=100) position_size_percent = input.float(100, title="Position Size (% of Capital)", minval=0.1, maxval=100) exit_mode = input.string("Price Movement", title="Exit Mode", options=["Price Movement", "Percentage Movement"]) exit_points = input.int(20, title="Exit After X Points", minval=1) exit_percentage = input.float(1.0, title="Exit After X% Movement", minval=0.1, step=0.1) // Calculate EMAs ema20 = ta.ema(close, ema20_period) ema50 = ta.ema(close, ema50_period) ema100 = ta.ema(close, ema100_period) ema200 = ta.ema(close, ema200_period) // Signal conditions long_entry_condition = close > ema200 and close > ema20 and close[1] <= ema200 long_exit_condition = (exit_mode == "Price Movement" and close - strategy.position_avg_price >= exit_points * syminfo.mintick) or (exit_mode == "Percentage Movement" and (close - strategy.position_avg_price) / strategy.position_avg_price * 100 >= exit_percentage) short_entry_condition = close < ema200 and close < ema20 and close[1] >= ema200 short_exit_condition = (exit_mode == "Price Movement" and strategy.position_avg_price - close >= exit_points * syminfo.mintick) or (exit_mode == "Percentage Movement" and (strategy.position_avg_price - close) / strategy.position_avg_price * 100 >= exit_percentage) // Plot EMAs with specified line widths plot(ema20, color=color.green, title="EMA 20", linewidth=ema20_width) plot(ema50, color=color.aqua, title="EMA 50", linewidth=ema50_width) plot(ema100, color=color.blue, title="EMA 100", linewidth=ema100_width) plot(ema200, color=color.red, title="EMA 200", linewidth=ema200_width) // Camarilla Pivot Calculation prev_high = request.security(syminfo.tickerid, "D", high[1]) prev_low = request.security(syminfo.tickerid, "D", low[1]) prev_close = request.security(syminfo.tickerid, "D", close[1]) R3 = prev_close + (prev_high - prev_low) * 1.1 / 2 S3 = prev_close - (prev_high - prev_low) * 1.1 / 2 // Central Pivot Range (CPR) Calculation pivot = (prev_high + prev_low + prev_close) / 3 upper_cpr = pivot + (prev_high - prev_low) lower_cpr = pivot - (prev_high - prev_low) // Plot Camarilla R3, S3 and CPR levels plot(R3, color=color.purple, title="Camarilla R3", linewidth=2) plot(S3, color=color.purple, title="Camarilla S3", linewidth=2) plot(pivot, color=color.yellow, title="CPR Pivot", linewidth=2) plot(upper_cpr, color=color.green, title="CPR Upper", linewidth=1) plot(lower_cpr, color=color.red, title="CPR Lower", linewidth=1) // Backtesting: Capital and position size capital = initial_capital risk_per_trade = (position_size_percent / 100) * capital // Long positions if long_entry_condition strategy.entry("Long", strategy.long, qty=risk_per_trade / close) // Display entry price label label.new(bar_index, close, text="Entry: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar) if long_exit_condition strategy.close("Long") // Display exit price label label.new(bar_index, close, text="Exit: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar) // Short positions if short_entry_condition strategy.entry("Short", strategy.short, qty=risk_per_trade / close) // Display entry price label label.new(bar_index, close, text="Entry: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar) if short_exit_condition strategy.close("Short") // Display exit price label label.new(bar_index, close, text="Exit: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar) // Plot signals plotshape(long_entry_condition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, title="Long Entry") plotshape(long_exit_condition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, title="Long Exit") plotshape(short_entry_condition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, title="Short Entry") plotshape(short_exit_condition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, title="Short Exit")