JiaYiBing 定量的なトレンド モメント トレーディング戦略

作者: リン・ハーンチャオチャン開催日:2024年3月8日 15:40時05分
タグ:

img

概要

JiaYiBing定量トレンドモメンタムトレーディング戦略は,トレンド追跡,モメンタム指標,ボリンジャーバンドチャネルを組み合わせた長短量取引戦略である.この戦略は,トレンド方向を決定するために,高速および遅い移動平均のクロスオーバーを使用し,ボリンジャーバンドチャネルおよびモメンタム指標に基づいてエントリー信号を確認する.この戦略には,利益,ストップ損失,トレーリングストップ,ポジションサイジングなどのリスク管理措置も含まれている.

戦略の原則

この戦略の主な原則は,価格動向とモメント効果を活用して市場機会を掴むことである.具体的には,この戦略は価格動向の方向性を決定するために,異なる期間の2つの移動平均値 (速いと遅い) を使用する.高速移動平均値がスロー移動平均値を超えると,上昇傾向を示し,戦略は長い信号を生成する.逆に,高速移動平均値がスロー移動平均値を下回ると,減少傾向を示し,戦略は短い信号を生成する.

トレンドとエントリータイミングをさらに確認するために,戦略にはボリンジャーバンドとモメンタムインジケーターも組み込まれています.ボリンジャーバンドは3つのラインで構成されています.中間線は移動平均線であり,上下帯は中間線の上下一定数の標準偏差です.価格が上部ボリンジャーバンドを突破すると,強い上昇勢が示され,戦略は長引きます.価格が下部ボリンジャーバンドを下回ると,強い下落勢が示され,戦略は短引きます.

さらに,戦略は,現在の価格と一定の期間前の価格を比較することによって価格変化の速度を測定するモメントインジケーターも導入しています.モメントインジケーターは,傾向の強さを判断し,エントリーのための追加の確認を提供するために使用できます.

ポジションのサイズの観点から,戦略は,口座の資本とリスク優先に基づいてポジションサイズを設定することを可能にします.同時に,戦略には,各取引のリスク曝露を制御するための利益,ストップ損失,トライリングストップメカニズムも含まれます.

総じて,JiaYiBingの定量的なトレンド・モメンタム・トレーディング・ストラテジーでは,安定した投資収益を達成するために,トレンド追跡,モメンタム確認,リスク管理などの複数の次元を通じてリスクを厳格に制御しながら,トレンド市場機会を把握することを目指しています.

利点分析

  1. トレンドトラッキング: 戦略は,トレンド価格の機会を把握するために,速い移動平均と遅い移動平均のクロスオーバーを使用し,異なる市場状況に適応して,上昇傾向でロングと下落傾向でショートにすることができます.

  2. 動向確認:動向指標をトレンドの二次確認として導入することで,誤った信号をフィルタリングし,エントリー品質を改善することができます.

  3. ボリンジャーバンドは価格変動範囲を反映し,ボリンジャーバンドのブレイクアウトはトレンド加速または異常な価格変動のシグナルとして見られ,エントリーのための基準を提供します.

  4. ポジションサイジング: 戦略は,口座の自己資本の割合と最大制限に基づくポジションサイジング方法を採用し,各取引に使用される資本の柔軟な制御を可能にし,資金の充分利用と過度のリスクの露出を回避します.

  5. 利益とストップ損失: 戦略セットは利益,ストップ損失,およびストップ損失レベルを取ります. 価格が予想方向に動くと利益を保護し,価格が逆転すると損失を決定的に削減し,それぞれの取引の最大損失を効果的に制御できます.

  6. 多パラメータ最適化: 戦略には,移動平均期,ボリンジャーバンドパラメータ,利益率とストップ損失率など,複数の調整可能なパラメータが含まれています. これらのパラメータは,戦略の適応性と安定性を向上させるために最適化できます.

リスク分析

  1. 頻繁取引: 戦略は,移動平均クロスオーバーとボリンジャー帯のブレイクアウトに基づいたエントリー信号を生成する. 市場の変動が高くなった場合,頻繁に取引信号を生成し,過剰な取引頻度,増額手数料およびスリップコストを引き起こす可能性があります.

  2. パラメータ感度: 戦略には,移動平均期,モメント期,ボリンジャーバンドパラメータなど,複数のパラメーターが含まれます.異なるパラメータの選択は戦略のパフォーマンスに重大な影響を与えます.パラメータが適切に選択されていない場合,戦略のパフォーマンスが低下する可能性があります.

  3. 遅いトレンド認識: 移動平均値は遅い指標であり,特に移動平均期間が長い場合,トレンド逆転の識別速度が遅いため,最良のエントリータイミングが見逃される可能性があります.

  4. ストップ・ロスのリスク: ストップ・ロスの対策は戦略で設定されているが,極端な市場状況 (急激なギャップなど) で,価格はストップ・ロスのレベルを直接越えて,実際の損失が期待を超えることがある.

  5. 集中型ポジションリスク: 戦略が一定の期間中に同じ方向にシグナルを継続的に生成する場合は,ポジションが一方的に過剰に集中し,ポジションリスクが増加する可能性があります.

  6. 流動性リスク: バックテストやライブ取引における戦略のパフォーマンスは,特に大きなファンドと取引する際の流動性によって影響を受ける可能性があります.

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

  1. より多くの技術指標を導入する: 現在の移動平均値,モメンタム,ボリンジャー帯に基づいて,マルチインジケーター確認を通じて信号の信頼性を向上させるために,RSIやMACDなどのより多くの技術指標を導入することができます.

  2. 入口・出口メカニズムを最適化: 戦略の柔軟性や収益性を高めるため,入口・出口判断に,価格ブレイク前に一定の取引量を要求したり,段階的なポジション閉鎖や出口に後押しの利益を取ったりなど,より多くの条件を導入することができる.

  3. ダイナミックパラメータ調整: 移動平均期,モメント期,ボリンジャーバンドパラメータなどでは,パラメータ適応メカニズムのセットが設計され,異なる市場状態と変動レベルに基づいてパラメータ値をダイナミックに調整し,戦略の適応性を向上させることができます.

  4. ポジションサイズを改善する: 現在のポジションサイズに基づいて,より優れたバランスリターンとリスクのために,ケリー基準,固定比率,ダイナミック・エクイティなどのより高度なマネージメント方法が導入できます.

  5. 基礎分析と組み合わせる:純粋な技術分析戦略は,市場の非効率性または失敗のリスクに直面する可能性があります.マクロ経済データや業界動向などのいくつかの根本的な要因を組み合わせて技術信号をフィルターし確認できれば,戦略のパフォーマンスを向上させることができます.

  6. バックテストとライブトレーディングの一貫性を向上させる: バックテストとライブトレーディングにおける戦略のパフォーマンスは異なる可能性があります. バックテストとライブトレーディングの実行品質,実行価格,スリップ,レイテンシーなどの要因を含む,バックテスト結果とのライブパフォーマンスの一貫性を確保するために,実行品質に焦点を当てることが必要です.

概要

JiaYiBing 定量的なトレンド・モメンタム・トレーディング戦略は,複数の技術分析方法を統合した定量的なトレーディング戦略です.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)


もっと