双SMAクロスオーバー戦略は,異なるパラメータ設定を持つ2つのSMAラインのクロスオーバーを計算することによって取引信号を生成する.より速いSMAラインがより遅いSMAラインの上を横切ると,購入信号が生成される.より遅いSMAラインがより速いSMAラインを下を横切ると,販売信号が生成される.この戦略は,同時に2つのSMAパラメータを使用し,一つはエントリーポイントを決定し,もう一つは出口ポイントを決定する.
この戦略は2つのSMAパラメータを使用しますsmaB1
, smaB2
購入シグナル,およびsmaS1
, smaS2
売るシグナルは,それぞれ遅い移動平均値と速い移動平均値を表します.smaB1
上の十字架smaB2
購入シグナルが生成されます.smaS2
下の十字架smaS1
市場環境の変化に適応するために,入口と出口条件を柔軟に調整することができます.
具体的には,この戦略は,購入と売却のタイミングを決定するために,閉じる価格から計算された2つのSMAライン間のクロスオーバー状況を監視する.より速いSMAラインがより遅いSMAラインの上を横切ると,価格傾向が上昇していると判断される.したがって,この時点でロングに行く.そして,より遅いSMAラインがより速いSMAラインを下を横切ると,価格傾向が下がるので,ロングポジションから退出する.
この戦略の主な利点は以下の通りです.
この戦略にはいくつかのリスクもあります.
上記のリスクを制御するために,SMAパラメータの最適化,ダイナミックストップロスのような方法が戦略を改善するために使用できます.
この戦略の最適化の方向性:
SMAクロスオーバー戦略は,2つのSMAライン間のクロスオーバー状況を計算することによって,シンプルで効果的な取引信号を生成する.パラメータを調整する柔軟性により,この戦略は異なる製品に適応可能であり,一般的に使用されるトレンドフォロー戦略である.より信頼性の高い信号を生成するために,パラメータ最適化,信号フィルタリングなどを通じてこの戦略をさらに改善することができる.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © melihtuna //@version=4 strategy("SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent) smaB1 = input(title="smaB1",defval=377) smaB2 = input(title="smaB2",defval=200) smaS1 = input(title="smaS1",defval=377) smaS2 = input(title="smaS2",defval=200) smawidth = 2 plot(sma(close, smaB1), color = #EFB819, linewidth=smawidth, title='smaB1') plot(sma(close, smaB2), color = #FF23FD, linewidth=smawidth, title='smaB2') plot(sma(close, smaS1), color = #000000, linewidth=smawidth, title='smaS1') plot(sma(close, smaS2), color = #c48dba, linewidth=smawidth, title='smaS2') // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2020, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = crossover(sma(close, smaB1),sma(close, smaB2)) if (window() and longCondition) strategy.entry("BUY", strategy.long) shortCondition = crossover(sma(close, smaS2),sma(close, smaS1)) if (window() and shortCondition) strategy.entry("SELL", strategy.short)