Chiến lược giao cắt đường trung bình động theo xu hướng


Ngày tạo: 2024-01-29 16:52:46 sửa đổi lần cuối: 2024-01-29 16:52:46
sao chép: 3 Số nhấp chuột: 596
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt đường trung bình động theo xu hướng

Tổng quan

Chiến lược này dựa trên một chiến lược đơn giản của đường trung bình di chuyển, nó có thể có hiệu quả tốt trên các cặp tiền tệ khác nhau. Nó vẽ đường trung bình mở và đường trung bình đóng, quyết định thiết lập hoặc thoát khỏi vị trí đa đầu khi hai đường giao nhau. Nguyên tắc của nó là thiết lập vị trí khi giá đóng trung bình tăng, điều này có thể báo hiệu giá trong tương lai sẽ tăng.

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

Chiến lược này bắt đầu bằng cách chọn loại moving average theo thiết lập bao gồm EMA, SMA, RMA, WMA và VWMA. Sau đó, thiết lập chu kỳ tính toán moving average, thường là từ 10 đến 250 đường K. Chọn loại moving average khác nhau và số lần theo cặp tiền tệ khác nhau có thể có hiệu quả hoàn toàn khác nhau.

Các giao dịch cụ thể trong chiến lược này là:

  1. Tính trung bình động của giá mở và giá đóng;
  2. So sánh giá trị trung bình của giá đóng cửa và giá mở cửa;
  3. Xây dựng một vị trí nhiều đầu vào nếu giá đóng cửa trên trung bình giá mở cửa;
  4. Nếu giá đóng cửa dưới giá trung bình của giá mở cửa, bạn sẽ thanh toán các vị trí nhiều đầu.

Xây dựng vị trí được coi là dấu hiệu của giá tăng, khi giảm vị trí được coi là dấu hiệu của giá giảm.

Phân tích lợi thế chiến lược

Chiến lược này có một số ưu điểm:

  1. Thiết lập tham số linh hoạt, có thể lựa chọn tham số tối ưu cho các cặp tiền tệ khác nhau, do đó có khả năng nhắm mục tiêu mạnh mẽ;
  2. Nó có thể được sử dụng để tạo ra một hệ thống thông tin, một hệ thống thông tin, một hệ thống thông tin.
  3. Một số cặp tiền có thể đạt được lợi nhuận rất cao và ổn định hơn trong tổng thể;
  4. Có thể hiển thị các chỉ số khác nhau tùy theo nhu cầu, mức độ tùy chỉnh cao.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Trong một số cặp tiền tệ và các tham số, lợi nhuận và sự ổn định đều không cao.
  2. Không có khả năng đáp ứng hiệu quả với biến động giá trong ngắn hạn và không hiệu quả đối với các đồng tiền có tính biến động cao;
  3. Việc lựa chọn chu kỳ trung bình di chuyển dựa trên cơ sở không đủ khoa học và có một số chủ quan.

Phương pháp đối phó và tối ưu hóa:

  1. Cố gắng chọn chu kỳ dài nhất có thể, chẳng hạn như chu kỳ 12 giờ, 1 ngày, có thể làm giảm giao dịch không cần thiết và tăng sự ổn định;
  2. Thêm chức năng tối ưu hóa tham số, tự động thử nghiệm các kết hợp tham số khác nhau để tìm ra tham số tối ưu nhất;
  3. Thêm tính năng tự điều chỉnh để chọn chu kỳ trung bình di chuyển để hệ thống tự động quyết định chu kỳ tốt nhất.

Tóm tắt

Chiến lược này nói chung là logic đơn giản, sử dụng chỉ số trung bình di chuyển để xác định xu hướng giá và điểm biến. Nó có thể đạt được hiệu quả rất tốt bằng cách điều chỉnh tham số, là một chiến lược theo dõi xu hướng hiệu quả, đáng để hoàn thiện và áp dụng hơn nữa.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)