この戦略は,異なるタイムフレームを持つ2つの移動平均値の違いに基づいて取引シグナルを生成する.より速いSMAとより遅いSMAを計算し,速いSMAが下からゆっくりとしたSMAを横切ると購入シグナルを生成し,速いSMAが上からゆっくりとしたSMAを下に横切ると販売シグナルを生成する.
この戦略の基本論理は,SMA (len1) と SMA (len2) の2つの移動平均を計算し,その差をdifとする.ここで len1はより速いMAの期間を表現し, len2はより遅いMAを表します.より速いMAは価格変化により迅速に対応し,より遅いMAは長期的なトレンドをよりよく反映します.
より速いMAがより遅いMAを下から越えると,短期価格が長期トレンドより上昇し始めていることを示し,したがってロングエントリができます. より速いMAがより遅いMAを上から越えると,短期価格がトレンドを下回り始めていることを示し,ショートポジションを入れることができます.
誤った信号をフィルタリングするために,この戦略は,より速いMAと価格の真ん中の間を平らした差である,トレードシグナルラインとしてout3も使用します. out3が difを横切ったときのみ,トレードが起動されます.
具体的には,out3がdifを超えるとポジティブな値が保持され,買い信号が発信される.out3がdifを超えると負の値が発信され,売り信号が発生する.long信号が発生するとlong.entryが入力され,short信号が出るとlongが閉じます.
これは,トレンドをフォローするための非常にシンプルで直感的な戦略です. 異なる期間の2つのMAのクロスオーバーを使用して,単一のMAシステムよりも信頼性のあるトレンド逆転点を特定します. 取引シグナルラインのフィルタはまた,不安定な市場で誤ったシグナルを一定程度避けるのに役立ちます.
ストップ・ロストとは対照的に,トレンドが逆転するときにタイミングでポジションを閉じることで損失を制御する.
この戦略はパラメータが少ないし,理解し調整しやすいので,初心者のアルゴ取引戦略として適しています.
この戦略の最大のリスクは,間違った選択されたMA期間で,悪いシグナルが生じる. len1が長すぎると,初期のトレンド動きが見逃され,短すぎると,ウィップソーが増加する. len2が長すぎると,ポジション調整が遅くなる.短すぎると,市場の騒音によって混乱する可能性があります.
パラメータは,最適な組み合わせを見つけるために異なるlen1とlen2値を試して最適化することができる.適応型MAは,周期を動的に変更するためにテストすることもできる.フィルターは,誤った信号をさらに減らすために改善することもできる.
トレンドフォローする戦略は,ストップ・ロースやポジションサイジングを通じて,シングル・トレードでの損失を制御する.
ダブルMAクロスオーバー戦略は,代表的なトレンドをフォローする典型的トレンドです. シンプルなダブルMAクロスオーバーシステムは安定した信号を提供し,フィルターはノイズを避けるのに役立ちます. 最適化されたMA期間により,良いパフォーマンスを達成できます. この戦略は,学習するための初心者のアルゴ取引戦略として役立ちます.
/*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)