移動平均クロスオーバー戦略は,移動平均クロスオーバーを取引信号として利用するトレンドフォロー戦略である. 移動平均と価格クロスオーバーと,2つの移動平均間のクロスオーバーを利益を追求するための購入・販売信号として使用する.
この戦略の主な原則は以下のとおりです.
移動平均を2つ計算します. 一つは速い,もう"つは遅い. SMAやEMAを選択できます.
スローラインを横切る時 ロープポジションです
価格ブレイクまたは移動平均クロスオーバーを取引信号として選択できます.
戦略の実行期間を設定できます
牛市ではロングで,熊市ではショートです.
移動平均のパラメータをバックテストで最適化する.
この戦略は,移動平均値のトレンドフォロー能力を利用する.短期MAが長期MAを超えると,上昇傾向を示し,長引くべきである.逆に,下落傾向はポジションを減少させるべきである.
この戦略の主な利点は:
シンプルな原則 実行が簡単 明確な取引信号
トレンドを効果的に追跡し,取引機会を間に合って把握できる.
異なる市場環境のための異なるMAパラメータを組み合わせることができる.
不確実な逆操作を避けるため,長または短だけを選択できます.
特定の期間を避けるための 戦略の実行時間を設定できます
パラメータの最適化によって 戦略を継続的に改善できます
この戦略の主なリスクは
誤った信号を受けやすいので 頻繁に取引しないでください
性能はMAパラメータに依存し,不適切な選択は損失につながる可能性があります.
遅延があるので 早期入国や遅刻出出出を避けましょう
範囲限定の市場環境には適さない
損失を完全に回避することはできません. しかし,この場合,
リスクは,量確認,パラメータ最適化,または他の指標と併用することで軽減できます.
この戦略は,次の側面で最適化できます.
傾きフィルターとして % ((ライン - ShortMa) /ShortMa) / ((ライン - LongMa) /LongMa) を追加します.
移動平均期を最適化し 異なる組み合わせをテストします
MACD や RSI のような指標を複数確認するために追加します.
ストップロスを設定して,単一の取引損失を制限します.
条件付き利用の傾向市場と範囲市場を区別する.
最適なスケジュールを見つけるために 異なる保持期間をテストします
移動平均クロスオーバー戦略は,トレンドフォロー戦略のシンプルで実用的な方法です.利点は,容易な実装と効果的なトレンド追跡です.デメリットとしては,遅滞し,誤った信号に易いです. 戦略は,パラメータ最適化と指標フィルタリングを通じて改善され,強いトレンド市場でより良いパフォーマンスを達成することができます.
/*backtest start: 2023-09-10 00:00:00 end: 2023-09-17 00:00:00 period: 10m 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/ // © gliese581d //@version=4 strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000) //SETTINGS longs_on = input(title="Long Trades enabled", defval=true) shorts_on = input(title="Short Trades enabled", defval=true) long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"]) short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"]) ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"]) ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1) ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"]) ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1) //MOVING AVERAGES ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len) ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len) //STRATEGY //trade entries long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1) start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1) end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1) end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1) in_time = true strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry) strategy.close("Long", when=longs_on and not shorts_on and short_entry) strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry) strategy.close("Short", when=shorts_on and not longs_on and long_entry) //PLOTTING //color background last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000) bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na bgcolor(color=bgcol, transp=90) plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue) plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black) plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green) plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)