移動平均線とレジスタンスレベルブレイクのクロスオーバー戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-31 14:34:16
タグ:

img

概要

この戦略は,自動取引のための売買信号を設定するために,移動平均クロスオーバーとレジスタンスレベルブレイクアウトのテクニックを統合している.短期移動平均が中期移動平均を下から越えて,株価がレジスタンスレベルを突破すると,購入信号が生成される.この戦略はリスク管理のために15%の価格上昇で利益を得たり,3%の価格減少でストップロスを設定する.この成熟した定量的な取引戦略は,市場のトレンドを自動的に特定し,適切なリスク管理で技術信号が現れるときにポジションに入ることができます.

戦略の原則

この戦略は,主に以下の技術指標と判断に基づいて取引信号を生成します.

  1. 移動平均クロスオーバーテクニック: 20日および44日間の単純な移動平均を計算する. 20日間のSMAが44日線を越えると,市場は上昇傾向にあり,購入信号を生成すると判断される.

  2. レジスタンスレベルブレイクテクニック: 株価が繰り返し到達したが突破できなかった価格レベルはレジスタンスレベルと呼ばれます.それらを突破すると,価格は新しい上昇傾向に入ることを示します.この戦略は,前回の閉盤の0.7%を超えるブレイクをレジスタンスブレイクとみなします.

  3. RSIオシレーター: 相対強度指数,過剰購入および過剰販売状況の識別のためのモメント指標.この戦略は,過剰購入の信号として50を超える14日間のRSI値を使用します.

  4. ボリューム分析: 過去10日間の平均を上回るボリュームは,しばしば,より強い購入または販売の関心と価格動向の勢いを示唆する.

  5. 買い信号: ショート SMA が中間 SMA を横断し,RSI 値が過剰に買い上げられ,平均取引量より高く,上昇傾向を示したときに発生する.

  6. セールシグナル 入場価格から15%の利益,3%のストップ・ロスト

この成熟した定量的な取引戦略は,市場構造とトレンドを特定するための複数の技術分析方法を統合し,トレンド形成中に自動的に取引信号を生成し,適切なリスク管理を行います.

戦略 の 利点

  1. 移動平均技術で市場動向をシームレスに捉える.

  2. 偽のブレイク時にポジションを開くのを避けます 音量分析を組み込みます

  3. ストップ・ロストとテイク・プロフィートを設定し リスク・リターン比を最適化することで 効果的なリスク管理

  4. 市場構造の判断力,厳格な取引規則,リスク管理は,これを堅牢な定量的な取引戦略にします.

戦略 の リスク

  1. ダブル移動平均系は,異なる期間におけるパラメータ調整に敏感である可能性があります.

  2. トレンドフォロワーシステムは突然の基本的出来事に対して迅速に対応できず,ストップ損失リスクに直面します.

  3. ストップロスの設定がある場合でも,高い取引頻度は,ストップロスの実行が避けられない数に繋がり,不均等な利益水準をもたらします.

  4. 技術指標からのシグナルは,市場の最高の逆転点に遅れていることが多い.

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

  1. 移動平均長さ,ストップ損失/利益目標などのパラメータを最適化します.

  2. 範囲検出のためのボリンジャー帯,差異を検出するためのMACDなどの他の技術指標を追加し,信号の正確性を向上させます.

  3. 基本的信号とイベントによる信号を組み込み,ネガティブなニュースによって引き起こすストップ損失を避ける.

  4. 取引リスクを制御するための固定量,固定パーセント方法によるマネーマネジメントを最適化します

結論

この戦略は,スムーズな操作,正確な判断,厳格な取引規則を示し,より効果的な定量的な取引技術の一つを表しています. しかし,技術分析だけでは,市場を読み込むのに限界がありますので,さらなる改善は,より多くの指標と基本的/イベント信号,ストップ損失/利益の引き上げレベルとマネーマネジメントメカニズムを最適化することにある. 要約すると,この戦略は技術分析戦略の中で高いレベルに達しましたが,次のステップで基本的/イベント駆動サイクル取引戦略に向かって進化する必要があります.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Advanced Strategy with Conditional Stop Loss", overlay=true)

// Parameters
ma_length_20 = 20
ma_length_44 = 44
ma_length_100 = 100
rsi_length = 14
volume_length = 10
profit_target = 1.15 // 15% above the buy price
stop_loss_target = 0.97 // 3% below the buy price
wait_candles = 10 // Number of candles to wait after selling, unless MA cross condition met

// Indicators
moving_average_20 = ta.sma(close, ma_length_20)
moving_average_44 = ta.sma(close, ma_length_44)
moving_average_100 = ta.sma(close, ma_length_100)
rsi = ta.rsi(close, rsi_length)
volumeAvg = ta.sma(volume, volume_length)

// Variables to manage the wait period after a sell
var int last_sell_candle = 0

// Update last sell candle
if (strategy.position_size[1] > 0 and strategy.position_size == 0)
    last_sell_candle := bar_index

// Trend identification
uptrend = close > moving_average_20
above_ma20_by_1_percent = close > moving_average_20 * 1.01
ma_cross = ta.crossover(moving_average_20, moving_average_44) or ta.crossunder(moving_average_20, moving_average_44)
close_near_high = (close >= high * 0.993) and (close <= high)

// Buy condition (only in uptrend, above 1% from 20-day MA, and respecting new filter)
can_buy_after_cross = ma_cross and close > high[1]
can_buy_after_wait = (bar_index - last_sell_candle) > wait_candles
buy_condition = (can_buy_after_cross or can_buy_after_wait) and uptrend and above_ma20_by_1_percent and close > moving_average_44 and close > moving_average_100 and close > high[1] and rsi > 50 and volume > volumeAvg and not close_near_high

// Entry
if (buy_condition and strategy.position_size == 0)
    strategy.entry("Buy", strategy.long)

// Exit conditions
if (strategy.position_size > 0)
    // Profit target
    profit_level = strategy.position_avg_price * profit_target
    strategy.exit("Take Profit", "Buy", limit=profit_level)

    // Dynamic Stop Loss - Check on every bar if the price has dropped 3% below the buy price
    stop_loss_level = strategy.position_avg_price * stop_loss_target
    if (low < stop_loss_level)
        strategy.close("Buy", comment="Stop Loss")

// Plotting
plot(moving_average_20, color=color.green, title="20-Day Moving Average")
plot(moving_average_44, color=color.blue, title="44-Day Moving Average")
plot(moving_average_100, color=color.red, title="100-Day Moving Average")


もっと