移動平均クロスオーバーに基づく定量取引戦略


作成日: 2024-01-23 11:05:50 最終変更日: 2024-01-23 11:05:50
コピー: 0 クリック数: 505
1
フォロー
1617
フォロワー

移動平均クロスオーバーに基づく定量取引戦略

概要

この策略は,単純移動平均 ((SMA)) の金叉死叉原理を利用して構築されている. 策略は,3日線と5日線の金叉を入場信号として,止損または停止を退出信号として使用している.

戦略原則

この戦略は主に2つのSMA,すなわち3日線と5日線に基づいています。その中,3日線は短期トレンドを表し,5日線はより長い中期トレンドを表しています。短期急上昇,すなわち3日線が5日線を横切るときは,現在上昇傾向にあることを代表し,この時点で入場を多めにします;逆に,短期急落,すなわち3日線が5日線を下に横切るときは,現在下落傾向にあることを代表し,この時点で入場を空っぽにします。このようにして,短期と中期の2つの周期の価格変化を捉えることで,入場成功率を向上させることができます。

優位分析

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

  1. 戦略の論理はシンプルで明快で,理解し,実行しやすい.
  2. 平均線交差戦略は,市場の大規模なトレンドの判断に比較して正確であり,入場確率が高い.
  3. 平均線を2つの異なる周期で選んで,市場の変化を把握できます.
  4. ストップ・ストップ・損失の仕組みが実装され,損失を効果的に制御する.

リスク分析

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

  1. 平均線周期が短いため,市場の短期的な波動に敏感であり,ストップ・ロスの確率を高めることが考えられます.
  2. 戦略は機械化されていて,特殊な市場状況に適応できない.
  3. 大周期のトレンド判断を考慮しないことで,長期にわたる市場の下落で戦略は大きな損失を被るだろう.

リスクを軽減するために,入場平均線選択を最適化するか,または長期周期平均線の補助判断を追加することを考えることができます.同時に,ストップ・ストップ・ロスのポイント位置を調整して,実際の市場状況に適したものにすることもできます.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 平均線を異なる周期で増やし,多層のフィルタリングを作り,戦略の安定性を高めます.
  2. 他の技術指標の判断,例えばMACD,強弱指標など,補助入場に加入する.
  3. 長期にわたる下落の状況で,まだ入場を余裕なくするために,大周期的な傾向への判断に加入してください.
  4. ストップ・ストップ・損失のポイントを最適化して,市場の実際の波動に適した位置にします.
  5. テストはより長い反測周期で,パラメータの安定性を評価する.

要約する

この戦略は均線交差原理に基づいて構築され,金叉入場,止損止損出場の戦略論理を採用し,簡単に実施し,反測パフォーマンスは比較的安定している.より多くの補助技術指標,最適化パラメータ,および反測範囲の拡大などの措置を加えることで,戦略の安定性と収益性のレベルをさらに向上させることができる.全体的に,均線戦略は市場への良好な適応性を有しており,さらなる研究と応用に値する.

ストラテジーソースコード
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 5h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Revolut v1.0", overlay=true)

// === GENERAL INPUTS ===
ATR = atr(3)
ema3 = ema(close, 3)
ema5 = ema(close, 5)

// === 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 = 2018, 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)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true// create function "within window of time"


// === PLOTTING ===
plot(ema3, title="Ema 3", color = white, linewidth = 2, transp=0)
plot(ema5, title="Ema 5", color = aqua, linewidth = 2, transp=0)



// === ENTRY POSITION LOGIC ===
entryCondition = crossover(ema(close, 3), ema(close, 5))
if (entryCondition)
    strategy.entry("ENTRY", strategy.long, when=window())
    

// === EXIT POSTION LOGIC ===
//strategy.exit("Take Profit", "ENTRY", profit=6, loss=5, when=window())
strategy.exit("Take Profi Or STOP", "ENTRY", profit = 6, loss = 5, when=window())
  

// #####################################
// We can start to incorperate this into the script later
// We can program a emergency exit price
//strategy.close_all()

// You can use this if you want another exit
//strategy.exit("2nd Exit", "ENTRY", profit=1500, stop=500, when=window())