[MQL4] 値幅を基準通貨の金額に換算する方法
ここで紹介している SYMBOL_TRADE_TICK_VALUE
は Strategy Tester の中では使用できないのでご注意ください。
[MQL4] SYMBOL_TRADE_TICK_VALUE は過去の値がとれない | Strategy of C
「ストップロスに引っかかったらどれくらいの損失になるのか」等、値幅を基準通貨の金額に換算したいケースがあります。
そういった場合、SystemInfoDouble() の SYMBOL_TRADE_TICK_VALUE
を使うと、値幅を基準通貨の金額に換算することが出来ます。
なお、SystemInfoDouble() の代わりに MarketInfo() を使っても同じ結果が出るとは思いますが、 環境によっては、どちらか一方しか動かない可能性もあるので、事前に確認してください。
参考
1ロットあたりの金額を求める
ある値幅を基準通貨の金額に換算するには、以下のようにします。 この時の金額は 1ロット分です。
1 2 3 4 5 6 | // (high - low) = 値幅が与えられているとして (high > low) // 値幅が 何 ticks 相当か計算する double ticks = (high - low) / SymbolInfoDouble ( Symbol (), SYMBOL_TRADE_TICK_SIZE); // SYMBOL_TRADE_TICK_VALUE は 1 tick 当たりの基準通貨の金額になるので、ticks とかけると金額が求まる double price_per_lot = ticks * SymbolInfoDouble ( Symbol (), SYMBOL_TRADE_TICK_VALUE); |
実際の金額に変換する
上記の値は 1ロット当たりの金額なので、実際に取引するロット数をかければ基準通貨での金額になります。
例えば、以下は最小ロット1で取引した場合の金額を求める方法です。
1 2 | // 最小ロットでの金額を求める。 double price_per_min_lot = price_per_lot * MarketInfo ( Symbol (), MODE_MINLOT); |
なお、ロットに関する情報は SystemInfoDouble() で取れないようなので、MarketInfo() を使用しています。
基準通貨を含まない通貨ペアは不正確
この方法、便利なのですが、基準通貨を含まない通貨ペアの場合、正確な値は求められないので注意してください。
例えば、基準通貨が日本円で EUR/GBP の取引をする場合、値幅を円に変換するには GBP/JPY の値を(内部で)使用します。しかし、GBP/JPY も変化していますし、将来どのように動くかはわかりません。 つまり、あくまで現在の GBP/JPY を使った換算値しか求められないということになります。
決済済みポジションの損益
余談ですが、決済済みポジションの損益は、OrderProfit() で求められます。