双移動平均戦略は,一般的に使用される短期取引戦略である.異なる期間の移動平均を計算して市場傾向の方向性を判断し,それを取引に入るために使用する.短い期間の移動平均が長い期間の移動平均を超えると,ロングに行く.短い期間の移動平均が長い期間の移動平均を下回ると,ショートに行く.
この戦略の基本的な論理は
異なる期間の移動平均を2つ計算する.一つは長期期間のMA,もう一つは短期期間のMAです.ここでは開盤価格と閉盤価格のMAを使用します.
短期間MAが長期間MAを横切ったかどうかを判断します.短期間MAが長期間MAを横切ると,それは市場の上昇傾向を示し,我々は長行することができます.短期間MAが長期間MAを下回ると,それは下落傾向を示し,我々は短行することができます.
トレンド方向に従って取引をします.特に,短期間MAが長期間MAを超えると,ロングします.短期間MAが長期間MAを下回ると,ショートします.
ストップ・ロスを設定し 利益を取ります 実際の市場状況に基づいて
この戦略は,短期間の動きを把握するために,短期間のトレンドと長期間のトレンドの関係を決定するために,MAのトレンド判断能力を利用する.論理は単純で明確で,トレンド継続と逆転の間のリズムシフトを判断するためにMAクロスを使用し,それに基づいて取引する.
双重MA戦略には以下の利点があります.
論理はシンプルで 分かりやすく 実行できます
明確な入国・退出基準があります
市場環境に合わせて MA 期間を調整できる.
傾向と平均逆転の両方を把握し 中期変動から利益を得ることができます
リスクをコントロールするためにストップ・ロスの論理があります
また,二重MA戦略にはいくつかのリスクがあります.
ストップ・ロスは,レンジ・バインド市場では頻繁に行われる.
変動する市場ではMA信号が頻繁すぎるため,ポジションを保持するのは困難です.
短期的な逆転の機会を逃す可能性があります.
戦略の有効化のために,MA期間を最適化する必要があります.
MAの交差点には 遅延があるので 入力が遅れる
この戦略を改善する方法:
バックテストによって,異なる市場条件に適した MA 期間を最適化します.
他の指標をフィルターとして追加することで,変動市場での変動を回避できます.MACD,KDは検討できます.
明確なトレンドがないときに取引を避けるためにトレンド強度指標を追加します. EMAおよび類似の指標をテストします.
ギャップの方向を判断するには 音量指標を考慮してください
主要なサポート/レジスタンスの近くでストップロスを最適化します.
ダブルMA戦略は,トレンドを決定するためのMAクロスに基づいた簡単な短期戦略である.利点はシンプルさと使いやすさである.デメリットとは,市場範囲によって切り替えられ,遅延があることである.パラメータチューニング,フィルターを追加などにより最適化して,複雑な市場環境のためにより堅牢にする.
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("GetTrendStrategy timing", overlay=true) tim=input('370') ////////////////////////////////////////////////////////////////////// // Component Code Start testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(10, "Backtest Start Month") testStartDay = input(25, "Backtest Start Day") testStartHour = input(7, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2017, "Backtest Stop Year") testStopMonth = input(10, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testStopHour = input(13, "Backtest stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStartHour,0) testPeriod() => true // Component Code Stop ////////////////////////////////////////////////////////////////////// out1 = request.security(syminfo.tickerid, tim, open) out2 = request.security(syminfo.tickerid, tim, close) plot(out1,color=red) plot(out2,color=green) longCondition = crossover(request.security(syminfo.tickerid, tim, close),request.security(syminfo.tickerid, tim, open)) if testPeriod() if (longCondition) strategy.entry("long", strategy.long) shortCondition = crossunder(request.security(syminfo.tickerid, tim, close),request.security(syminfo.tickerid, tim, open)) if testPeriod() if (shortCondition) strategy.entry("short", strategy.short)