多要素モメンタム・ローテーション戦略

作者: リン・ハーンチャオチャン開催日:2023年10月25日 11:52:19
タグ:

img

概要

この戦略は,RSI,MACD,ボリンジャーバンド,上下要素を組み合わせ,多要素モメンタムローテーション取引を実装する.この戦略は,複数の技術指標が同時に購入または販売信号を与えるかどうかを判断する.そうであれば,対応する購入または販売オペレーションが実行される.一方,戦略は,利益とリスクを制御するために移動停止利益と停止損失を採用する.

戦略の論理

この戦略の主な構成要素は以下の通りである.

  1. 要因判断

    • RSI: 14 期間の RSI を計算し,購入ラインより低く,販売ラインより高く判断します.
    • TD シーケンス: 値上げ/値下げ日数を計算し,購入/売却条件を満たしているかどうかを判断する
    • MACD: MACDとMACDヒストグラムを計算し,買い/売る条件を判断する
    • ボリンジャー帯: 20期 BB を計算し,価格が BB の上位または下位帯に触れるかどうかを判断します
  2. 入国・出国

    • 買い条件:RSI,MACD,TD シーケンスで買い信号を同時に与えます
    • 売り条件:RSI,MACD,TDシーケンスで売り信号を一緒に出す
    • ストップ・プロフィット: 固定ポイントまたはパーセントをストップ・プロフィットとして使用する
    • ストップ損失:ストップ損失の最大許容損失点を設定する.
  3. 戦略の最適化

    • RSI パラメータを調整する: RSI 期間パラメータを最適化する
    • MA 期間を調整する: 移動平均の期間パラメータを最適化する
    • 入力条件を調整: 入力信号を追加または減少
    • 他の要素を追加する: より多くの技術指標と統計的要素を組み込む

利点分析

  • 複数の要因が入力精度を向上させる

    この戦略は,単一の指標ではなく,RSIとMACDのような複数の要因を考慮します.これは誤った信号を軽減し,エントリー精度を向上させます.

  • 動向特性は傾向を捉える

    RSIやMACDのような指標は,価格傾向の変化を把握する明らかなモメンタム特性を有し,MAsのような傾向を追う指標よりもより敏感である.

  • ストップ・プロフィット/損失メカニズムはリスクを制御する

    ストップ・プロフィートの移動は,市場を動的にフォローして利益をロックすることができます.ストップ・ロスの設定は,単一の取引損失を制御します.

  • シンプルで明確な論理

    戦略は共通の技術指標を組み合わせ,ある程度の普遍性を持ち,その規則は比較的単純で明確です.

リスク分析

  • 牛市での不良業績

    この戦略は平均逆転取引に焦点を当てています. これは牛市で頻繁にストップロスを引き起こす可能性があります.

  • 取引頻度が高すぎること

    パラメータが過度に敏感に設定された場合,取引頻度は過度に高くなり,コストとスライプが増加する可能性があります.

  • 指標間の差異リスク

    戦略は指標の間で一貫した信号に依存しますが,時には差異が起こり,誤った信号が生じる可能性があります.

  • ストップ損失を突破する

    固定ストップ・ロスのポイントが突入できる.ダイナミックストップ・ロスのポイントやストック変更がこのリスクを回避するのに役立ちます.

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

  • 取引頻度を減らすためにパラメータを最適化

    RSI パラメータと MA 期間をテストして,取引頻度が低い組み合わせを見つけます.

  • 効率を高めるために統計的要素を追加する

    パラメータを設定し効率を向上させるため 変動や流動性などの 株式特有の統計を組み込むことです

  • VIX のような市場レベルの指標を組み合わせる

    VIXのような市場パニック指標に基づいて 戦略パラメータを調整し 市場全体のクラッシュ時に 取引頻度を減らす

  • 異なる保持期間をテストする

    長期保有と短期回転をテストして 戦略の業績に与える影響を調べる

  • ストップ・プロフィート/損失を最適化しテストする

    より高度なダイナミックストップ・プロフィット/ロスト・テクニックを研究し バックテストします

概要

この戦略は,複数の技術指標を組み合わせ,利益をロックし,リスクを制御するために移動停止/損失を採用し,高いエントリー精度を保証する.論理は単純で明確である.パラメータ最適化と指標選択を通じてパフォーマンスをさらに向上させることができます.しかし,戦略は平均逆転とレンジバインド市場により適しています.持続的な上昇傾向では劣化することがあります.要するに,これは典型的な多因子平均逆転モメント戦略で,株式回転取引のアイデアと参照を提供します.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("RSI, TD Seq, MACD, BB Strategy - Calculation Trailing Profit",overlay=true)


RSIDifference = input(-7, minval=-50, maxval=50, title="RSI Difference") 


TD = close > close[4] ?nz(TD[1])+1:0
TS = close < close[4] ?nz(TS[1])+1:0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
TDcheckUP = iff(TD == 2, true, false)
TDCheckDOWN = iff(TS == 2, true, false)

[_, _, histLine] = macd(close, 12, 26, 9)
MACDCheckDown = iff(histLine > 0 and histLine[1] > 0 and histLine[2] > 0 and histLine[3] > 0  and histLine[4] > 0, true, false)
MACDCheckUp = iff(histLine < 0 and histLine[1] < 0 and histLine[2] < 0 and histLine[3] < 0 and histLine[4] < 0, true, false)

RSICal = rsi(close, 14)
RSICalNewUp = 50 + RSIDifference
RSICalNewDown = 50 - RSIDifference
RSICheckUp = iff(RSICal <= RSICalNewUp, true, false)
RSICheckDown = iff(RSICal >= RSICalNewDown, true, false)

basis = sma(close, 20)
dev = 2 * stdev(close, 20)
upperBB = basis + dev
lowerBB = basis - dev
BBCheckUp = iff(close > upperBB, true, false)
BBCheckDown = iff(close < lowerBB, true, false)
//BBCheckUp = false
//BBCheckDown = false


BuyCheck = iff(TDcheckUP == true and MACDCheckUp == true and RSICheckUp == true and BBCheckUp == false, true, false)
SellCheck = iff(TDCheckDOWN == true and MACDCheckDown == true and RSICheckDown == true and BBCheckDown == false, true, false)


ProfitStratA = input(50, minval=0, maxval=10000, title="Profit", step=0.5) 
ProfitTrailingA = input(10, minval=0, maxval=10000, title="Profit", step=0.5) 
useStopLoss = input(false, title="Use Stop Loss?")
LossstratA = input(145, minval=0, maxval=10000, title="Stop Loss", step=0.5) 
colB = input(100, minval=0, maxval=100, title="0-show / 100-hide Strategy", step=100) 

ProfitStrat = ProfitStratA * 10
ProfitTrailing = ProfitTrailingA * 10
Lossstrat = useStopLoss ? LossstratA * 10 : 1000000

if (strategy.position_size > 0)
    strategy.exit("BuyClose", "Buy", trail_points=ProfitStrat, trail_offset=ProfitTrailing, loss=Lossstrat)
    
    
if (strategy.position_size < 0)   
    strategy.exit("SellClose", "Sell", trail_points=ProfitStrat, trail_offset=ProfitTrailing, loss=Lossstrat) 
    

if (BuyCheck == true and strategy.position_size == 0)
    strategy.entry("Buy", strategy.long, comment="Long Entry")
    


if (SellCheck == true and strategy.position_size == 0)
    strategy.entry("Sell", strategy.short, comment="Short Entry")
    


plotshape(BuyCheck, color=blue, transp=colB, style=shape.arrowup, text="Buy\n", location=location.belowbar)
plotshape(SellCheck, color=orange, transp=colB, style=shape.arrowdown, text="Sell\n", location=location.abovebar)













もっと