Hệ thống bỏ phiếu chéo đa MA có thể cấu hình

Tác giả:ChaoZhang, Ngày: 2023-09-23 15:52:06
Tags:

Tổng quan

Chiến lược này cho phép cấu hình linh hoạt của nhiều cặp trung bình chuyển động nhanh / chậm. Nó đi dài khi tất cả các MA nhanh vượt qua trên các MA chậm, và thoát ra khi bất kỳ MA nhanh nào vượt qua dưới MA chậm. Cơ chế bỏ phiếu với nhiều MA nhằm mục đích hình thành các quyết định nắm giữ vị trí mạnh mẽ.

Chiến lược logic

Các thành phần và quy tắc chính là:

  1. Nhiều MAs nhanh / chậm: Sử dụng SMA, WMA, VWMA vv

  2. tín hiệu dài: tất cả các MAs nhanh vượt qua trên các MAs chậm.

  3. Tín hiệu thoát: Bất kỳ đường băng MA nhanh nào dưới MA chậm.

  4. Điểm lợi nhuận/mất: Điểm cố định dựa trên ATR.

  5. Có thể cấu hình: cấu hình linh hoạt của nhiều cặp MA.

Nhập dựa trên bỏ phiếu với nhiều MAs cải thiện độ tin cậy tín hiệu.

Ưu điểm

So với các chiến lược MA đơn, những lợi thế là:

  1. Nhiều MA cung cấp đánh giá xu hướng toàn diện hơn.

  2. Việc bỏ phiếu tránh các tín hiệu sai từ tiếng ồn.

  3. Không gian điều chỉnh lớn từ các cấu hình MA tùy chỉnh.

  4. Hỗ trợ cho các loại MA khác nhau tăng khả năng thích nghi.

  5. Kiểm soát điểm lợi nhuận/mất lỗ được xác định theo rủi ro/lợi nhuận giao dịch.

  6. Làm việc tốt hơn trong thời gian dài hơn, ít chấn động hơn.

  7. Logic đơn giản và trực quan, dễ thực hiện và vận hành.

  8. Nhìn chung ổn định hơn với tuổi thọ dài hơn so với MA đơn.

Rủi ro

Tuy nhiên, có một số rủi ro:

  1. Tăng độ phức tạp với nhiều MAs.

  2. Nguy cơ tối ưu hóa quá mức.

  3. Sự chậm trễ cơ bản trong việc xác định những thay đổi xu hướng.

  4. Không tính đến khối lượng, sẽ bị mắc kẹt.

  5. Điểm lợi nhuận/mất có thể gây ra những bước ra không cần thiết.

  6. Hiệu suất tùy thuộc vào thay đổi chế độ thị trường.

  7. Cần theo dõi tỷ lệ phần thưởng / rủi ro và độ mượt mà của đường cong.

  8. Sự bền vững trên các công cụ đòi hỏi phải được xác nhận.

Những cải tiến

Dựa trên phân tích, các cải tiến có thể bao gồm:

  1. Kiểm tra độ bền của các tham số trên các thiết bị khác nhau.

  2. Thêm xác nhận khối lượng hoặc biến động.

  3. Tối ưu hóa điểm lợi nhuận/mất.

  4. Thiết lập giới hạn rút tiền tối đa.

  5. Xây dựng mô hình định kích thước vị trí động.

  6. Đánh giá hiệu quả từ việc giới thiệu máy học.

  7. Kiểm tra lượng rút tối đa và độ mượt của đường cong.

  8. Tiếp tục lặp lại để tránh quá phù hợp.

Kết luận

Cách tiếp cận đa MA có thể cấu hình tạo thành một cơ chế giữ vị trí mạnh mẽ. Nhưng ngăn chặn quá mức và thích nghi năng động với thị trường thay đổi là chìa khóa cho sự tồn tại lâu dài của bất kỳ chiến lược nào. Chỉ thông qua các tối ưu hóa và thử nghiệm liên tục nghiêm ngặt, chiến lược lượng mới duy trì thành công.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © levieux

//@version=5
strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config")
source= input.source(high)
maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"])
atrPeriod= input(14, title="ATR Period")
profitAtr = input(10, title="Profit ATR x")
lossAtr = input(5, title="Loss ATR x")


ma(src,length,type) => 
    float ma = switch type
	    "SMA" => ta.sma(src, length)
	    "WMA" => ta.wma(src, length)
	    "VWMA" => ta.vwma(src, length)

crossoverGroups= str.split(crossoverConfig, ",")
crossoverCount= array.size(crossoverGroups)
crossovers= array.new_string(crossoverCount)
positions= array.new_int(crossoverCount, 0)
longVotes= 0
for i= 0 to crossoverCount-1
    crossover= str.tostring(array.get(crossoverGroups, i))
    crossoverBoundaries= str.split(crossover, "x")
    int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0)))
    int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1)))
    wmaFast= ma(source,fastLength,maType)
    wmaSlow= ma(source,slowLength,maType)
    if wmaFast>wmaSlow
        longVotes:= longVotes + 1
        array.set(positions, i, 1)

longCondition= longVotes==crossoverCount and strategy.position_size==0


//profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick
//lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick
profitPrice= close+profitAtr*ta.atr(atrPeriod)
lossPrice= close-lossAtr*ta.atr(atrPeriod)

if strategy.position_size>0
    profitPrice:= profitPrice[1]
    lossPrice:= lossPrice[1]

plot(profitPrice, color=color.green)
plot(lossPrice, color=color.red)

if longCondition and profitPrice>0
    strategy.entry("Long", strategy.long)

if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice)
    strategy.close("Long")
    
longVotes:= 0

Thêm nữa