二重移動平均差取引戦略


作成日: 2023-10-17 13:54:05 最終変更日: 2023-10-17 13:54:05
コピー: 0 クリック数: 706
1
フォロー
1617
フォロワー

二重移動平均差取引戦略

概要

この戦略は,双均線の移動平均差値に基づいて取引シグナルを生成する.それは,高速周期と遅い周期の2つの均線を計算し,高速線が下方向から遅い線を突破すると,買入シグナルを生成し,高速線が上方向から下方向から遅い線を突破すると,売り出シグナルを生成する.

元の解釈

この戦略の核心的な論理は,2つの移動平均SMA (len1) とSMA (len2) を計算し,それらの差値difを計算することです. len1は短期平均線周期を表し,len2は長期平均線周期を表します.短期平均線は価格の変化により迅速に反応し,長期平均線は長期の傾向を反映します.

短期平均線が下から長期平均線を穿越すると,短期価格が長期傾向より上昇し始めたことを示す,買えます.上から下から長期平均線を穿越すると,短期価格が長期傾向より下落し始めたことを示す,売ることができます.

誤操作をフィルターするために,戦略はまた,取引信号ラインとしてout3を導入する。out3は,短期平均線と価格の中央値の差値smaの平滑処理後の結果である。out3がdifを横切るときのみ取引信号が生じる。

具体的には,long変数はout3がdifを上方へ突破すると正値で買取信号;short変数はout3がdifを下方へ突破すると負値で売出信号。strategy.entryはlong信号に基づいて買取注文を生じ,strategy.closeはshort信号に基づいて売出平仓注文を生じ。

優位分析

これは非常にシンプルで直感的なトレンド追跡戦略である.これは,双均線周期が異なる均線交差を生む方法を使用して,トレンド転換点を捕捉し,単均線システムよりも信頼性が高くなります.そして,取引信号線のフィルタリングを導入することで,波動市場で発生する偽信号を一定程度に防ぐことができます.

移動ストップなどの方法とは異なり,トレンドフォローの理念を採用し,最大限の利益を得ることができ,トレンドが長くなったときにストップロスが出場されない.同時に,損失を制御し,トレンドが逆転したときに適時に平仓する.

この戦略はパラメータが少なく,簡単に習得し,調整でき,初心者向けのアルゴリズム取引の入門戦略として適しています.

リスクと改善

この戦略の最大のリスクは,二重平均線の周期パラメータが不適切で取引信号の誤りである.短期平均線周期len1が長すぎると,トレンドの開始段階のチャンスを逃す.短すぎると,偽信号の確率を増やす.長期平均線len2が長すぎると,ポジション調整を遅らせ,短すぎると,市場振動に容易に干渉される.

len1とlen2のパラメータを調整することで最適の組み合わせを得ることができる.また,自適応均線を導入して動的に調整周期を試みることができる.さらに,フィルターパラメータを最適化することで偽信号を減らすことができる.

トレンド追跡戦略は,単一の損失の大きさを制御することにも注意する必要があります. ストップ・ロスを設定したり,ポジション管理を導入して最適化することもできます.

要約する

双均線差策は,非常に典型的なトレンド追跡策の代表である。その単純な双均線交差システムは,安定した信号源をもたらし,フィルターと組み合わせることで,市場揺れによる干渉を効果的に回避することができる。均線周期パラメータを最適化することで,優れた策のパフォーマンスを得ることができる。この策は,アルゴリズム取引の入門策として学ぶのに非常に適している。

ストラテジーソースコード
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//by afrazium
//@version=3
strategy(title="SMA Diff strat", shorttitle="SMAD STR", overlay=false, initial_capital=1, precision=8, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, calc_on_order_fills= false, calc_on_every_tick=false, pyramiding=0)
len1 = input(50, minval=1, title="Length1"), len2 = input(100, minval=1, title="Length2"), smo = input(1, minval=1, title="Smoothing")
src = input(ohlc4, title="Source")

mid = src
expr1 = sma(src, len1), expr2 = sma(src, len2)
dif = (expr1 - expr2), out1 = (mid - expr1), out2 = (mid - expr2), out3 = sma(out1, smo)

long = crossover(out3, dif) ? out3 : na, short = crossunder(out3, dif) ? out3 : na

plot(out3, color=black, linewidth=2), hline(0)
clr = out2 >= out1 ? lime : red, plot(dif, color=clr, linewidth=2)
plot(long, title = 'Crossover', color = green, style = circles, linewidth=4), plot(short, title = 'Crossunder', color = red, style = circles, linewidth=4)

strategy.entry("buy", strategy.long, when=crossover(out1, dif))
strategy.close("buy", when=crossunder(out1, dif))

//plot(out2, color=blue, linewidth=2)
//A = plot(mid/10, color=red, linewidth=1, transp=100), B = plot(mid/20, color=red, linewidth=1, transp=100)
//C = plot(-mid/10, color=green, linewidth=1, transp=100), D = plot(-mid/20, color=green, linewidth=1, transp=100)
//fill(A, B, color=red), fill(C, D, color=green)