モスクワ取引所(MOEX)の指値注文を使用した自動グリッド取引
はじめに
この記事では、グリッド取引アプローチを使用して取引戦略のEAをMQL5言語で開発する方法について詳しく説明しています。EAは、MetaTrader 5ターミナルを使用して、グリッド戦略に従いながらMOEXで取引することになります。EAには、ストップロスとテイクプロフィットによるポジションの決済、および特定の市況での未決注文の削除が含まれます。
1.グリッド取引
この記事では、MOEXでの先物契約取引を自動化するためのグリッドEAの適用について検討します。EAでは、特定の価格帯内で指定された間隔で注文を出すことができます。
グリッド取引では、注文は設定された価格の上および下でおこなわれ、次第に価格が上下に広がる注文のグリッドが作成されます。
たとえば、VTB銀行(PJSC)の普通株式の先物契約の市場価格をRUB 100下回るごとに買い注文を出したり(VTBR-6.22 (VBM2))、市場価格をRUB 100上回るごとに売り注文を出したりすることができます。これにより、さまざまな条件下の取引から利益を得ることができます。
グリッド取引は、価格が所定の範囲内で変動する不安定で「不活発な」市場に最適です。この取引方法では、小さな価格変動の場合に利益を上げることができます。グリッドレベルの頻度が高いほど、トランザクションが頻繁におこなわれます。ただし、各注文の利益が低くなるため、コストが高くなります。
したがって、多くの取引をおこないながら小さな利益を上げる戦略と、注文数は少ないがそれぞれの取引で大きな利益を得る戦略との間で妥協点を見つける必要があります。
上限/下限とグリッド周波数を設定することで、グリッド設定をカスタマイズできます。グリッドを作成した後、EAは事前に計算された価格で自動的に売買注文を出します。
その動作について説明します。VBM2先物契約価格が今後7日間でRUB 1,600~ 2,800の間で変動すると予想するとします。この場合、予測範囲内で取引するようにグリッド取引を設定できます。
グリッド取引パネルでは、以下を含む戦略パラメータを設定します。
-
価格帯の上限と下限
-
指定された価格帯内での注文数
-
各買い指値注文と売り指値注文の間のステップ
図1: 注文グリッドの配置
この場合、VBM2先物価格がRUB 1,600まで下がると、グリッドEAは市場価格よりも低い価格でポジションを蓄積します。価格が回復し始めると、EAは市場価格よりも高い価格で売ります。この戦略は、価格方向の反転を利用しようとします。
2.取引システムに最も適した金融市場での資産価格の動きのタイプ
取引戦略のエントリポイントは、銘柄市場の動きに関連付けられています。つまり、グリッドはいつでも広げる(取引エントリを実行する)ことができます。ご存知かもしれませんが、市場はほとんどの場合、旗のような動きを示します。このEAは、いわゆるパラダイム(安く買って高く売る)に準拠するこのような市況のために特別に作成されています。
グリッド取引に最適なレンジ相場のタイプは、価格が明確な方向性なしに一定の範囲内で動く場合です。原則として、境界の崩壊は、レンジ相場の終わりと新しいトレンドの始まりを意味します。
価格が強い支持レベルと抵抗レベルの間で圧迫されると、幅の広いレンジ相場が形成されます。強気派も弱気派も勝てるほど強くないので、新しいトレンドは始まりません。これらの定義はすべて銘柄に関して厳密に個別であり、特定の市場銘柄の動きの文脈で考慮されます。
この取引アプローチを一般的に考えると、MOEXで約1ヶ月間取引されたVBM2先物契約の場合、1,600の下限から2,800の上限への一方向の(一般的な最終的な)動きや価格変動(主要な動きからのロールバック)が存在した場合でも、総利益が一般損失を上回っています。結果的に、注文が有効化し、買い注文と売り注文のリミットがリセットされます。
価格レベル間 (範囲内) での取引銘柄の価格変動により、選択した期間内にこのグリッドアプローチを使用して得られた取引結果に基づいて利益を増やすことができます。
グリッドEAは、各グリッド注文で取引された契約/ロットに同じ値を適用するため、この取引アプローチに基づいて資金管理を計画する必要があります。
レンジ相場の境界線からのロールバックの取引は、レンジ相場が続くことを前提としています。この取引方法を使用する場合、強い動きを引き起こす可能性のある重要なニュースがないことを考慮することが重要です。さらに、安全上の理由から、ストップロスを範囲外に配置する必要があります。
3.グリッド取引の機能と利点
グリッドを設定した後、EAは現在のグリッドが利損をもって決済されれるまで、新しい外部注文をグリッドに追加しません。
取引システムに基づく推奨事項:十分なボリュームと明確な動きを特徴とする銘柄を選択します。さらに、ポジションのロールオーバーを除外して、その市場の深さが空にならないようにすることをお勧めします。また、ニュースやロールバックのない一方向の動きは避けてください。
前と同じ操作(ロングポジションでの買いまたはショートポジションでの売り)をより良い価格で実行した場合、この取引システムには、平均化を使用したレベルからの取引が含まれま(Nayman E.「Master-Trading:Secret Materials」p. 134)。
平均化の主な欠点は、市場がどれだけ不利になるか事前にわからないことです。同時に、平均化には追加の証拠金を投資する必要があり、ポジションのリスクが高まります。ほとんどの初心者トレーダーはよくある間違いを犯します。高利益を追求するために、自分の口座を「オーバーロード」し、レバレッジのを極端に高くし、時には利用可能なすべての資金をさらすことさえあります(Nayman E.「Master-Trading:Secret Materials」p. 135)
この取引アプローチの主な特徴は、最小レベルと最大レベルの値を設定して、取引銘柄の指定された価格範囲内で指値注文で取引できることです。
上下のレベルにストップロスを設定することで、取引口座の損失を制限できます。
ストップロスがトリガーされると、ターミナルは価格によるレベルのブレイクスルーとブレイクスルーに向けた動きの可能性を通知します。その結果、新しい価格レベルを再分析し、その値をグリッド取引 EA (以下に添付) の外部パラメータに設定する必要がある場合があります。
4.グリッド取引の実装
4.1. グリッド取引メカニズムグリッド取引の段階は次のとおりです。
-
初期構造 - EAは選択された取引銘柄で起動されます
-
注文グリッドの最初の指値注文がトリガーされると、ポジションが開かれます
-
後続のグリッド注文がトリガーされる (最初のポジションを増やすか減らす) と、グリッドが更新されます
-
ストップロス、テイクプロフィット、現在のポジションの取引時間制限、利益%によるエグジットはトレーダーの裁量に任されています
-
グリッドEAによる取引の制御 - 現在の収益性の高いグリッド取引セッションを終了し、取引された銘柄の新しい関連する高値と安値に再設定します
このグリッド戦略は、最初のポジションなしで開始されます。最初の立ち上げ後に市場が最も近い未決注文価格を超えたときに、最初のポジションがアクティブになります。
例
2022年4月1日に戦略パラメータを次のように設定したとします。
- 契約:先物VBM2
- 下限価格:RUB 1,600
- 上限価格:RUB 2,800
- グリッド内の要素数:10
- モード:等距離
戦略パラメータを次のように設定したとします。
最初のニュートラルグリッドの買い注文は、現在の市場価格よりも低く設定されます。一方、売り注文は現在の市場価格よりも高く設定されます。最も近い買いまたは売りの指値注文をトリガーした後、いわゆるプロセスが発生します。これを「取引グリッドのアクティブ化」と呼びましょう。その後の取引ではすでに9つの注文が使用されます。
注文タイプ別の価格分布は次のとおりです。
- 買い指値: RUB 1,600、RUB 1,733、RUB 1,866、RUB 1,999
- 売り指値:RUB 2,135、RUB 2,268、RUB 2,401、RUB 2,534、RUB 2,667、RUB 2,800
(中程度のリスクで最適な利益を得るために、D1でATR指標のパーセンテージに応じてグリッドに注文を配置する最適なオプションを経験的に検討することもできます)。
実行されたすべての注文の概要
各トランザクションは、対応する買い注文と売り注文のペアで構成されます(FILO(先入れ、後出し)トランザクションタイプ)。利益は、一致した買い注文と売り注文の各ペアに基づいて計算できます。
下限(LOW_PRICE_BuyLim)から上限(HIGH_PRICE_SellLim)までの範囲を、指定した注文数(Number_of_elements_in_the_grid)で等間隔に分割します。グリッド内の注文の範囲と数(3から始まる)を個別に見て選択することをお勧めします。これにより、注文間の合計幅が銘柄スプレッドよりも大きくなり、境界線の価格値が現在の価格の範囲外になります。
さらに、価格範囲の上限(HIGH_PRICE_SellLim)は、範囲の下限(LOW_PRICE_BuyLim)を超えている必要があります。
4.2.グリッドの更新
グリッドは、いずれかの価格レベルに到達するたび、つまり指値注文が実行されるたびに更新されます。以下の例に示すように、最後に実行された注文は常に空のままで、買いと売りの指値注文が設定された価格で実行されます。
たとえば、この場合、最初の売り指値注文によるグリッド戦略のアクティブ化とそれに続くVBM2先物契約の上昇後、および次の売り指値注文のアクティブ化後、グリッド(買い指値注文の数)は1つの買い指値注文によって増加します。つまり、グリッドの前の買い指値注文よりも1ステップ高く (価格に近く)配置されます。
特に、グリッド取引の有効化、価格上昇の動き、およびグリッドの有効化以降の最初の売り指値注文の有効化の後、各グリッドレベルの指値価格は次のようになります。
価格(RUB) | 注文/ポジションの方向とタイプ |
---|---|
2,534 | 指値注文による売り |
2,401 | 指値注文による売り |
2201.5 | 2つの最初の売り指値注文のボリュームでのポジション |
2,132 | 指値注文による買い |
1,999 | 指値注文による買い |
1,866 | 指値注文による買い |
1,733 | 指値注文による買い |
1,600 | 指値注文による買い |
これは、次の図に表示されています。
図2:アクティブ化後の注文グリッドの更新と次の指値注文のトリガー
したがって、注文グリッドの更新が続行されます。
グリッドパラメータ:
//+------------------------------------------------------------------+ //| EXTERNAL GRID VARIABLES //+------------------------------------------------------------------+ input int Volume = 1; //Contract/lot volume input double HIGH_PRICE_SellLim = 2800.00; //HIGH_PRICE_SellLim (the upper price of the last SellLim grid order) input double LOW_PRICE_BuyLim = 1600.00; //LOW_PRICE_BuyLim (the lower price of the last BuyLim grid order) for BuyLim input double HIGH_PRICE_SL = 100.00; // HIGH_PRICE_SL: SL in points from HIGH_PRICE_SellLim (the upper stop loss price) for SellLim input double LOW_PRICE_SL = 100.00; // LOW_PRICE_SL: SL in points from LOW_PRICE_BuyLim (lower stop loss price) for BuyLim input int Pending_order_period = 12; // Pending_order_period: limit order setting time in months input int Number_of_elements_in_the_grid = 10; // Number of elements in the grid (number of limit orders) input double TakeProfit = 0; // TakeProfit from the setting price in order pips input double Profit_percentage = 0; // Profit_percentage - grid closure % in profit // works if > "0" input bool Continued_trading = false; // Continued_trading - whether to continue trading after exiting by the grid closure % with profit input int Time_to_restrict_trade = 0; // Time_to_restrict_trade - setting the expiration time (in days) for a position with profit // (exiting the market upon the period end in days) input int Magic = 10; // Magic Number
外部変数の名前とそのデコードは可能な限り詳しく作成されているため、追加のコメントは必要ありません。
また、変数
HIGH_PRICE_SellLim
をMOEXが定めた(設定した)上限値以下、
LOW_PRICE_BuyLim
を下限値以上に設定します。
https://www.moex.com/en/contract.aspx?code=VTBR-6.22
必要なすべてのデータは、MOEX銘柄パラメータに表示されます(図3)。
図3:銘柄パラメータ - VTB Bank (PJSC) VTBR-6.22の普通株の先物契約
取引アプローチは図4.2に示されています。
その結果、ここで説明するグリッド取引EAを起動した後、選択した銘柄でのロボット取引に関する詳細情報を取得する必要があります(図4.1および4.2)。
図4.1:VTBR-6.22でのグリッドEAの使用
ストップロスとテイクプロフィットがゼロ以外の値の場合、アクティブな売買の指値注文に加えて、それらのレベルも取引ターミナルに表示されます。
図4.2:VTBR-6.22でグリッドEAをゼロ以外のストップロスとテイクプロフィット値で使用する
その結果、最小価格範囲と最大価格範囲内でアクティブ化中にリセットされる指値注文のグリッドがあります。
取引された銘柄の価格が価格範囲内に収まるまで、グリッドEAは取引口座に利益を蓄積します。このタイプのグリッド取引の明らかな欠点、つまりレンジ内で予想される価格の動きではなく、どの方向にもロールバックしない強い動きを考慮したとしても、次のように言えます。
- まず、そのような動きは「頻繁」ではありません
- 第2に、価格が正しく選択された範囲と注文数を離れるまでに、現在の損失を補うのに十分な利益がアカウントに既に存在します。
- 第3に、価格が価格帯の最大値と最小値の間で変動(移動)し、売買取引の両方が発生するまで、取引口座は利益を上げています。
結論
グリッドに基づいた取引アプローチ全体と同様に、ここで検討するグリッドEAは、価格が指定された範囲内にあるかどうかを制御する必要があります。価格がその境界の1つに近づくと、指値注文でグリッド取引を停止し、新しいボリュームで新しいレンジで開始することができます。
グリッドは、トレンド(このオプションについては記事の次の部分で説明します)またはレンジ(現在の記事で説明します)から利益を得るために作成できます。グリッドに基づいた取引では、常にリセットされる指値注文に基づくEAを使用した取引が考慮されます。つまり、価格が横方向に変動し続ける限り、売り注文と買い注文の両方が実行されます。
一方向の価格変動のリスクは、指値注文のストップロスレベルを設定することによって制御されます。その結果、ここで提供されているEAにより、通常は修正的な価格変動が続く突然の市場ドローダウン(成長)を回避できます。つまり、価格帯、約定値、グリッド注文数を選択し、ストップロスとテイクプロフィットを正しく選択すれば、市場を常に監視する必要がなくなり、ドローダウンを回避できます。
ここで説明するグリッド戦略は、金融または投資のアドバイスと見なされるべきではありません。グリッド取引は、ご自分の裁量と自己責任で使用してください。つまり、ご自分の財務能力に基づいて取引を管理し、合理的な方法でおこなってください。
参照文献:
Nayman, E., (2002)Master-Trading:Secret Materials.モスクワ、アルピナ出版社(ロシア語)。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/10672
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索