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

Chiến lược EMA Zero Lag thích nghi

Tác giả:ChaoZhang, Ngày: 2023-09-08 16:24:02
Tags:

Kịch bản mà bạn đã cung cấp dựa trên chiến lược Adaptive Zero Lag EMA (AZLEMA). Kịch bản này sử dụng các nguyên tắc của nghiên cứu xử lý tín hiệu của John Ehlers và phương pháp được gọi là Cosine Instantaneous Frequency Measurement (IFM) để xác định thời gian chu kỳ thống trị, tức là thời gian giữa hai điểm giống hệt nhau trong các chu kỳ liên tiếp trong dữ liệu giao dịch của bạn.

Dưới đây là một cái nhìn tổng quan ngắn gọn về những gì kịch bản giao dịch làm:

  1. Ban đầu, nó thiết lập chiến lược bằng cách sử dụng cấu hình đầu vào mặc định như thời gian, chế độ thích nghi, giới hạn lợi nhuận, ngưỡng, điểm dừng lỗ và điểm lợi nhuận.

  2. Sau đó nó thiết lập các tính toán cho chế độ thích nghi bằng cách sử dụng sự kết hợp của phương trình vi phân và phương pháp Ehlers (được sử dụng khi cài đặt Adaptive? được đặt thành true).

  3. Nó tính toán giá trị trung bình (EMA) của nguồn dữ liệu được chọn trong khoảng thời gian được chọn.

  4. Nó thực hiện một hoạt động vòng lặp để tìm các giá trị tương quan thu nhập và lỗi (EC) giảm thiểu lỗi tuyệt đối.

  5. Sử dụng các giá trị này, nó tính toán giá trị EC cuối cùng và biểu đồ giá trị EC và EMA trên biểu đồ.

  6. Nó tạo ra các điều kiện mua và bán tiềm năng dựa trên sự giao thoa và giao thoa giữa EC và EMA trên một ngưỡng xác định nhất định.

  7. Nó thiết lập các quy tắc để vào và ra khỏi các vị trí dài và ngắn dựa trên các điều kiện mua và bán được xác định trước đó. Đối với mỗi vị trí, nó tính toán kích thước lô và nhập vào vị trí khi điều kiện tương ứng (mua / bán) là đúng. Nó thiết lập dừng lỗ và lợi nhuận theo dõi cho mỗi vị trí.

Kịch bản này có vẻ khá toàn diện và linh hoạt vì nó cho phép bạn thay đổi nhiều tham số để thích nghi với các phong cách giao dịch và điều kiện thị trường khác nhau.


/*backtest
start: 2023-08-08 00:00:00
end: 2023-09-07 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA", shorttitle="AZLEMA", overlay = true, initial_capital=1000, currency="USD", commission_type=strategy.commission.cash_per_contract, commission_value=0.000005, slippage = 5, pyramiding=1, calc_on_every_tick=true)

src = input(title="Source",  defval=close)
Period = input(title="Period", defval = 20)
adaptive = input(title="Adaptive?", defval=true)
GainLimit = input(title="Gain Limit",  defval = 15)
Threshold = input(title="Threshold",  defval=0.03, step=0.01)
fixedSL = input(title="SL Points", defval=50)
fixedTP = input(title="TP Points", defval=10)
risk = input(title='Risk', defval=0.01, step=0.01)

PI = 3.14159265359
s2 = 0.0
s3 = 0.0
delta = 0.0
inst = 0.0
len = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

//IF adaptive is true, use the Cosine IFM strategy for determining the dominant
//cycle period
if(adaptive)
    v1 := src - src[7]
    s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
    s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
    if (s2 != 0)
        v2 := sqrt(s3/s2)
    if (s3 != 0)
        delta := 2*atan(v2)
    for i = 0 to 100
        v4 := v4 + delta[i]
        if (v4 > 2*PI and inst == 0.0)
            inst := i - 1
    if (inst == 0.0)
        inst := inst[1]
    len := 0.25*inst + 0.75*nz(len[1])
    Period := round(len)

LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold

if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

Thêm nữa