
この戦略は,短期と長期の移動平均の交差に基づく簡単な移動平均の横断取引戦略である. 34周期と89周期の移動平均を使用して,早盤の時間帯でそれらの交差を買入と売却の信号として観察する. 短期移動平均が長期の移動平均を下から突破すると買入の信号が生成され,上から下から突破すると売り出する信号が生成される.
この戦略の核心的な論理は,短期および長期の移動平均線の交差を取引信号として使用することにある.具体的には,戦略は34周期および89周期の短期および長期のSMAを定義している.この2つのSMAの交差は,午前営業時間 (08:00 - 10:00) のみ観察される.短期SMAが下方から長期SMAを突破すると,市場が上昇傾向にあると考えられ,購入シグナルが生成される.短期SMAが上方から下方から長期SMAを突破すると,市場が下方傾向にあると考えられ,販売シグナルが生成される.
買ったり売ったりするシグナルを受け取った後,戦略はポジションに入り,ポジションを退出する条件を設定します.すなわち,入場後に指定された根のK線数 ((デフォルトは3根) を保有した後,積極的に止損退出します.このようにして,利益の一部をロックして,損失をさらに拡大するのを防ぐことができます.
注意すべきは,戦略は,早盤の時間帯のみで交差信号を識別していることです.これは,この時間帯で市場取引量が多く,トレンド転換信号の信頼性が高いからです.他の時間帯では,市場波動性が高く,誤った信号が生じやすいからです.
この戦略には以下の利点があります.
シンプルで一般的な移動平均の交差法を使用し,初心者向けに理解しやすい.
高品質の信号が多くある早盤時間帯でのみ信号を識別し,他の時間帯の偽信号をフィルターすることができます.
ストップ条件を設定し,時効的にストップし,利益の一部をロックし,損失のリスクを軽減します.
市場や個人のスタイルに合わせて調整できるカスタマイズ可能なパラメータ
拡張性があり,このフレームワークに基づいて他の指標と組み合わせてより複雑な戦略を設計できます.
この戦略にはいくつかのリスクがあります.
移動平均は後退性があるため,短期的な価格転換点を逃す可能性があります.
シンプルな指標のみに依存し,特定の市場環境で失効しやすい (トレンドの揺れ,区間整理など)
ストップ・ロズ・ポジションの設定が間違って不必要な損失を招く可能性があります.
パラメータ設定の不適切さ (移動平均周期,ポジション保持周期など) も戦略のパフォーマンスに影響します.
対応方法:
他の先行指標と組み合わせた短期変化に対する感受性の向上
フィルタリング条件を追加し,波動と区間市場の休業信号の影響を回避する.
ストップロジックの最適化,市場の変動率に合わせてストップ範囲の動的調整
多複合パラメータ最適化,最適パラメータ設定を探す
この戦略は,以下のように多くの点で最適化できる.
他のフィルタリング条件を追加し,波動と区間市場の休業シグナルの影響を避ける
動量指標戦略と組み合わせたより強力な突破信号を識別する
移動平均の周期パラメータを最適化して,最適なパラメータの組み合わせを探します.
市場変動に応じて自動で最適化されるストップ幅
機械学習技術を使って 戦略を自動化しようとしています
複雑な多戦略システムを設計するために,他の戦略と組み合わせる試み
この戦略は,全体的に比較的シンプルで実用的で,初心者の参考に適しています.これは,移動平均クロス型の戦略の典型的なモデルを体現し,ストップを設定してリスクを制御しています.しかし,この戦略は,さらに最適化され,その操作効果を向上させ,より多くの市場環境に適応することができます.投資家は,この基礎で創造性を発揮し,より高度な量化取引戦略を設計することができます.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("34 89 SMA Crossover Strategy", overlay=true)
// Define the length for the SMAs
short_length = input(34, title="Short SMA Length")
long_length = input(89, title="Long SMA Length")
exit_candles = input(3, title="Exit after how many candles?")
exit_at_open = input(true, title="Exit at Open?")
// Define morning session
morning_session = input("0800-1000", "Morning Session")
// Calculate SMAs
short_sma = ta.sma(close, short_length)
long_sma = ta.sma(close, long_length)
// Function to check if current time is within specified session
in_session(session) =>
session_start = na(time(timeframe.period, "0800-1000")) ? na : true
session_start
// Condition for buy signal (short SMA crosses over long SMA) within specified trading hours
buy_signal = ta.crossover(short_sma, long_sma)
// Condition for sell signal (short SMA crosses under long SMA) within specified trading hours
sell_signal = ta.crossunder(short_sma, long_sma)
// Function to exit the trade after specified number of candles
var int trade_entry_bar = na
var int trade_exit_bar = na
if (buy_signal or sell_signal)
trade_entry_bar := bar_index
if (not na(trade_entry_bar))
trade_exit_bar := trade_entry_bar + exit_candles
// Exit condition
exit_condition = (not na(trade_exit_bar) and (exit_at_open ? bar_index + 1 >= trade_exit_bar : bar_index >= trade_exit_bar))
// Execute trades
if (buy_signal)
strategy.entry("Buy", strategy.long)
if (sell_signal)
strategy.entry("Sell", strategy.short)
if (exit_condition)
strategy.close("Buy")
strategy.close("Sell")
// Plot SMAs on the chart
plot(short_sma, color=color.blue, linewidth=1)
plot(long_sma, color=color.red, linewidth=1)