双重SMAクロスオーバー戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月23日 16時42分58秒
タグ:

img

概要

双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ラインを下を横切ると,価格傾向が下がるので,ロングポジションから退出する.

利点分析

この戦略の主な利点は以下の通りです.

  1. 二重移動平均クロスオーバーシステムの利用により,市場変化に適応するために,エントリーと退出基準を柔軟に調整できます.
  2. SMA線自体は,いくつかのノイズをフィルタリングし,より信頼できる取引信号を生成することができます
  3. パーソナライズ可能なSMAパラメータ組み合わせにより,異なる製品に対するパラメータ最適化が可能

リスク分析

この戦略にはいくつかのリスクもあります.

  1. SMAクロスオーバー信号は遅れて,ターニングポイントの周りにタイムリーな信号を生成できない可能性があります.
  2. SMA パラメータの不適切な選択は,誤った信号の過剰な数につながる可能性があります.
  3. 不安定な市場条件で生成される信号はうまく機能しない可能性があります

上記のリスクを制御するために,SMAパラメータの最適化,ダイナミックストップロスのような方法が戦略を改善するために使用できます.

オプティマイゼーションの方向性

この戦略の最適化の方向性:

  1. 最適なパラメータを見つけるためにより多くの SMA パラメータ組み合わせをテストします
  2. 激しい価格変動時の誤った信号を避けるためにボリューム確認を追加します.
  3. 他の指標 (MACD,RSIなど) を組み合わせて,SMAクロスオーバー信号をフィルターする.
  4. ストップ・ロスの戦略を追加して,利益を固定し,損失を減らす

概要

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)
    
    
    

もっと