多期トレンド追跡戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月14日 14:29:39
タグ:

img

概要

この戦略は,移動平均値,MACDとRSIを複数のタイムフレームで組み合わせて,トレンドの方向性を特定し,S&P500指数のトレンドを取引します.

戦略の論理

  1. 10日間の単純な移動平均は価格動向を判断します. 10日間のMAを超える価格は上向きであり,下向きを示す.

  2. MACDはモメント強さを判断する. 12 日から 21 日間の指数移動平均の違いを計算し,MACD線と信号線間のクロスオーバーは取引信号を生成する.MACD線が信号線の上を横切ると上向き,下向きを示します.

  3. 14日間のRSIと50日間のMAが計算されます.RSIがMAを超えると上昇信号であり,下を横切ると下落信号です.

  4. 1分,3分,5分タイムフレームはトレンド一貫性を確認します

  5. 価格が10日間のMAを超えると,RSIがMAを超越し,MACD線がシグナルラインを超越すると,買い信号が生成される.価格が10日間のMAを下回ると,RSIがMAを下回り,MACD線がシグナルラインを下回ると,売り信号が生成される.

利点

  1. インディケーターを組み合わせることで信号の精度が向上します. 10日間MAはメイントレンドを判断し,MACDはモメント強度を決定し,RSIはオーバーバイト/オーバーセールレベルを確認します.インディケーターコンボは互いに検証し,不正な取引を減らす.

  2. 複数のタイムフレームの確認は市場騒音を回避する. 1分,3分,5分タイムフレームの二重確認は,同時信号の出現を保証し,偽信号をフィルタリングする.

  3. グラフパターンは,信頼性の視覚的な判断を助けます.グラフパターンの分析は,極端な過剰購入/過剰販売レベルを回避し,損失リスクを軽減します.

  4. 中程度の取引頻度は指数取引に適しています. 主要指標として10日間のMAは,過剰な取引を防止し,過剰な取引による追加取引コストを回避します.

リスク

  1. 不合理な出来事における急激な逆転を検出できない.そのような市場の混乱はモデルを混乱させ,リスク管理のためのポジションサイズを減らすべきである.

  2. 変動する市場条件を考慮せずに固定パラメータ設定.パラメータは,ライブ取引における異なる市場体制のために動的に調整されるべきです.

  3. 実行に困難である.実行可能な流動性を向上させるために,入力信号は滑り込みで微調整されるべきである.

  4. 複数のタイムフレームは信号の遅延を増加させる.突然の出来事による遅延による損失を最小限に抑えるために適切なリスク制御が必要です.

強化

  1. ストップ・ロスのメカニズムを組み込む. ストップ・ロスの後継とストップ・ロスの割合を組み込む. 単一の取引損失を制御するために.

  2. 動的パラメータの設定を最適化して 市場の変化に適応し 戦略の安定性を向上させる.

  3. モデルショックを避けるために,重要な出来事による市場体制の変化を考慮する.

  4. スリップなどの取引コストを考慮し,よりよい実行のためにエントリー/アウトプットポイントを調整します.

  5. マルチタイムフレームの検証を多様化するために,シグナル確認としてキャンドルスタイクのような異なる価格入力をテストします.

  6. 戦略の最適化を自動化するためにビッグデータで機械学習アルゴリズムを使用します

結論

この戦略は,複数の指標によるトレンド識別と時間枠間のシグナル確認を通じて,S&P500のトレンドを効果的に取引する.その強みは高い信号精度とノイズレジリエンスのうえにあるが,リスク制御とダイナミックパラメータチューニングが必要である.単純な移動平均戦略に対する最適化として,定量的な取引戦略の強化のための貴重なインスピレーションと参照を提供します.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// USE HEIEN ASHI, 1 min, SPX 500 USD OANDA
// © connor2279
//@version=5
strategy(title="SPX Strategy", shorttitle="SPXS", overlay=true)

//SMA
len1 = 10
src1 = input(close, title="SMA Source #1")
out1 = ta.sma(src1, len1)
plot(out1, title="SMA #1", color=close >= out1 ? color.lime : color.red, linewidth=2)

data_over = ta.crossover(close, out1)
dataO = close >= out1
data_under = ta.crossunder(close, out1)
dataU = close < out1

bgcolor(color=ta.crossover(close, out1) ? color.new(color.lime, 90) : na)
bgcolor(color=ta.crossunder(close, out1) ? color.new(color.red, 90) : na)     

//Norm MacD
sma = 12
lma = 21
tsp = 10
np = 50
    
sh = ta.ema(close,sma)  

lon= ta.ema(close,lma) 

ratio = math.min(sh,lon)/math.max(sh,lon)

Mac = ratio - 1
if(sh>lon)
    Mac := 2-ratio - 1
else
    Mac := ratio - 1

MacNorm = ((Mac-ta.lowest(Mac, np)) /(ta.highest(Mac, np)-ta.lowest(Mac, np)+.000001)*2)- 1

MacNorm2 = MacNorm

if(np<2)
    MacNorm2 := Mac
else
    MacNorm2 := MacNorm
    
Trigger = ta.wma(MacNorm2, tsp)

trigger_above = Trigger >= MacNorm
trigger_under = Trigger < MacNorm
plotshape(ta.crossover(Trigger, MacNorm2), style=shape.triangledown, color=color.red)
plotshape(ta.crossunder(Trigger, MacNorm2), style=shape.triangledown, color=color.lime)

//RSI / SMA RSI
swr=input(true,title="RSI")
src = close
len = 14
srs = 50
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
mr = ta.sma(rsi,srs)
rsi_above = rsi >= mr
rsi_under = rsi < mr

//All
buySignal = rsi_above and trigger_under and dataO
shortSignal = rsi_under and trigger_above and dataU
bgcolor(color=buySignal ? color.new(color.lime,97) : na)     
bgcolor(color=shortSignal ? color.new(color.red, 97) : na)     
     
sellSignal = ta.cross(close, out1) or ta.cross(Trigger, MacNorm2) or ta.cross(rsi, mr)
if (buySignal)
    strategy.entry("LONG", strategy.long, 1)

if (shortSignal)
    strategy.entry("SHORT", strategy.short, 1)

// Submit exit orders
strategy.close("LONG", when=sellSignal)
strategy.close("SHORT", when=sellSignal)

もっと