資源の読み込みに... 荷物...

ダイナミックグリッド位置サイズ戦略の傾向

作者: リン・ハーンチャオチャン開催日:2024年12月12日 11:19:17
タグ:TTMエイマGRIDDCAATRSMA

img

概要

この戦略は,高値と低値の指数的な移動平均 (EMA) を計算して市場傾向方向を決定するTTM指標に基づくダイナミックグリッド取引システムであり,動的に更新されたベース価格の周りにグリッド取引システムを展開する.グリッドの方向性と価格レベルは傾向に応じて調整され,価格が事前に定義されたグリッドレベルを超えると取引を実行し,各取引は口座資本の固定パーセントをリスクにします.

戦略の原則

基本論理は,次のステップで実行されるTTM状態計算にあります.

  1. ttmPeriodパラメータに基づいて2つの EMAを計算する:低値 (lowMA) と高値 (highMA) の EMA
  2. 2つの高MAと低MAの境界値を定義する.
    • lowThird: 下から1/3位
    • 高3位:下から2/3位
  3. 閉じる価格ポジションを基に,以下の値値に対して TTM 状態を決定する.
    • 閉じる値が高値以上になると1 (上昇傾向) を返します
    • 閉じる値が低値を下回ると 0 (ダウントレンド) を返します
    • Close が lowThird と highThird の間にあるとき -1 (中立状態) を返します.

ネットワーク取引システムは,TTM状態に基づいて動的に調整されます.

  1. TTM 状態が変更されたときに,グリッドベース価格と方向を更新します.
  2. グリッドの方向と間隔に基づいて,購入/販売価格レベルを計算します.
  3. 価格がグリッドレベルを突破したときに対応する買い物・売却を実行する.

戦略 の 利点

  1. 強力なダイナミック適応性: 戦略は,市場の動向に基づいて,グリッドの方向性と価格レベルを動的に調整し,適応性と収益性を向上させることができます
  2. 堅牢なリスク管理: 固定パーセントのポジションサイズを使用し,取引ごとにリスク露出を効果的に制御する
  3. 良いパラメータ調整性: TTM 期間,グリッドレベル,間隔などのキーパラメータは,異なる市場条件に最適化できます
  4. 明確な実行メカニズム: 取引シグナルが明確で,実行ロジックは単純で直感的に,バックテストとライブ取引を容易にする

戦略リスク

  1. トレンド検出遅延: EMA ベースの TTM インジケーターは,トレンドターニングポイントで遅延信号を引き起こす可能性がある固有の遅延があります.
  2. 横向市場リスク: 横向市場における電網方向の頻繁な変更は,過剰な取引と過度の手数料につながる可能性があります.
  3. 資本管理の圧力:複数のネットワークレベルを同時に運用するには,かなりの資本が必要で,戦略の実行可能性に影響を与える可能性がある
  4. 低流動性条件下では,高周波ネットワーク取引は,戦略の業績に影響を与える重大な滑りに直面する可能性があります.

戦略の最適化方向

  1. トレンド検出最適化
    • 傾向検出の精度を向上させるために複数のタイムフレーム分析を組み込む
    • RSI,MACDなどの他の技術指標と組み合わせてトレンド確認
  2. グリッドパラメータ最適化:
    • 格子間隔を動的に調節する
    • アダプティブ・グリッドレベル調整メカニズムを導入する
  3. 資本管理の改善
    • 動的位置配置を実装する
    • リスク対価メカニズムを追加
  4. 執行メカニズムの強化
    • ストップ・ロスト・メカニズムと 利益の引き上げメカニズムを追加する
    • オーダー実行タイミングを最適化

概要

この戦略は,TTMトレンド検出とダイナミックグリッド取引を組み合わせて,適応性のあるリスク制御型取引システムを構築する.グリッド方向と価格レベルをダイナミックに調整することで,戦略は異なる市場環境に効果的に適応することができる.固有のリスクが存在するものの,適切なパラメータ設定と最適化措置を通じて,戦略は良い実用価値と開発可能性を示している.


/*backtest
start: 2024-12-04 00:00:00
end: 2024-12-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("TTM Grid Strategy", overlay=true)

// Input parameters
int ttmPeriod = input.int(6, minval=1, title="TTM Period")
int gridLevels = input.int(5, minval=2, title="Grid Levels")
float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)")

// Calculate TTM State
ttmState() =>
    lowMA = ta.ema(low, ttmPeriod)
    highMA = ta.ema(high, ttmPeriod)
    lowThird = (highMA - lowMA) / 3 + lowMA
    highThird = 2 * (highMA - lowMA) / 3 + lowMA

    if close > highThird
        1
    else if close < lowThird
        0
    else
        -1

// State tracking variables
var float gridBasePrice = 0.0
var int gridDirection = -1

// Determine grid state
updateGridState(float currentClose, int currentState) =>
    float newBasePrice = gridBasePrice
    int newDirection = gridDirection

    if currentState != -1 and currentState != gridDirection
        newBasePrice := currentClose
        newDirection := currentState
    
    [newBasePrice, newDirection]

// Calculate grid levels
calcGridLevels(float basePrice, int direction, int levels) =>
    float[] buyLevels = array.new_float(levels)
    float[] sellLevels = array.new_float(levels)

    for i = 1 to levels
        multiplier = i * gridSpacing
        if direction == 1  // Buy grid
            array.set(buyLevels, i-1, basePrice * (1 - multiplier))
            array.set(sellLevels, i-1, basePrice * (1 + multiplier))
        else  // Sell grid
            array.set(buyLevels, i-1, basePrice * (1 + multiplier))
            array.set(sellLevels, i-1, basePrice * (1 - multiplier))
    
    [buyLevels, sellLevels]

// Execute grid trades
executeGridTrades(float basePrice, int direction, int levels) =>
    [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels)

    for i = 0 to levels - 1
        float buyLevel = array.get(buyLevels, i)
        float sellLevel = array.get(sellLevels, i)

        if direction == 1  // Buy grid
            if low <= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if high >= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))
        else  // Sell grid
            if high >= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if low <= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))

// Main strategy logic
currentState = ttmState()
[newGridBasePrice, newGridDirection] = updateGridState(close, currentState)

// Update global variables
if newGridBasePrice != gridBasePrice
    gridBasePrice := newGridBasePrice
if newGridDirection != gridDirection
    gridDirection := newGridDirection

// Execute grid trades
executeGridTrades(newGridBasePrice, newGridDirection, gridLevels)

// Visualization
plotColor = newGridDirection == 1 ? color.green : color.red
plot(newGridBasePrice, color=plotColor, style=plot.style_cross)

関連性

もっと