ダブル・ムービング・平均ブレイクアウト戦略は,定量的な取引戦略に従う典型的なトレンドである.これは,異なる期間の単純な移動平均を計算し,価格がそれらを破ってポジションを決定するかどうかを確認することによって取引信号を生成する.この戦略は,20日および60日移動平均を取引信号として使用する.
双重投資戦略の基本的な論理は異なる期間の移動平均値を利用し,価格動向を把握し,価格が移動平均を突破したときの取引信号を生成する..
この戦略では,20日間のシンプル・ムービング・平均値と60日間のシンプル・ムービング・平均値が用いられる.この2つのムービング・平均値は,それぞれ短期・中長期のトレンドを把握するためのツールとして見ることができる.短期価格が中長期価格を突破すると,市場は上昇傾向にあり,したがって長期に進むべきであることを示す.短期価格が中長期価格を下回ると,市場は下落傾向にあり,したがってポジションを削減すべきであることを示す.
このコードはta.crossover
そしてta.crossunder
価格が移動平均値を下回り,または突破したかどうかを判断する.ブレイクアウトが起きたとき,ロングまたは縮小ポジションの取引信号は,それに応じて発信されます.
二重移動平均のブレイクアウト戦略には以下の利点があります.
この戦略にはいくつかのリスクもあります:
戦略は次の次元から強化される:
ダブル移動平均ブレイクアウト戦略は,シンプルで実践的なトレンドフォロー戦略である.短期間の市場騒音を避ける一方で,中長期のトレンドを効果的に把握することができる.また,理解しやすい論理と限られたパラメータにより,定量的な取引に非常に適している.もちろん,パラメータチューニング,シグナルフィルタリング,ストップロスのような改善余地があり,より安定して利益を得ることができます.
/*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)