Adaptive Zero Lag EMA Strategi

Penulis:ChaoZhang, Tarikh: 2023-09-08 16:24:02
Tag:

Skrip yang anda berikan adalah berdasarkan strategi Adaptive Zero Lag EMA (AZLEMA). Skrip ini menggunakan prinsip penyelidikan pemprosesan isyarat John Ehlers dan kaedah yang dikenali sebagai Cosine Instantaneous Frequency Measurement (IFM) untuk menentukan tempoh kitaran dominan, iaitu, tempoh masa antara dua titik yang sama dalam kitaran berturut-turut dalam data perdagangan anda.

Berikut adalah gambaran ringkas tentang apa skrip perdagangan lakukan:

  1. Pada mulanya, ia menetapkan strategi menggunakan konfigurasi input lalai seperti tempoh, mod penyesuaian, had keuntungan, ambang, titik stop loss dan mengambil mata keuntungan. Mata wang ditetapkan kepada USD dan modal awal kepada 1000.

  2. Ia kemudiannya menetapkan pengiraan untuk mod adaptif menggunakan gabungan persamaan pembezaan dan kaedah Ehlers (digunakan apabila tetapan Adaptive? ditetapkan menjadi benar).

  3. Ia mengira nilai purata (EMA) sumber data yang dipilih untuk tempoh yang dipilih.

  4. Ia melakukan operasi gelung untuk mencari nilai Korrelasi Keuntungan dan Kesalahan (EC) yang meminimumkan Kesalahan mutlak.

  5. Menggunakan nilai-nilai ini, ia mengira nilai EC akhir dan memetakan nilai EC dan EMA pada carta.

  6. Ia mewujudkan keadaan pembelian dan penjualan yang berpotensi berdasarkan persilangan dan persilangan EC dan EMA di atas ambang tertentu.

  7. Ia menetapkan peraturan untuk memasuki dan keluar dari kedudukan panjang dan pendek berdasarkan keadaan beli dan jual yang ditentukan sebelumnya. Untuk setiap kedudukan, ia mengira saiz lot dan memasuki kedudukan apabila keadaan masing-masing (beli / jual) adalah benar. Ia menetapkan stop loss dan mengambil keuntungan untuk setiap kedudukan.

Skrip ini kelihatan cukup komprehensif dan serba boleh kerana ia membolehkan anda mengubah pelbagai parameter untuk menyesuaikan diri dengan gaya perdagangan dan keadaan pasaran yang berbeza.


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

Lebih lanjut