能動的適応型定量グリッド取引戦略
概要
本戦略は、動的に調整される取引グリッドを構築することで、変動相場において安定的な利益を実現します。戦略は設定されたグリッド数に基づいて、グリッド間隔と上下限価格を自動計算します。価格が各グリッドラインを突破すると、段階的に買いまたは売りのポジションを構築します。価格が元のグリッドラインに再びタッチすると、段階的に利益確定してポジションをクローズします。本戦略は手動および自動のグリッドパラメータ調整の両方をサポートし、市場環境の変化に適応できます。
戦略の原理
-
入力パラメータに基づいて、グリッドの境界とグリッドラインの価格配列を計算します。
-
価格が特定のグリッドラインを下回り、そのグリッドラインに対応する注文がない場合、そのグリッドラインの価格で買い注文を発注します。価格が前のグリッドライン(最初を除く)を上回り、前のグリッドラインに対応する保有ポジションが存在する場合、前のグリッドラインに対応する買いポジションを決済します。
-
グリッドパラメータの自動調整が有効な場合、直近の一定数のローソク足データに基づいて、定期的にグリッドの上下限価格、グリッド間隔、およびグリッド配列を再計算します。
優位性分析
-
変動相場における利益獲得目標を達成します。相場が上昇または下降する中で、異なる価格帯で段階的にポジションを構築し、利益確定してクローズすることで、全体的に利益を実現します。
-
グリッドパラメータを手動または自動で調整するオプションがあります。手動調整は人間の介入が必要ですが、より制御しやすいです。自動調整は操作の負担を軽減し、戦略が市場環境の変化に適応できるようにします。
-
最大グリッド数を制限することで、片方向のリスクをコントロールできます。価格がすべてのグリッドラインを突破すると、その方向のリスクは抑制されます。
-
グリッド間隔を調整することで、1注文あたりの損益幅をコントロールできます。グリッド間隔を狭くすると、1回あたりの損益を小さくできます。
リスク分析
-
大幅な変動相場では、アービトラージ(裁定取引)のリスクがあります。価格が複数のグリッド間を急速に行き来する場合、裁定取引のリスクに直面する可能性があります。
-
初期資金量を適切に設定する必要があります。初期資金が不十分だと、十分な数のグリッドラインをサポートできません。
-
グリッド数が多すぎる、または少なすぎる場合、戦略の収益に悪影響を及ぼします。グリッド数が少なすぎると変動を十分に活用できず、多すぎると1回あたりの損益が小さくなります。最適なパラメータを見つけるためにテストが必要です。
-
グリッドパラメータの自動調整には、操作されるリスクがあります。グリッドパラメータの計算は一定数のローソク足データに依存するため、短期的な操作の影響を受ける可能性があります。
最適化の方向性
-
ストップロスロジックの追加。例えば、トレーリングストップやフォローストップを設定し、片方向の損失リスクをさらに抑制します。
-
アルゴリズムを導入してグリッドパラメータを最適化。異なる市場段階でのパラメータ設定をテストし、機械学習手法でモデルをトレーニングすることで、パラメータの自動最適化を実現できます。
-
より多くの指標を組み合わせて相場を判断。例えば、MACDやKDなどで現在が上昇トレンドか下降トレンドかを判断し、グリッド数やパラメータを調整します。
-
ドローダウン制御の最適化。最大ドローダウン率を設定し、閾値に達したら戦略を停止して、損失の拡大を防ぎます。
まとめ
本戦略は変動相場の特性を最大限に活用し、動的グリッド取引によって安定的な利益達成を実現します。戦略はパラメータ設定の柔軟性を考慮しつつ、操作の負担も軽減します。変動相場において、本戦略は理想的な利益選択肢と言えます。将来のさらなる最適化により、戦略の適用範囲を広げ、ドローダウン制御を改善し、より持続可能で安定した収益を生み出すことができます。
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average- 1

