2つの移動平均のブレイクアウト戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-04 16:06:46
タグ:

img

概要

ダブル・ムービング・平均ブレイクアウト戦略は,定量的な取引戦略に従う典型的なトレンドである.これは,異なる期間の単純な移動平均を計算し,価格がそれらを破ってポジションを決定するかどうかを確認することによって取引信号を生成する.この戦略は,20日および60日移動平均を取引信号として使用する.

戦略の論理

双重投資戦略の基本的な論理は異なる期間の移動平均値を利用し,価格動向を把握し,価格が移動平均を突破したときの取引信号を生成する..

この戦略では,20日間のシンプル・ムービング・平均値と60日間のシンプル・ムービング・平均値が用いられる.この2つのムービング・平均値は,それぞれ短期・中長期のトレンドを把握するためのツールとして見ることができる.短期価格が中長期価格を突破すると,市場は上昇傾向にあり,したがって長期に進むべきであることを示す.短期価格が中長期価格を下回ると,市場は下落傾向にあり,したがってポジションを削減すべきであることを示す.

このコードはta.crossoverそしてta.crossunder価格が移動平均値を下回り,または突破したかどうかを判断する.ブレイクアウトが起きたとき,ロングまたは縮小ポジションの取引信号は,それに応じて発信されます.

利点

二重移動平均のブレイクアウト戦略には以下の利点があります.

  1. 概念は単純で理解し実行するのが簡単です
  2. 市場の動向を効果的に追跡し,騒音の干渉を回避できます
  3. 戦略パラメータが少ないし 最適化が簡単です
  4. 移動平均期間の選択に柔軟性があり,市場の敏感性を調整する.

リスク

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

  1. 市場が変動しているときに 暴落する傾向があります 保持期間を増やすことで 緩和できます
  2. 市場の急速な逆転を捉えるのに効果がない.他の指標をフィルターとして追加することができます.
  3. 移動平均値は本質的に遅れているため,価格の変化を早期にシグナルすることができません. 期間を短縮することが役立ちます.

強化 分野

戦略は次の次元から強化される:

  1. 最適なパラメータセットを見つけるために移動平均期を最適化します
  2. 誤ったシグナルをフィルタリングするために他の指標を追加します.例えば,MACD,KDなど.
  3. ストップ・ロスト・ロジックを追加します
  4. 耐久性を確認するための多時間枠分析を組み込む.

概要

ダブル移動平均ブレイクアウト戦略は,シンプルで実践的なトレンドフォロー戦略である.短期間の市場騒音を避ける一方で,中長期のトレンドを効果的に把握することができる.また,理解しやすい論理と限られたパラメータにより,定量的な取引に非常に適している.もちろん,パラメータチューニング,シグナルフィルタリング,ストップロスのような改善余地があり,より安定して利益を得ることができます.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 4h
basePeriod: 15m
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/
// © Astorhsu

//@version=5
strategy("Astor SMA20/60", overlay=true)
backtest_year = input(2018, title='backtest_year') //回測開始年分
backtest_month = input.int(01, title='backtest_month', minval=1, maxval=12) //回測開始月份
backtest_day = input.int(01, title='backtest_day', minval=1, maxval=31)  //回測開始日期
start_time = timestamp(backtest_year, backtest_month, backtest_day, 00, 00)  //回測開始的時間函數

//Indicators
sma10 = ta.sma(close,10)
sma20 = ta.sma(close,20)
sma60 = ta.sma(close,60)
plot(sma20, color=color.green, title="sma(20)")
plot(sma60, color=color.red, title="sma(60)")

//進場條件
// trend1 = sma60 > sma20 //假設目前趨勢為60>20
longCondition = ta.crossover(close, ta.sma(close, 20))
if (longCondition) 
    strategy.entry("open long20", strategy.long, qty=1, comment="站上m20做多")


shortCondition = ta.crossunder(close, ta.sma(close, 20))
if (shortCondition) 
    strategy.close("open long20",comment="跌破m20平倉", qty=1)     
    
longCondition1 = ta.crossover(close, ta.sma(close, 60))
if (longCondition1) 
    strategy.entry("open long60", strategy.long, qty=1, comment="站上m60做多")


shortCondition1 = ta.crossunder(close, ta.sma(close, 60))
if (shortCondition1) 
    strategy.close("open long60",comment="跌破m60平倉", qty=1)     
    
// longCondition2 = ta.crossover(close, ta.sma(close, 10))
// if (longCondition2) 
//     strategy.entry("open long10", strategy.long, qty=1, comment="站上m10做多")


// shortCondition2 = ta.crossunder(close, ta.sma(close, 10))
// if (shortCondition2)
//     strategy.close("open long10",comment="跌破m10平倉", qty=1)   


もっと