Strategi Perdagangan Algoritma Crossover Rata-rata Bergerak Eksponensial Ganda

Penulis:ChaoZhang, Tanggal: 2024-01-25 14:04:23
Tag:

img

Gambaran umum

Strategi ini diberi nama Dual Exponential Moving Average Crossover Algorithmic Trading Strategy. Ini menghitung rata-rata bergerak eksponensial ganda (EMA) dan menghasilkan sinyal perdagangan ketika EMA melintasi. Dikombinasikan dengan prinsip perdagangan algoritmik untuk entri pesanan, ini mengotomatiskan seluruh proses perdagangan.

Logika Strategi

Indikator 1 adalah EMA 20 hari dan Indikator 2 adalah EMA 50 hari. Sinyal beli dihasilkan ketika EMA jangka pendek melintasi EMA jangka panjang dari bawah. Sinyal jual dihasilkan ketika EMA jangka pendek melintasi EMA jangka panjang dari atas. Jadi silang EMA dengan parameter yang berbeda digunakan untuk menentukan titik masuk dan keluar pasar.

Selain itu, indikator Vortex digunakan untuk membantu dalam mengidentifikasi tren dan menghasilkan sinyal perdagangan. Indikator Vortex menentukan momentum bullish atau bearish dengan membandingkan perbedaan antara harga tertinggi dan tutup kemarin, dan harga terendah dan buka kemarin, selama periode 1 hari dan 3 hari. Menggunakan Vortex dapat membantu menyaring beberapa sinyal yang kurang signifikan dari persilangan EMA.

Ketika sinyal perdagangan dihasilkan, modul manajemen uang bawaan membantu mengelola risiko dengan mengontrol ukuran posisi berdasarkan rasio kerugian laba yang telah ditentukan sebelumnya.

Analisis Keuntungan

  1. Strategi ini mengintegrasikan silang EMA ganda dan indikator Vortex untuk mengambil keuntungan dari keduanya, sehingga meningkatkan akurasi sinyal

  2. Sistem perdagangan otomatis menghilangkan kesalahan emosional manusia dan meminimalkan risiko

  3. Fungsi stop loss / take profit otomatis membatasi kerugian maksimum untuk setiap perdagangan

  4. Modul pengelolaan uang mengontrol alokasi modal untuk setiap perdagangan, sehingga mengelola risiko keseluruhan

Analisis Risiko

  1. EMA crossover dapat menghasilkan sinyal palsu dan indikator Vortex juga tidak dapat sepenuhnya menyaring sinyal palsu. masih bisa ada beberapa perdagangan yang kalah.

  2. Black Swan Event dapat menyebabkan kerugian besar pada posisi terbuka.

  3. Strategi ini bergantung pada stop loss untuk mengendalikan drawdown.

Peluang perbaikan:

  1. Parameter EMA dapat dioptimalkan lebih lanjut untuk meningkatkan kualitas sinyal

  2. Lebih banyak indikator dapat ditambahkan ke sinyal filter yang lebih baik

  3. Algoritma pembelajaran mesin dapat membantu mengoptimalkan parameter secara otomatis

Kesimpulan


/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 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/
// © smottybugger 

//@version= 5
strategy("The  Averages Moving_X_Vortex", shorttitle="2.5billion BTC lol" , calc_on_order_fills=true, calc_on_every_tick=true, commission_type=strategy.commission.percent, commission_value=0.02, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, margin_long=0, margin_short=0,overlay=true)
// Dual Vortex
period_1 = input(15, "short Time")
period_2 = input(25, "long time")
VMP = math.sum(math.abs(high - low[3]), period_1)
VMM = math.sum(math.abs(low - high[1]), period_2)
STR = math.sum(ta.atr(1), period_1)
STR2 = math.sum(ta.atr(1), period_2)
VXpower= (input(5,"Vortex Power")/10000)*close
shorterV =(VMP / STR)*VXpower
longerV = (VMM / STR2)*VXpower

// MACross
shortlen = input(20, "ShortMa")
longlen = input(29, "LongMA")
shorterMA = ta.sma(close, shortlen)
longerMA = ta.sma(close, longlen)

// Vortex "MACross Stabilized"
Varance = input(1, "Vortex Stabilize")
Vpercent = (Varance / 100)
shortV= ((((shorterMA-close)* Vpercent)+shorterV)/2)+close
longV = ((((longerMA -close )*Vpercent)+longerV)/2)+close

//MAcross vortex stabilized
Marance = input(1, "MACross Stabilize")
MApercent = Marance / 100
shortMA = ((((shorterMA-close)*MApercent)+shorterV)/2)+close
longMA = ((((longerMA-close)*MApercent)+longerV)/2)+close

//VMXadveraged Moving cross adveraged
VMXL=(longV+longMA)/2
VMXS=(shortV+shortMA)/2
VXcross= ta.cross(VMXS,VMXL) ? VMXS : na
VMXcross= ta.cross(VMXS,VMXL)

//plot
plot(VMXS,"BUY",color=#42D420)
plot(VMXL,"SELL",color=#e20420)
crossV= ta.cross(shortV, longV) ? shortV : na
plot(shortV ,"shortV", color=#42D420)
plot(longV,"longV", color=#e20420)
plot(crossV,"crossV", color=#2962FF, style=plot.style_cross, linewidth=4)
crossMA = ta.cross(shortMA, longMA) ? shortMA : na
plot(shortMA,"shortMA", color=#42D420)
plot(longMA,"longMA", color=#e20420)
plot(crossMA,"crossMA", color=#2962FF, style=plot.style_cross, linewidth=4)
plot(VXcross,"VMXcross",color=#2962FF, style= plot.style_cross,linewidth=4)
plot(close,color=#999999)

// Vortex Condistyle
is_Vlong =shortV< longV
is_Vshort =shortV>longV


// Vortex commands
Vlong =  ta.crossunder(longV, shortV)
Vshort =ta.crossover(shortV,longV)
VorteX = ta.cross(longV, shortV)

// MACross Conditions
is_MAlong = shortMA < longV
is_MAshort = shortMA > shortV


//VMX Conditions
is_VMXlong=VMXS<VMXL
is_VMXshort=VMXS>VMXL

// MA commands
MAlong = ta.crossunder(shortMA, longV)
MAshort =ta.crossover(shortMA, shortV)
MAcross =  ta.cross(shortMA, longMA)
 
//VMX COMMANss
VMXBUY=ta.crossover( VMXS,VMXL)
VMXSELL=ta.crossunder(VMXS,VMXL)

// Close Crossing PositionLMXs

CS=is_MAshort or is_VMXshort
CL= is_MAlong or is_VMXlong
OS=MAshort or VMXSELL
OL=MAlong or VMXBUY


if VMXcross
    strategy.close_all ("closed")

//if CS and  OL
    strategy.close("Short",comment="Short Closed")


//if CL and  OS
    strategy.close("Long",comment="Long Closed" ) 

//CA1= is_MAcross and is_VorteX
//if CA1
   // strategy.close_all(comment="X2X")

// Defalongyntry qty

if is_VMXlong and VMXSELL
    strategy.entry("sell",strategy.short)


if is_VMXshort and VMXBUY
    strategy.entry("buy",strategy.long)



// Stop Losses & Taking Profit
sllp = input(0, "Stop Loss Long")
sll = (1 - sllp / 100) * strategy.position_avg_price
is_sll = input(true, "Stop Long")

tplp = input(0, "Take Profit Long")
tpl = (1 + tplp / 100) * strategy.position_avg_price
is_tpl = input(true, "Take Long")

slsp = input(0, "Stop Loss Short")
sls = (1 + slsp / 100) * strategy.position_avg_price
is_sls = input(true, "Stop Short")

tpsp = input(0, "Take Profit Short")
tps = (1 - tpsp / 100) * strategy.position_avg_price
is_tps = input(true, "Take Short")

if (is_sll or is_sls) 
    strategy.close("Stop Losses", qty_percent=100)

if (is_tpl or is_tps) 
    strategy.close("Take Profits", qty_percent=100)


 //Strategy Backtest
//plot(strategy.equity, "Equity", color=color.red, linewidth=2, style=plot.style_areabr)


Lebih banyak