マルチタイムフレームのトレンド追跡と注文ブロックを組み合わせた定量取引戦略

EMA SMA OB
作成日: 2024-07-29 13:57:12 最終変更日: 2024-07-29 13:57:12
コピー: 0 クリック数: 533
1
フォロー
1617
フォロワー

マルチタイムフレームのトレンド追跡と注文ブロックを組み合わせた定量取引戦略

概要

これは,複数の技術指標と取引理念を組み合わせた複雑な量化取引戦略である.この戦略は,主に,注文ブロック,トレンド変化検出,移動平均の交差,および複数の時間枠の分析に基づいて取引信号を生成する.戦略の核心思想は,より大きな時間枠 (一時間) のトレンド方向で,より小さな時間枠 (五分) の価格行動と技術指標を利用して,正確な入場と出場を行うことである.

戦略原則

  1. 注文ブロック (Order Block): 戦略は,カスタム関数を使用して,注文ブロックを計算します.これは,通常,大型機関の注文を代表する集中区域である重要な価格レベルです.

  2. トレンド変化検出:潜在的なトレンド変化を識別するために,SMAの交差を使用する.

  3. マルチタイムフレーム分析: 1時間の時間フレームで50サイクルと200周期の指数移動平均 ((EMA) を計算し,より大きな市場トレンドを特定する.

  4. 応募条件:

    • 多頭: 5分間のチャートで上昇傾向のシグナルが表示され,価格が注文ブロックを突破し,1時間間のチャートで50EMAが200EMA上にあるとき.
    • 空頭: 5分間のチャートで下向きのトレンドシグナルが表示され,価格が注文ブロックを破り,1時間のチャートで50EMAが200EMA以下であるとき.
  5. 出口戦略: リスク管理と利益のロックをするために,固定パーセントのストップとストップ・ローズレベルを使用する.

戦略的優位性

  1. 多次元分析:複数のタイムフレームと技術指標を組み合わせて,より包括的な市場視点を提供します.

  2. トレンド追跡:大きなトレンドの方向で取引することで,利益の確率を高めます.

  3. 正確な入学:入学時間を最適化するために,注文ブロックと短期トレンドの変化を利用する.

  4. リスク管理: 預設のストップとストップ・ロスの割合を用いて,各取引のリスクを効果的にコントロールする.

  5. 適応性:戦略のパラメータを調整し,異なる市場環境に適応することができる.

戦略リスク

  1. 過剰取引: 波動的な市場では頻繁に取引シグナルが生み出され,取引コストが増加する可能性があります.

  2. スリップポイントリスク:流動性の低い市場では,実際の実行価格が理想価格から大きく偏っている可能性があります.

  3. 逆転リスク:トレンドの転換点の近くで,戦略は連続して損失を被る可能性があります.

  4. パラメータの感受性:戦略のパフォーマンスは,パラメータの設定に非常に敏感であり,継続的な最適化が必要である.

  5. 市場環境依存:横断市場や急速な波動の市場では,戦略の効果が良くないかもしれない.

戦略最適化の方向性

  1. ダイナミックパラメータの調整:市場の変動に応じて自動でストップ・ストップ・ロスの割合を調整することを検討する.

  2. フィルターを追加する: 偽信号を減らすために,技術指標や市場情緒指標を追加する.

  3. タイムフィルター: 取引時間ウィンドウの制限を追加し,低流動性の時期を回避します.

  4. ポジション管理:波動性に基づくポジション調整などのより複雑なポジション管理戦略を実施する.

  5. 回測と最適化:より広範な歴史データ回測を行い,最適のパラメータの組み合わせを見つけます.

  6. 市場環境の認識を増やす:異なる市場状態を認識するアルゴリズムを開発し,それに応じて戦略を調整する.

要約する

これは,マルチタイムフレーム分析,オーダーブロック理論,トレンド追跡技術を組み合わせた,統合的で論理的に複雑な量化取引戦略である.戦略は,大きなトレンドの方向に正確なエントリーポイントを探すことによって,取引の成功率を向上させることを目的としている.しかし,その複雑さのために,戦略は過度にフィットし,パラメータの感受性などに直面している.将来の最適化への挑戦は,戦略の適応性と安定性を向上させることに集中すべきである.

ストラテジーソースコード
/*backtest
start: 2024-06-28 00:00:00
end: 2024-07-28 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("S&P 500", overlay=true)
// Parámetros
length = input(14, "Longitud")
src = input(close, "Fuente")
profit_percent = input.float(0.08955, "Porcentaje de ganancia", step=0.00001, minval=0)
stop_loss_percent = input.float(0.04477, "Porcentaje de stop loss", step=0.00001, minval=0)
// Función para calcular el Order Block
order_block(src, len) =>
    highest = ta.highest(high, len)
    lowest = ta.lowest(low, len)
    mid = (highest + lowest) / 2
    ob = src > mid ? highest : lowest
    ob
// Cálculo del Order Block
ob = order_block(src, length)
// Función para detectar cambios de tendencia
trend_change(src, len) =>
    up = ta.crossover(src, ta.sma(src, len))
    down = ta.crossunder(src, ta.sma(src, len))
    [up, down]
// Detectar cambios de tendencia
[trend_up, trend_down] = trend_change(src, length)
// Calcular EMA 50 y EMA 200 en timeframe de 1 hora
ema50_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 50))
ema200_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 200))
// Condiciones de EMA
ema_buy_condition = ema50_1h > ema200_1h
ema_sell_condition = ema50_1h < ema200_1h
// Señales de compra y venta
buy_signal = trend_up and close > ob and ema_buy_condition
sell_signal = trend_down and close < ob and ema_sell_condition
// Ejecutar la estrategia
if (buy_signal)
    strategy.entry("Compra", strategy.long)
if (sell_signal)
    strategy.entry("Venta", strategy.short)
// Calcular precios de toma de ganancias y stop loss
if (strategy.position_size != 0)
    entry_price = strategy.position_avg_price
    is_long = strategy.position_size > 0
    take_profit = entry_price * (1 + (is_long ? 1 : -1) * profit_percent / 100)
    stop_loss = entry_price * (1 + (is_long ? -1 : 1) * stop_loss_percent / 100)
    strategy.exit(is_long ? "Long TP/SL" : "Short TP/SL", limit=take_profit, stop=stop_loss)
// Visualización
plot(ob, "Order Block", color.purple, 2)
plot(ta.sma(src, length), "SMA", color.blue)
plot(ema50_1h, "EMA 50 1h", color.yellow)
plot(ema200_1h, "EMA 200 1h", color.white)
bgcolor(buy_signal ? color.new(color.green, 90) : sell_signal ? color.new(color.red, 90) : na)