単純移動平均に基づく定量取引戦略


作成日: 2023-12-22 13:28:01 最終変更日: 2023-12-22 13:28:01
コピー: 0 クリック数: 768
1
フォロー
1623
フォロワー

単純移動平均に基づく定量取引戦略

概要

移動平均クロスオーバー戦略 (Moving Average Crossover Strategy) は,シンプル・ムービング・アベアードに基づく量的な取引戦略である.この戦略は,異なる周期のシンプル・ムービング・アベアードを計算することによって,それらの交差時に買入と売却のシグナルを生成する.

具体的には,この戦略は,9日線と45日線の単純な移動平均を計算する. 9日線と45日線を上から通過すると,買入シグナルが生じ, 9日線と45日線を下から通過すると,売り込みシグナルが生じます.

戦略原則

この戦略の核心的な論理は,移動平均の金叉死叉原理に基づいています.移動平均は,市場騒音を効果的にフィルターし,大トレンドの変化を示すことができます.短期平均の上部に長期平均を突破すると,価格が上昇傾向に入ることを示し,短期平均の下部に長期平均を突破すると,価格が下部傾向に入ることを示します.

具体的には,この戦略は,9日線と45日線の単純な移動平均を採用している。9日線は短期トレンドを表し,45日線は長期トレンドを表している。価格が9日線と45日線を横切るとき,株価が短期と長期の両方で上昇チャネルにあることを示すため,買取シグナルを生成する;価格が9日線と45日線を横切るとき,株価の上昇傾向が徐々に弱まることを示すため,販売シグナルを生成する。

コードロジック的に見ると,この戦略はまず9日線と45日線の単純移動平均を計算し,その後ta.crossoverとta.crossunderの関数によって均線の金叉と死叉を判断する.購入と売却のシグナルを生成する際に,plotshapeの関数を使用してK線図に三角形と反転三角形のシグナルグラフを描く.

さらに,この戦略は,長ポジションと短ポジションのストップ・ロジックも設定している.具体的には,ポジション開設後,前Kラインの最高価格と最低価格をストップ・ロジック価格として抽出する.これは,利益をロックし,過大損失を回避する.

優位分析

  • 双均線設定を使用することで,中長期のトレンドの変化を捉え,短期市場の騒音の影響を受けないようにし,信号品質を向上させる.
  • ストップ・ロスの戦略と組み合わせると,リスクを効果的にコントロールし,利益をロックできます.
  • 戦略の論理は単純で理解しやすく,実行しやすい.
  • 資金活用率が高いので,十分な収益を上げることができます.

リスク分析

  • 双対対策は,死叉連鎖のスラスト信号を生じやすく,無効取引が多すぎることにつながる可能性がある.
  • ストップ・ロスの設定は保守的であり,トレンドを継続的に追跡することができません.
  • パラメータの不適切な選択は,取引頻度が高すぎたり低すぎたりする可能性があります.
  • 状況が逆転する状況に適応できない.

対策として

  1. 平均線パラメータを最適化し,非効率的な取引率を下げる
  2. ストップ・ロジックを最適化し,トレンド・トラッキング・ストップを採用
  3. 他の指標と組み合わせたフィルター信号
  4. 人工的介入により,大災害の逆転を防ぐ

最適化の方向

この戦略はさらに改善できる余地があります.

  1. 適応移動平均または指数移動平均を使用することで,トレンドの変化をよりよく捉えることができます.

  2. 波動率指数などのフィルタリング信号を増やして,震動状況で誤信号を生じさせないようにする.

  3. パラメータ最適化方法を使用して,最適なパラメータ組み合わせを探します.

  4. ストップ・ロジックにトレンド・トラッキング・メカニズムを加えることで,ストップ・ラインが価格を柔軟に追跡できるようにする.

  5. 大規模なサポート・レジスタンスに対する判断を高め,重要な価格領域で誤信号を避ける.

  6. 機械学習モデルの組み合わせにより,信号の質をさらにフィルタリングします.

要約する

均線交差策略は,シンプルで実用的なトレンド追跡策略である.それは,価格の中長期トレンドの変化を効果的にフィルターし,捕捉することができる.適切なストップロストロジックと組み合わせた後,リスクを制御した基礎でトレンド取引を行うことができる.この戦略のロジックは,簡単に実行し,量子取引の初心者にとって適しています.さらに最適化および改善することにより,この戦略は,量子取引システムの有効な構成要素になることができます.

ストラテジーソースコード
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SMA Crossover Strategy", overlay=true)

// Input parameters
fast_length = input(9, title="Fast SMA Length")
slow_length = input(45, title="Slow SMA Length")

// Calculate moving averages
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)

// Buy condition
buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma)

// Sell condition
sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma)

// Calculate stop loss levels
prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on)
prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on)

// Plot signals on the chart
plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Strategy exit conditions
long_stop_loss = sell_condition ? prev_low : na
short_stop_loss = buy_condition ? prev_high : na

strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss)
strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss)

strategy.entry("Long", strategy.long, when=buy_condition)
strategy.entry("Short", strategy.short, when=sell_condition)