マルチタイムフレームトレンドフォロー戦略


作成日: 2023-11-14 14:29:39 最終変更日: 2023-11-14 14:29:39
コピー: 1 クリック数: 667
1
フォロー
1617
フォロワー

マルチタイムフレームトレンドフォロー戦略

概要

この戦略は,平均線,MACD,RSIなどの複数の指標を組み合わせて,複数の時間枠でトレンドの方向性を識別し,SPX500指数に対するトレンド追跡取引を実現します.

戦略原則

  1. 10日間のシンプル・モビリング・エベレンスを使用して価格のトレンド方向を判断する.価格が10日間のラインを上越したとき,看板,下越しする.

  2. プラス・ネガティブ双方向MACD判断の動力を適用する。12日と21日の指数移動平均の差値を計算し,平均線差値の快慢線を交差して買買の信号を識別する。快線は慢線を貫通して看板,下線は看板を貫通する。

  3. 14日RSIと50日平均線を計算し,RSI上は平均線を看板信号として,下は看板信号として穿戴する.

  4. 1分,3分,5分タイムフレームでトレンドの一致性を確認する.

  5. 価格が10日線を上,RSIを平均線に,MACDを短線に突破するときに買取シグナルが生成され,価格が10日線を下,RSIを平均線に,MACDを短線を短線に突破するときに売出シグナルが生成されます.

戦略的優位性

  1. 複数の指標の組み合わせでトレンドを識別し,信号の正確性を向上させる。10日平均線は主トレンドの方向を判断し,MACDは強度の動きを判断し,RSIは超買い超売りを確認する。指標の組み合わせは相互に検証し,誤った取引を減らす。

  2. 複数の時間枠の確認,市場騒音から誤導を避ける。1分,3分,5分時間枠の二重検証,信号の同期を保証し,偽信号をフィルターする。

  3. グラフィック判定形状と組み合わせて,直観的に信頼性がある。グラフィック判定形状は価格判定特性を補助し,買賣ポイントの極限地域を避け,損失リスクを低減する。

  4. 取引頻度は適度で,指数取引の特徴に合致する。10日平均線を主要判断指標として使用し,取引頻度は高すぎず,重複取引を避けるため,過度の取引コストを支払わない。

戦略リスク

  1. 突発的な出来事による断裂の状況を識別できない.非合理的な出来事がモデル判断を混乱させるので,ポジション回避のリスクを低下させるべきである.

  2. パラメータ設定は固定で,市場環境の変化は考慮されていない.実戦では,大都市環境の動態に応じてパラメータを調整し,戦略を様々な実況に適応させるべきである.

  3. 買賣点は理想化されすぎ,実際に実行するのは困難である.滑点コストなどの要素を組み合わせて買賣点を微調整し,信号をより実行可能にするべきである.

  4. 多時間枠は意思決定の遅延を増加させる. 予期せぬ事態に対して,風力制御をよくして,遅延による損失を減らす.

戦略最適化の方向性

  1. 移動止損,パーセンテージ止損などの止損メカニズムを追加し,単一損失を制御する.

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

  3. 市場におけるホットポイントのイベントの風制御と組み合わせて,重大事件が戦略に衝撃を与えるのを避ける.

  4. スライドポイントのような実際の取引コストを考慮し,買賣ポイントを調整してシグナルを実行できるようにする.

  5. K線などの異なる値取法をテストし,信号確認源として,多時間枠検証手段を豊富に備える.

  6. 機械学習アルゴリズムを追加し,ビッグデータから訓練モデルを活用し,戦略パラメータを自動的に最適化する.

要約する

この戦略は,複数の指標のトレンド識別,複数の時間枠の信号確認方法によってSPX500指数に対するトレンド追跡取引を可能にします. 戦略の優点は,信号の正確性が高く,ノイズに対する干渉能力が強いことにあるが,リスク管理に注意し,戦略パラメータの動的最適化を維持する必要があります. 単純な移動平均戦略の最適化の有効な試みとして,この戦略は,量化取引戦略の最適化に有益なスタートアップと参考文献を提供します.

ストラテジーソースコード
/*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)