海洋理論グリッドトレード戦略
概要
本戦略は海洋理論におけるグリッド取引手法を応用し、設定した価格範囲内に均等にグリッドラインを配置し、価格とグリッドラインとの関係に基づいて売買注文を実行します。戦略は自動計算によるグリッド価格範囲の設定や、グリッドラインの均等配置といった特徴を持ち、リスクを効果的にコントロールできます。
戦略の原理
本戦略はまず、ユーザーの選択またはデフォルト設定に基づいて価格グリッドの上限と下限(すなわちグリッドの最高価格と最低価格)を計算します。計算方法は2種類あり、1つはバックテスト期間内の最高値と最安値を検索する方法、もう1つは一定期間の移動平均線を計算する方法です。その後、ユーザーが設定したグリッド数に応じて、均等にグリッドラインを配置します。
取引シグナルの発生は、価格とグリッドラインの関係に依存します。価格が下方のグリッドラインを下回った場合、そのグリッドラインで固定数量の買いポジションを建てます。価格が上方のグリッドラインを上回った場合、そのグリッドラインで固定数量の買いポジションを決済します。これにより、価格の変動に応じてポジションがグリッド内で変動し、利益を生み出します。
具体的には、戦略はグリッドライン価格の配列と、各グリッドラインに注文が存在するかを示すブール値配列を保持します。価格があるグリッドラインを下回り、かつそのラインに未決済注文がない場合、そのライン価格でロング注文を出します。価格があるグリッドラインを上回り、かつその下方のグリッドラインに未決済注文がある場合、下方グリッドラインで決済します。この仕組みにより、グリッド取引を実現します。
戦略の優位性
- グリッド範囲を自動計算するため、手動設定の手間を省けます。異なる計算方法を選択可能です。
- グリッドラインを均等に配置し、グリッドが密集して過剰取引になるのを防ぎます。グリッドライン数は調整可能です。
- グリッド取引手法を採用することでリスクを効果的にコントロールでき、価格がグリッド内で変動する限り継続的に利益を得られます。
- 価格の方向性を予想せず、レンジ相場に適しています。
- 手数料率とポジション数をカスタマイズでき、様々な取引銘柄に対応できます。
- グリッドラインを可視化表示するため、取引状況を把握しやすいです。
戦略のリスク
- グリッド範囲を突破するリスク。価格がグリッドの上限または下限を突破すると、損失が拡大する可能性があります。
- グリッド間隔が広すぎるリスク。グリッドが広すぎると利益を得にくく、狭すぎると手数料が増加します。バランスが重要です。
- ポジション保有期間が長すぎるリスク。長期保有では利益を得にくく、手数料負担が増加します。
- パラメータ設定の不備リスク。バックテスト期間や移動平均線期間などのパラメータが適切でないと、グリッド範囲の計算に影響します。
- 市場の系統的リスク。本戦略はレンジ相場に適しており、長期的な一方向相場には適していません。
戦略の最適化
- グリッドパラメータ設定の最適化。相場の特徴や取引コストなどを総合的に考慮し、グリッド数やバックテスト期間などのパラメータを最適化します。
- グリッド範囲の動的調整。市場に大きな変化が生じた場合、グリッド範囲を動的に調整する仕組みを導入できます。
- ストップロス機構の追加。適切なストップロスラインを設定し、過大な損失を回避します。ストップロスラインも動的に調整可能です。
- 他の指標と組み合わせた取引フィルタリング。ボリンジャーバンドやトレンド指標などを追加し、不適切な取引を回避します。
- 資金効率の最適化。ホット/コールド分析を導入し、変動が小さいときは取引を減らします。
まとめ
本戦略はグリッド取引の原理を活用し、リスクをコントロール可能なレンジ相場取引を実現します。グリッドの自動計算やグリッドラインの均等配置といった利点を持ち、パラメータ調整により様々な市場環境に対応できます。リスク管理が容易で操作も簡単です。ただし、戦略には一定の限界もあり、市場の変化に対応するために継続的な最適化が必要です。総じて、本戦略はグリッド取引に対して、より標準化されパラメータ化可能な実装アプローチを提供します。
/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 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
