ダイナミック・グリッド・トレーディング・戦略

作者: リン・ハーンチャオチャン開催日:2023年12月1日 14:41:57
タグ:

img

概要

ダイナミック・グリッド・トレーディング・ストラテジーは,動向平均線とその上下線を計算し,グリッド・トレーディング・レンジをダイナミックに設定する.価格がグリッド・レンジを突破すると,グリッド・ラインが設定した固定間隔でトレーディング・シグナルが発行され,収益性を達成する.

戦略原則

戦略は,最初に定義された期間の移動平均線 n と移動平均線の上部と下部のトラックを計算する.上部トラックは移動平均線 * (1 + 入力パラメータ std),下部トラックは移動平均線 * (1 - 入力パラメータ std).これは動的に調整された取引範囲ゾーンを構築する.

価格が上昇し,グリッドラインを突破すると,そのグリッドラインで長い信号が発信され,価格が下がり,グリッドラインを突破すると,そのグリッドラインに対応する前のグリッドラインで閉じる信号が発信されます.この逆操作を通じて,価格が変動すると利益が得られます.

具体的には,各グリッドラインの取引状態を記録するために bool アレイ order_array を使用します.グリッドラインが長い条件をトリガーすると,グリッドラインの対応状態が true に設定され,グリッドラインがすでに位置していることを示します.価格が下がってグリッドラインを壊すと, order_array の前のグリッドラインの状態が false に設定され,閉じる信号が発行されます.

利点分析

この戦略には以下の利点があります.

  1. 動向平均を活用して動的に調整された取引範囲を構築することで,市場変動に基づいて範囲を調整し,戦略を市場に適応できるようにすることができます.

  2. 格子設計は,極端な市場条件による損失拡大を防ぐために,自動的に利益とストップ損失を取ることができます.

  3. 格子量と資本配分は,同じ距離と同じ配分を採用し,単一のポジションの大きさを制御し,単一のポジションのリスクを減らすことができます.

  4. 長期・緊縮シグナル設定は,トレンドに沿って取引し,利益を得たり,ストップ損失を起こすのに適しています.

リスク分析

この戦略にはいくつかのリスクもあります:

  1. 市場が長期的に弱く,グリッドラインを突破できない場合,戦略は無目的の振動取引に陥り,長期と短期間の交替は口座の資本浸食を引き起こす可能性があります.

  2. 選択されたパラメータ std とグリッドの数が完全に合理的でない場合があり,異なる取引品種の分析に基づいて決定する必要があります.パラメータが正しく設定されていない場合,戦略の有効性に影響を与える過大または過小な取引ゾーンおよびグリッドにつながります.

  3. この戦略は,価格格差や短期的な急激な上昇や減少など,いくつかの極端な市場条件を考慮していない.これらの条件は,戦略が複数のグリッドを突破し,リスク制御を超えた損失を引き起こす可能性があります.

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

戦略は,次の側面でも最適化できます.

  1. 機械学習アルゴリズムが導入され モデルを訓練して 移動平均値の上位と下位を予測し 取引地域を より賢く ダイナミックにすることができます

  2. 格子数,資本配分比,ポジションサイズなどのパラメータは,適応パラメータを使用して,異なる取引目標の特徴に応じて最適化できます.

  3. 条件オーダーは,格段な市場条件下で,先行ストップ・ロスの役割やコントロール・ロスの役割を担うため,グリッドラインから一定の距離で,ストップ・ロスのオーダーを事前に設定するために設定することができます.

  4. 極端な市場状況 (初期ポジションのサイズを増やすこと,ストップロスのために直接中間グリッドをスキップすることなど) に対して例外処理メカニズムを設計し,価格ギャップのような状況に対処することができます.

概要

ダイナミック・グリッド・トレーディング戦略は,全体として合理的に設計されています.グリッドで自動的なテイク・プロフィット・ストップ・ロスのシステムを構築することができ,価格変動が頻繁な品種取引に適しています.しかし,この戦略には依然として一定の市場リスクがあります. 戦略がより堅牢になる前にパラメータと例外的な状況が最適化する必要があります.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)

もっと