解決済み

変動するレバレッジの数値を取得する方法

2024/01/15 19:21
211

指標発表前後・銘柄によってレバレッジが変化する(日によって変動タイミングが違う)ブローカーでEAを回す際に、レバレッジの変化をMQLで取得する方法はありますでしょうか?
AccountInfoInteger(ACCOUNT_LEVERAGE) は口座に設定されたレバレッジが出て、実際の変動と連動しません。
OrderCalcMarginならいけますか?

コメント

GogoJungle
2024/01/15 20:55

情報を持ち合わせておらず申し訳ございません。

独自のAPIを提供している可能性もございますので
ご利用の会社に確認するのがよろしいかと存じます。

何卒よろしくお願い申し上げます。

kkkk
2024/01/16 13:39

APIは無くメールで連絡のみの模様です。(Exness)
この場合、MQLでは取得不可なのでしょうか?

GogoJungle
2024/01/16 14:33

情報を持ち合わせておらず下記は検証の提案でございます。

ACCOUNT_LEVERAGEやOrderCalcMarginについて
定期的にログ(レートや各種関数の結果)を出力し
レバレッジ変更のメールが来たタイミングでログの値が
変化しているかを検証するのがよろしいかと存じます。

何卒よろしくお願い申し上げます。

kkkk
2024/01/24 23:35

検証しました。
OrderCalcMarginもAccountInfoInteger(ACCOUNT_LEVERAGE) も口座に設定されたレバレッジが出て、実際の変動と連動しません。
どうにかして自動でデータを取得する方法はないのでしょうか?

GogoJungle
2024/01/25 11:03

検証ありがとうございました。

上記結果によりMT5の仕様上、MT5で検知するのは困難かと存じますので
メールで変更が必ず配信される前提でございますが、メールの受信をトリガーとして、
スマホに通知する仕組み(検知できる仕組み)を独自で構築するのが良いかと存じます。

解決になっておらず申し訳ございませんが、何卒よろしくお願い申し上げます。

kkkk
2024/01/25 12:53

なるほど了解しました。いつもありがとうございます。

EA郎
2025/06/28 20:18

需要は無さそうですが、検出できないという間違った結論になっているので念のため、コメントを残します。
ペアのレバレッジを調べる関数は存在しませんが、必要証拠金を使って算出できます。

口座が円建てで、ペアがドル価格なら
ペアのレバレッジ = 価格 × 契約サイズ × ドル円価格 ÷ 必要証拠金

ドル建てで、ペアがドル価格なら
ペアのレバレッジ = 価格 × 契約サイズ ÷ 必要証拠金

■MT5
double Margin,PearLeverage;
bool orderCalcMargin = OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin); // 1ロットの証拠金をMarginに代入

// ゴールド・原油・2文字以降にUSDを含むペアの場合、最大レバを計算してPearLeverageに代入
if (StringFind(Symbol(), “GOLD”) >= 0 || StringFind(Symbol(), “OIL”) >= 0 || StringFind(Symbol(), “USD”) > 0){
if(AccountInfoString(ACCOUNT_CURRENCY) == “JPY”){ // 円建て口座
PearLeverage = SymbolInfoDouble(Symbol(), SYMBOL_BID) * SymbolInfoDouble(Symbol(), SYMBOL_TRADE_CONTRACT_SIZE) * SymbolInfoDouble(“USDJPY”, SYMBOL_BID) / Margin + 0.9;
}else{ // ドル建て口座
PearLeverage = SymbolInfoDouble(Symbol(), SYMBOL_BID) * SymbolInfoDouble(Symbol(), SYMBOL_TRADE_CONTRACT_SIZE) / Margin + 0.9;
// それ以外のペアの場合、口座の最大レバをPearLeverageに代入
}else{
PearLeverage = AccountLeverage();
}

■MT4
double Margin;

// ゴールド・原油・2文字以降にUSDを含むペアの場合、最大レバを計算してPearLeverageに代入
if(StringFind(Symbol(), “GOLD”) >= 0 || StringFind(Symbol(), “OIL”) >= 0 || StringFind(Symbol(), “USD”) > 0){
if(AccountCurrency() == “JPY”){ // 円建て口座
PearLeverage = MarketInfo(Symbol(),MODE_BID) * MarketInfo(Symbol(), MODE_LOTSIZE) * MarketInfo(“USDJPY”, MODE_BID) / MarketInfo(Symbol(),MODE_MARGINREQUIRED) + 0.9;
}else{ // ドル建て口座
PearLeverage = MarketInfo(Symbol(),MODE_BID) * MarketInfo(Symbol(), MODE_LOTSIZE) / MarketInfo(Symbol(),MODE_MARGINREQUIRED) + 0.9;
// それ以外のペアの場合、口座の最大レバをPearLeverageに代入
}else{
PearLeverage = AccountLeverage();
}

使えない口座は、「USDJPY」のペア名が存在しない口座、ドル・円建て以外の口座。
個人で使ったり国内で配布したりする分にはそんな口座を使う事はまず無いはずです。

ドル建てのペアを前提としていて、円建ての商品にも対応していません。
修正すればいくらでも対応幅は広げられますので用途に応じて加筆して下さい。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。