SMA と EMA に基づく量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月12日 12:31:25
タグ:

img

I. 戦略の概要

この戦略は"SMAとEMAに基づく定量取引戦略"と呼ばれる.その主なアイデアは,SMA線とEMA線を異なるパラメータで組み合わせて取引信号を構築することです.

戦略の原則

  1. 閉じる価格とEMA20のSMA9,SMA50,SMA180を計算する.

  2. 閉じる価格とサポートsupとレジスタンスresの関係に基づいて購入と販売シグナルを決定します. 閉じるブレイクがsupを通過すると購入シグナルBuySignalを生成し,閉じるブレイクがresを通過すると販売シグナルSellSignalを生成します.

  3. シグナルトリガーを購入するときは,ロングポジション戦略を実行し,シグナルトリガーを売却する場合はロングポジションを閉じる.

  4. シグナルトリガーを売るときはショートポジション戦略を実行し,シグナルトリガーを購入するときはショートポジションを閉じる.

III. 利点分析

  1. 複数の移動平均値を組み合わせて取引信号を形成することで,正確性と安定性が向上します.

  2. ダイナミックなサポートとレジスタンスを計算することで 取引シグナルがより信頼性が高まります

  3. 高,中,低波動性の移動平均を採用すると,長期的傾向と短期的突破の両方を考慮し,戦略の収益性を向上させます.

  4. ロングとショートポジションの両方をサポートすることで,トレンドと横向の市場で利益を得ることができます.

IV リスク分析

  1. SMAは遅延効果があり,購入・売却の信号を遅らせ,戦略の業績に影響を与える可能性があります.

  2. ストップ・ロスのメカニズムがないので 損失は拡大する可能性があります

  3. バックテストデータ不足で,市場に応じてパラメータを調整する必要がある.

  4. 技術的な指標に頼る ブラック・スワン事件に対応できない

解決策:

  1. SMA周期を適切に調整する.
  2. 合理的なストップ損失を設定する
  3. バックテストのサンプルサイズを拡大して パラメータを調整する
  4. リスク管理のメカニズムを改善する.

V.最適化

  1. 単一の損失を制御するために,変動に基づくストップ損失を追加します.

  2. 傾向判断と信号生成を支援する機械学習モデルを追加します

  3. サポートとレジスタンスの精度を向上させるために キー価格分析を追加します

  4. より良いパラメータを見つけるために 異なるパラメータの組み合わせをテストします

VI.要約

この戦略は,SMAとEMAの技術指標を組み合わせて取引信号を構築し,完全な買い売りロジックを形成するために動的サポートとレジスタンスを計算する.利点は柔軟なパラメータ,双方向取引,異なる市場に適応できるが,遅れや不十分なストップ損失などの問題にも直面する.将来の最適化は,ストップ損失,判断トレンド,安定性と収益性を向上させるキー価格分析などの側面で行うことができる.

]


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-11 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="StrategySMA 9/50/180 | EMA 20 | BUY/SELL", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//SMA and EMA code
smaInput1 = input(9, title="SMA1")
smaInput2 = input(50, title="SMA2")
smaInput3 = input(180, title="SMA3")
emaInput1 = input(20, title="EMA1")
sma1 = sma(close, smaInput1)
sma2 = sma(close, smaInput2)
sma3 = sma(close, smaInput3)
EMA1 = ema(close, emaInput1)
plot(sma1, color= color.red , title="SMA1")
plot(sma2, color = color.blue, title="SMA2")
plot(sma3, color= color.white, title="SMA3")
plot(EMA1, color = color.yellow, title="EMA1")

no=input(3,title="BUY/SELL Swing")
Barcolor=input(false,title="BUY/SELL Bar Color")
Bgcolor=input(false,title="BUY/SELL Background Color")
res=highest(high,no)
sup=lowest(low,no)
avd=iff(close>res[1],1,iff(close<sup[1],-1,0))
avn=valuewhen(avd!=0,avd,0)
tsl=iff(avn==1,sup,res)

// Buy/sell signals
BuySignal = crossover(close, tsl)
SellSignal = crossunder(close, tsl)

// Enter long position
strategy.entry("Buy", strategy.long, when=BuySignal)

// Exit long position
strategy.exit("Sell", "Buy", when=SellSignal)

// Enter short position
strategy.entry("Sell", strategy.short, when=SellSignal)

// Exit short position
strategy.exit("Buy", "Sell", when=BuySignal)

colr = close>=tsl ? color.green : close<=tsl ? color.red : na
plot(tsl, color=colr)


もっと