
Strategi ini menggunakan purata bergerak berganda, iaitu purata bergerak 8 dan purata bergerak 21 kitaran. Apabila purata bergerak jangka pendek di atas rata-rata bergerak jangka panjang, lakukan lebih banyak; apabila purata bergerak jangka pendek di bawah rata-rata bergerak jangka panjang, lakukan kosong.
Strategi ini juga memperkenalkan penunjuk kemerosotan purata bergerak untuk menyaring beberapa jarak tanpa trend, dan hanya menghasilkan isyarat perdagangan apabila trend lebih jelas.
Strategi ini berpusat pada persilangan purata bergerak jangka pendek dan purata bergerak jangka panjang. Purata bergerak jangka pendek lebih cepat menangkap trend perubahan harga, sementara purata bergerak jangka panjang mempunyai kesan penapisan yang lebih baik terhadap bunyi.
Strategi ini juga menetapkan ambang kecenderungan. Isyarat lebih banyak dihasilkan hanya jika kecenderungan lebih besar daripada ambang positif, dan isyarat kosong dihasilkan hanya jika kecenderungan lebih kecil daripada ambang negatif. Ini dapat menyaring beberapa jarak tanpa trend yang jelas, menjadikan kualiti isyarat perdagangan lebih tinggi.
Secara khusus, logik penjanaan isyarat perdagangan strategi ini adalah:
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Untuk menangani risiko ini, anda boleh mengoptimumkan dari beberapa aspek:
Strategi ini juga boleh dioptimumkan dengan cara berikut:
Strategi purata bergerak ganda ini secara keseluruhan mudah dan praktikal, menangkap ciri-ciri trend yang berbeza melalui parameter diffs dua kitaran, dan menggabungkannya untuk menghasilkan isyarat perdagangan. Pada masa yang sama, pengenalan nilai terhad kecenderungan meningkatkan kualiti isyarat. Strategi ini boleh digunakan sebagai strategi asas dan diperluaskan, dengan banyak ruang untuk pengoptimuman dan pengembangan.
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//written by sixpathssenin
//@version=4
strategy(title="Dual Moving Average",initial_capital=10000,overlay=true)
ma1= sma(close,8)
ma2= sma(close,21)
angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13)
i_lookback = input(2, "Angle Period", input.integer, minval = 1)
i_atrPeriod = input(10, "ATR Period", input.integer, minval = 1)
i_angleLevel = input(6, "Angle Level", input.integer, minval = 1)
i_maSource = input(close, "MA Source", input.source)
f_angle(_src, _lookback, _atrPeriod) =>
rad2degree = 180 / 3.141592653589793238462643 //pi
ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback)
ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)
plot(ma1,color=#FF0000)
plot(ma2,color=#00FF00)
crosso=crossover(ma1,ma2)
crossu=crossunder(ma1,ma2)
_lookback = 15
f_somethingHappened(_cond, _lookback) =>
bool _crossed = false
for i = 1 to _lookback
if _cond[i]
_crossed := true
_crossed
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)
long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)
if(long)
strategy.entry("Long",strategy.long)
if(short)
strategy.entry("short",strategy.short)