クロスオーバーブレイクアウト戦略


作成日: 2023-10-12 16:47:55 最終変更日: 2023-10-12 16:47:55
コピー: 0 クリック数: 584
1
フォロー
1617
フォロワー

概要

移動平均線交差戦略は,非常に一般的な定量取引戦略である. この戦略は,移動平均線の金叉死叉を使用して,トレンドを判断して利益を得る. 短期移動平均線を長期移動平均線を越えるときは,株価が上昇し始めることを示す,より多くのことができる; 短期移動平均線を長期移動平均線を下に穿えるときは,株価が低下し始めることを示す,空っぽにする.

戦略原則

この戦略は,移動均線による金叉死叉を基に,買入と売却のタイミングを判断する. コードで使用upOrDownそしてlongOrShort2つのブル型入力パラメータで,多空を判断する.percentInput入力パラメータは,株価の変化の減值率を設定します.closePositionDaysポジション保有日数を設定するパラメータを入力します.

策略の核心的な論理は,今日の値が昨日の値に比べて計算され,入力された値のパーセントに達した場合,取引信号を発信する.もし看板であれば,今日の値が昨日の値を超えたとき,多額の取引を行う.もし値であるならば,今日の値が昨日の値を超えたとき,空白を行う.

余分な空白をした後,その日とその後の4日間を図面に異なる色でマークする. 4日後に自動平仓する.

戦略的優位性

  • 移動均線金叉は,市場動向を判断する成熟した方法である.
  • 戦略の論理はシンプルで明快で,実行は簡単です.
  • パラメータを調整することで 戦略の頻度を制御できます
  • 自動ストップメカニズムは リスクを効果的にコントロールできます

戦略リスク

  • 移動平均線は遅滞性があり,価格の急速な変化のタイミングを逃す可能性があります.
  • 株価の急激な波動が短期間に起こり,不必要な交差信号を引き起こす可能性があります.
  • パラメーターセットのパラメータを正しく設定しない場合も, 策略の効果に影響を与えます.
  • 緊急事態への対応が不可能な状況

リスク管理措置:

  1. 移動平均線パラメータを最適化し,適切な延長周期で騒音をフィルタリングする
  2. 株価変動減価率を高め,不必要な取引を減らす
  3. ポジションを1日1回でコントロールする
  4. 他の指標と組み合わせたトレンド信号のさらなる確認

戦略最適化の方向性

  • 移動平均線をEMA,DMAなどの指数移動平均線に変更して,価格変化により敏感にすることを検討することができる
  • 平均線を突破したときに即座に止まるような止損メカニズムを増やす
  • MACD,KDJなどの他の技術指標を組み合わせることで,戦略の勝利率を向上させる
  • 機械学習の方法を試してパラメータを自動的に最適化できます
  • エントリとエグジットのタイミングを最適化します.

要約する

移動均線交差策は,非常にシンプルで実用的な量化取引策である.短期的および長期的傾向の関係を判断し,株価の傾向性を利用して利益を得る.この戦略は,実行しやすい,論理的に明確で,多くの量化取引策の基礎である.パラメータを調整し,最適化することで,より良い戦略効果を得ることができる.しかし,我々はまた,リスクを制御し,その思想を歪曲し,盲目的に使用することを防ぐために注意する必要があります.

ストラテジーソースコード
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//  Created by Leon Ross

strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, 
  pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, 
  calc_on_every_tick=true, initial_capital=100000)
  
//Inputs
longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false
upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day
percentInput = input(title="Percent", type=float, defval=4.5)
closePositionDays = input(title="How Many Days to Close Position", defval=4)

//Conditions
//percentUpValue = (close / close[1]) - 1
//percentUp = percentUpValue >= (percentInput/100.0)
//upConditions = percentUp
//percentDownValue = 1- (close / close[1])
//percentDown = percentDownValue >= (percentInput/100.0)
//downConditions = percentDown
upValue = (close / close[1]) - 1
downValue = 1 - (close / close[1])
allConditions = if(upOrDown)
    upValue >= (percentInput/100.0)
else
    downValue >= (percentInput/100.0)
    
//Plots
bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70)
bgcolor(allConditions ? silver : na, transp=70, offset=1)
bgcolor(allConditions ? silver : na, transp=70, offset=2)
bgcolor(allConditions ? silver : na, transp=70, offset=3)
bgcolor(allConditions ? silver : na, transp=70, offset=4)
//bgcolor(downConditions == 1 ? red : na, transp=70)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4)

//Entires
if(longOrShort)
    strategy.entry(id = "Long", long = true, when = allConditions) 
else
    strategy.entry(id = "Short", long = false, when = allConditions)

//Exits
if (barssince(allConditions) == closePositionDays)
    if(longOrShort)
        strategy.close("Long")
    else
        strategy.close("Short")