Adaptif Zero Lag EMA Strategi

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

Skrip yang Anda berikan didasarkan pada strategi Adaptive Zero Lag EMA (AZLEMA). Skrip ini menggunakan prinsip-prinsip penelitian pengolahan sinyal John Ehlers dan metode yang dikenal sebagai Cosine Instantaneous Frequency Measurement (IFM) untuk menentukan periode siklus dominan, yaitu, panjang waktu antara dua titik yang sama dalam siklus berturut-turut dalam data perdagangan Anda.

Berikut ini adalah gambaran singkat tentang apa yang dilakukan oleh skrip perdagangan:

  1. Pada awalnya, ia mengatur strategi menggunakan konfigurasi input default seperti periode, mode adaptif, batas keuntungan, ambang batas, titik stop loss dan mengambil poin keuntungan. Mata uang ditetapkan menjadi USD dan modal awal menjadi 1000.

  2. Ini kemudian mengatur perhitungan untuk mode adaptif menggunakan kombinasi persamaan diferensial dan metode Ehlers (digunakan ketika pengaturan Adaptive? ditetapkan menjadi benar).

  3. Ini menghitung nilai rata-rata (EMA) dari sumber data yang dipilih selama periode yang dipilih.

  4. Ini melakukan operasi loop untuk menemukan nilai Korélasi Keuntungan dan Kesalahan (EC) yang meminimalkan Kesalahan mutlak.

  5. Menggunakan nilai-nilai ini, ia menghitung nilai EC akhir dan memetakan nilai EC dan EMA pada grafik.

  6. Hal ini menciptakan kondisi pembelian dan penjualan potensial berdasarkan crossover dan crossunder EC dan EMA di atas ambang batas tertentu.

  7. Ini menetapkan aturan untuk masuk dan keluar dari posisi panjang dan pendek berdasarkan kondisi beli dan jual yang ditentukan sebelumnya. Untuk setiap posisi, ini menghitung ukuran lot dan memasuki posisi ketika kondisi masing-masing (beli / jual) benar. Ini menetapkan stop loss dan trailing take profit untuk setiap posisi.

Skrip ini tampaknya cukup komprehensif dan serbaguna karena memungkinkan Anda mengubah beberapa parameter untuk beradaptasi dengan gaya perdagangan dan kondisi pasar yang berbeda.


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