Tài nguyên đang được tải lên... tải...

Multi-EMA Crossover với hệ thống giao dịch xu hướng hỗ trợ/kháng cự Camarilla

Tác giả:ChaoZhang, Ngày: 2025-01-06 11:13:31
Tags:EMACPRSR

img

Tổng quan

Chiến lược này là một hệ thống giao dịch theo xu hướng kết hợp nhiều trung bình chuyển động nhân tố (EMA), mức hỗ trợ / kháng cự Camarilla và phạm vi trung tâm trung tâm (CPR). Hệ thống xác định xu hướng thị trường và cơ hội giao dịch tiềm năng bằng cách phân tích mối quan hệ giá với nhiều trung bình chuyển động và các vùng giá chính. Nó thực hiện các biện pháp quản lý tiền tệ và kiểm soát rủi ro nghiêm ngặt, bao gồm kích thước vị trí dựa trên tỷ lệ phần trăm và các cơ chế thoát khác nhau.

Nguyên tắc chiến lược

Chiến lược dựa trên một số thành phần cốt lõi:

  1. Hệ thống EMA nhiều lần (20/50/100/200) để xác nhận hướng xu hướng và sức mạnh
  2. Camarilla Support/Resistance levels (R3/S3) để xác định các mức giá chính
  3. Phạm vi trung tâm (CPR) để xác định phạm vi giao dịch trong ngày
  4. Các tín hiệu nhập cảnh dựa trên giá chéo với xác nhận EMA200 và EMA20
  5. Các chiến lược ra khỏi bao gồm các điểm cố định và chế độ chuyển động tỷ lệ phần trăm
  6. Hệ thống quản lý tiền năng điều chỉnh kích thước vị trí dựa trên kích thước tài khoản

Ưu điểm chiến lược

  1. Tích hợp các chỉ số kỹ thuật đa chiều cung cấp các tín hiệu giao dịch đáng tin cậy hơn
  2. Các cơ chế rời khỏi linh hoạt thích nghi với các điều kiện thị trường khác nhau
  3. Hệ thống quản lý tiền tệ toàn diện kiểm soát rủi ro hiệu quả
  4. Xu hướng theo các đặc điểm giúp nắm bắt các chuyển động thị trường lớn
  5. Các thành phần trực quan giúp các nhà giao dịch hiểu cấu trúc thị trường

Rủi ro chiến lược

  1. Có thể tạo ra tín hiệu sai trên các thị trường khác nhau
  2. Nhiều chỉ số có thể dẫn đến tín hiệu giao dịch chậm
  3. Các điểm thoát cố định có thể hoạt động kém hơn ở các thị trường biến động cao
  4. Cần vốn đáng kể để chịu được việc rút vốn
  5. Chi phí giao dịch có thể ảnh hưởng đến lợi nhuận chiến lược tổng thể

Hướng dẫn tối ưu hóa chiến lược

  1. Tạo các chỉ số biến động để điều chỉnh động các thông số nhập/đi
  2. Thêm mô-đun xác định trạng thái thị trường để thích nghi với các điều kiện thị trường khác nhau
  3. Tối ưu hóa hệ thống quản lý tiền với quản lý vị trí năng động
  4. Thêm bộ lọc thời gian giao dịch để cải thiện chất lượng tín hiệu
  5. Xem xét thêm phân tích âm lượng để tăng độ tin cậy tín hiệu

Tóm lại

Chiến lược tích hợp nhiều công cụ phân tích kỹ thuật cổ điển để xây dựng một hệ thống giao dịch hoàn chỉnh. Sức mạnh của nó nằm trong phân tích thị trường đa chiều và quản lý rủi ro nghiêm ngặt, trong khi cần chú ý đến khả năng thích nghi trong môi trường thị trường khác nhau. Thông qua tối ưu hóa và cải tiến liên tục, chiến lược có tiềm năng tăng lợi nhuận trong khi duy trì sự ổn định.


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




Có liên quan

Thêm nữa