移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-08 15:23:33
タグ:

img

この戦略は,20日移動平均値と60日移動平均値のクロスオーバーを採用し,取引信号を生成する.価格が20日MAを超えるとロングになり,価格が20日MAを下回るとポジションを閉じる.同様に,価格が60日MAを超えると取引信号を形成する.この戦略は典型的なトレンドフォローシステムに属している.

戦略の論理

  1. 20日間の単純な移動平均と60日間の単純な移動平均を計算する
  2. 閉じる価格が20日間MAを超えるとロング
  3. 閉じる価格が20日間MAを下回る場合,閉じるポジションを閉じる
  4. 閉じる価格が60日間MAを超えるとロング
  5. 閉じる価格が60日間MAを下回る場合,閉じるポジションを閉じる

上記のルールは,この戦略の取引信号とロジックを定義します.価格がMAラインを越えると,新しいトレンドが出現し,我々はロングに行くトレンドに従うことができます.価格がMAラインを下回ると,トレンドが終了していることを示します.私たちはポジションを閉じます.

利点

  1. 二重MAを採用することで,戦略はより安定します.20日間のMAは短期間の機会をより早く捉え,60日間のMAは,中長期のトレンドにおけるいくつかの市場騒音とロックをフィルターします.
  2. バックテストは2018年から開始され,戦略の有効性をよりよく反映する中国のA株市場と比較して,より発達した取引システムを持つ台湾株式市場を選択します.
  3. 適切なストップ・ロストとポジションサイズを設定し リスクを最大限に制御します

リスク

  1. この戦略は,MA指標のみを頼りにしています.市場に明らかなトレンドがない場合,より多くのウィップソーを生む可能性があります.
  2. この戦略は,購入/売却のサイズとポジションを最適化せず,資本利用を最大化することができません.
  3. 戦略は価格上昇と下落に対称的に反応し,異なる市場状況に適応することができません.

リスク対策

  1. KDJ,MACDなどの指標を追加して複数の確認を形成し,間違った取引を避ける.
  2. ポジションのサイズと資本利用効率を市場キャップ,変動などに応じて最適化する
  3. 市場段階に基づいて不対称な動きを導入し,レンジ・バインド市場での取引を削減し,明らかなトレンド中にポジションサイズを増やす.

オプティマイゼーションの方向性

  1. 買い/売りの量を最適化します.ストップロスのベースでポジションサイズを動的に調整します.
  2. ウォークフォワード最適化とランダム最適化によって より良いパラメータを見つけます
  3. ストップ・ロスの戦略を追加します.ストップ・ロスの移動またはストップ・リミット・オーダーにより利益が保護されます.
  4. ポジションサイズ管理を追加します. 資本規模,市場キャップなどに基づいて取引ごとにポジションサイズを動的に調整します.

概要

これは典型的な二重移動平均クロスオーバー戦略である. 基本アイデアは,価格がMA線を越えたときにポジションを確立することによってトレンドに従うことである. 戦略は単純で実践的な実装である. 一方,よりよい結果を達成するために,パラメータチューニング,ストップ損失,ポジションサイズ等によりさらなる最適化のための余地がある.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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 TW", overlay=true, margin_long=100, margin_short=100)
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
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)")

//進場條件
longCondition = ta.crossover(close, ta.sma(close, 20))
if (longCondition) and time >= start_time
    strategy.entry("open long20", strategy.long, qty=1, comment="站上m20做多")


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


shortCondition1 = ta.crossunder(close, ta.sma(close, 60))
if (shortCondition1) and time >= start_time
    strategy.close("open long60",comment="跌破m60平倉", qty=1)     

もっと