モメンタムブレイクアウト移動平均戦略


作成日: 2023-11-27 16:25:54 最終変更日: 2023-11-27 16:25:54
コピー: 0 クリック数: 612
1
フォロー
1621
フォロワー

モメンタムブレイクアウト移動平均戦略

概要

動量突破均線戦略は,均線交差信号と動量指標を組み合わせた株式取引戦略である.この戦略は,インデックス移動平均 ((EMA),シンプル移動平均 ((SMA),移動平均分散指数 ((MACD),および修正された比較的強いインデックス ((StockRSI) など,複数の技術指標を総合的に使用し,長期の傾向が上昇していることを確認した前提で買い信号を形成する.短期間の動量指標が反転信号を示したときに,戦略はストップ・ロスを取る.

戦略原則

この戦略は以下の要素で構成されています.

  1. EMA/SMA均線交差: 9周期のEMA快線と21周期のSMA慢線を設定し,快線が慢線を横切るときに買い信号を生成する.

  2. MACD指数についてMACD指数は,MACD線,シグナル線,MACD柱を含む.柱が正し,EMA/SMAから発生した買い信号と同期しているときに,追加の確認として.

  3. ストックRSI: StockRSIは,改良版のRSI指標である。指標線がOVERBOUGHT線 ((80) よりも高く,またはOVERSOLD線 ((20) よりも低く,購入シグナルが生じる。

  4. ブリン帯: ブリンの中間軌道は20日SMAで,帯域は上記の2つの基準の差である. 価格がブリン帯内にある場合にのみ取引シグナルが生成されることを要求する.

  5. ストップ・ローズとストップ・ポジションストップ・ストップ・価格は,過去14日のATRに基づいて計算されています.

この戦略は,上記の指標のうち少なくとも2つの指標が同時に買い信号を発し,株価がブリン帯内にあり,長期的に上昇傾向にあることが必要であるため,最終的な買い信号が生じる. MACD指標が下向きに逆転すると,StockRSIが超買い領域に入った後に売り信号が生じる.

優位分析

この戦略は均線交差,運動量指数および波動率指数の利点を組み合わせて,以下の主要な利点があります.

  1. 素晴らしい結果でした.複数の指標が成熟した指標で,大盤と単一の指標よりも戦略的な結果が優れている.

  2. パラメータは最適化されています.: EMA周期,ブリン帯通路などの主要パラメータが最適化され,システムの安定性を向上させる.

  3. 自動停止/停止: ブリンベルトとATRは,リスク管理に有利な,リアルタイムでストップを調整できます.

  4. 実施の難しさは少ない: コードが簡潔で,指標は簡単に入手でき,実際の操作は困難ではない.

リスク分析

この戦略はうまくいっているものの,主なリスクは以下の通りです.

  1. 指示器が誤った信号を出している: 市場が異常な波動や指標の失敗に遭遇すると,誤ったシグナルが発生する可能性があります.このとき,長期のトレンド判断を組み合わせて行うべきです.

  2. パラメータが正しくない:パラメータの設定が不適切である場合,取引が頻すぎたり,反応が不快になる可能性があります.異なる品種や市場環境に応じて調整する必要があります.

  3. ストップダメージが小さいか大きいか: 止損が小さすぎると,簡単に捕らえられ,大きすぎると,損失が大きすぎます. 止損と止をバランスする必要があります.

上記のリスクに対して,以下のような対策を講じることができます.

  1. 人工介入と改造: 異常が発生した場合,信号を人工的に確認し,パラメータを変更するか,ポリシーを一時停止する.

  2. パラメータの設定を最適化遺伝的アルゴリズムなどより科学的に客観的な方法を採用してパラメータを最適化する.

  3. 変動率調整によるストップ: 波動率に応じて自動的にストップ・ローズ幅を調整できます.例えば1-3倍ATR。

最適化の方向

この戦略は,以下の点でさらに改善できます.

  1. 損失防止メカニズムの安定性を高める: トラッキングストップまたはインデックス移動平均のストップを追加できます.

  2. 取引量フィルターと組み合わせた: 取引量指数に追加して,無効突破を回避する.

  3. 動的調整パラメータ: 市場環境に応じて平均線周期,通路幅等を自動的に最適化することができる.

  4. 機械学習アルゴリズムを導入する:RNN,LSTMなどのアルゴリズムを使用してパラメータを実現する動的最適化。

要約する

動量突破均線戦略総合応用技術指標の優位性,長短走配合の場合,良好な収益が得られた。この戦略の止損制御は整えられ,実施の難しさはあまりなかった。次のステップは,止損機構をさらに完善し,より知的な方法を使用してパラメータ最適化と信号フィルタリングを行い,より安定した余剰収益を得ようとする。

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

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)

// EMA/MA Crossover
fast_length = 9
slow_length = 21
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal and (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)

// Fractal-based Support and Resistance levels
isFractalHigh = high[2] < high[1] and high[1] > high[0]
isFractalLow = low[2] > low[1] and low[1] < low[0]
resistance = ta.valuewhen(isFractalHigh, high[1], 0)
support = ta.valuewhen(isFractalLow, low[1], 0)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 80
oversold = 20
stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought))

// Buy and sell conditions
mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0)

// Long-term Trend Check
long_term_ma = ta.sma(close, 200)
long_term_bullish = close > long_term_ma
long_term_bearish = close < long_term_ma

// Plot the long-term MA for visual clarity
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)

// Simplified Buy and Sell conditions
buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper)
sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought)


// Potential SL and TP based on volatility
potential_SL = close - volatility
potential_TP = close + 2 * volatility

plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

// ... (rest of your code above)

// State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting
var bool inPosition = false
var tradeCounter = 0
var tradeCounterDelayed = 0 // Declaration of the variable

// Buy logic: Check if tradeCounter is 0 and the buy condition is met
if tradeCounter == 0 and buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    inPosition := true
    tradeCounter := tradeCounter + 1

// Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position
if tradeCounter == 1 and inPosition and sell_condition
    strategy.close("BUY")
    inPosition := false
    tradeCounter := tradeCounter - 1

// Update the delayed trade counter:
tradeCounterDelayed := tradeCounter

// Plotting
bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na)
plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

// ... (rest of your code if any)