ロットサイズを自動調整する機能をEAに組み込む!プログラム書き方やサンプルコードあり!

ザフナーラボブログ

取引口座の純資産額に対して、何倍のレバレッジで取引するかを指定し、それに応じたロットサイズに調整するためのプログラミング方法について解説します。

1.ロットサイズを算出する計算式

まず、レバレッジ1倍で取引するするために必要な証拠金額を算出します。この値は、以下の計算式により算出されます。

Leverage-One-Time

レバレッジ1倍で取引するのに必要な証拠金額

次に、取引口座の純資産額において、レバレッジ1倍で取引する際のロットサイズを算出します。この値は、以下の計算式により算出されます。

Lot-Size-in-Leverage-One-Time

レバレッジ1倍で取引する際のロットサイズ

次に、指定したいレバレッジ数を乗じます。

Lot-Size-in-Specified-Leverage

指定したレバレッジで取引する際のロットサイズ

上記計算式によって算出される値が、指定したレバレッジで取引する際のロットサイズとなります。

2.関数を作成する

上記の計算式を基にして、以下のような関数(LeverageLotSizing()関数)を作成します。

LeverageLotSizing-Function

 

⑴ 引 数

LeverageLotSizing()関数は、以下の引数を持っています。

  • int Trade_Leverage
    取引口座の純資産額に対して、何倍のレバレッジで取引するかを指定します。

⑵ 指定したレバレッジでのロットサイズの算出

  • AccountEquity()関数(詳細は「こちら」を参照してください。)で取引口座の純資産額を取得しています。
  • MarketInfo()関数(詳細は「こちら」を参照してください。)で最低必要証拠金額を取得しています。
  • AccountLeverage()関数(詳細は「こちら」を参照してください。)で取引口座の最大レバレッジを取得しています。
  • 算出されたロットサイズを、変数「Trade_Lots」に格納しています。

⑶ ロットサイズを調整する(その1)

ロットサイズの最小変動幅(=ロットステップ)は、業者によって異なります。

そのため、例えば、⑴で変数「Trade_Lots」に格納された値が「0.12」であった場合には、ロットサイズを「0.1」刻みで算出する業者においては、そのままではOrderSend()関数(詳細は「こちら」を参照してください。)を使用して注文を出すことができません。

そこで、MarketInfo()関数(詳細は「こちら」を参照してください。)を使用してロットステップを取得し、NormalizeDouble()関数(詳細は「こちら」を参照してください。)を使用して以下のような処理を行うようにしています。

  • ロットステップが「0.1」であれば変数「Trade_Lots」に格納されている値を小数点以下1桁で四捨五入する。
  • ロットステップが「0.01」であれば変数「Trade_Lots」に格納されている値を小数点以下2桁で四捨五入する。

⑷ ロットサイズの調整をする(その2)

MarketInfo()関数(詳細は「こちら」を参照してください。)を使用して、以下のような処理を行うようにしています。

  • 変数「Trade_Lots」に格納されている値が、取引口座の最小ロットサイズ以下の場合は、変数「Trade_Lots」に取引口座の最小ロットサイズを格納する。
  • 変数「Trade_Lots」に格納されている値が、取引口座の最大ロットサイズ以上の場合は、変数「Trade_Lots」に取引口座の最大ロットサイズを格納する。

⑸ 計算結果を返す

return()文で、最終的に変数「Trade_Lots」に格納された値を返します。