
この戦略は,2つの移動平均を使用し,それぞれ8周期および21周期の移動平均を使用する. 短期移動平均の上に長期移動平均を着るときは,多めに; 短期移動平均の下に長期移動平均を着るときは,空いてください.
この戦略はまた,トレンドのない区間をフィルターするために,移動平均の斜率指標を導入し,トレンドが顕著であるときにのみ取引シグナルを生成します.
この戦略の核心は,短期移動平均と長期移動平均の交差である.短期移動平均は,価格変化のトレンドをより迅速に捕捉し,長期移動平均は,ノイズに対するよりよいフィルタリング効果を有する.短線上の長線を横断すると,多頭トレンドが形成され,多利得を行う.短線下の長線を横断すると,空頭トレンドが形成され,空頭トレンドが形成され,空頭トレンドを行う.
この戦略はまた,斜率の値を設定している.斜率が正の値より大きい場合にのみ多多信号が生成され,斜率が負の値より小さい場合にのみ空の信号が生成される.これは,明らかな傾向がないいくつかの区間をフィルターして,取引信号の質を高めることができる.
具体的には,この戦略の取引シグナル生成の論理は次のとおりです.
この戦略の利点は以下の通りです.
この戦略にはいくつかのリスクがあります.
これらのリスクに対して,以下のように最適化できます.
この戦略は,以下の方向で最適化できます.
この双動平均戦略は,全体的にシンプルで実用的で,2周期のパラメータをdiffsで捉え,異なるトレンド特性を融合させ,取引信号を生成する.同時に,斜率の値を導入することで信号の質が向上する.この戦略は,基本戦略として拡張され,大きな最適化スペースと拡張能力がある.
/*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)