Как прировнять обьёмы (Лоты) разных пар

 

Я пытаюсь открыть позицию по разным парам, к примеру AUDUSD, GBPUSD, XAUUSD, GBPJPY. И пытаюсь прировнять лоты

вот небольшой скрипт

int start()

{
//----
string pair="AUDUSD";
Print("LotToUSD("+pair+")="+LotToUSD(pair));

pair="GBPUSD";
Print("LotToUSD("+pair+")="+LotToUSD(pair));

pair="XAUUSD";
Print("LotToUSD("+pair+")="+LotToUSD(pair));

pair="GBPJPY";
Print("LotToUSD("+pair+")="+LotToUSD(pair));
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double LotToUSD(string P){

double InfoAsk=MarketInfo(P,MODE_ASK);
if(InfoAsk==0)return(0);

// if USD Start
string IfUSD=StringSubstr(P,3,3);
if(IfUSD=="USD")return(1/InfoAsk);

IfUSD=StringSubstr(P,0,3);
if(IfUSD=="USD")return(1);
// if USD Start

IfUSD="USD"+IfUSD;
InfoAsk=MarketInfo(IfUSD,MODE_ASK);
if(InfoAsk!=0)return(InfoAsk);

IfUSD=StringSubstr(P,0,3);
IfUSD=IfUSD+"USD";
InfoAsk=MarketInfo(IfUSD,MODE_ASK);
if(InfoAsk!=0)return(1/InfoAsk);

return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


ВОТ ЧТО ВЫВОДИТ ЭТОТ СКРИПТ:
LotToUSD(GBPJPY)=0.60388297
LotToUSD(XAUUSD)=0.00079284
LotToUSD(GBPUSD)=0.60383921

LotToUSD(AUDUSD)=1.14142221

Что то не совсем правильно особенно с XAUUSD

вот что он делает:

USDXAU = 1/XAUUSD
USDGBP = 1/GBPUSD
USDAUD = 1/AUDUSD
GBPJPY = 1/GBPUSD
 
bird:

Я пытаюсь открыть позицию по разным парам, к примеру AUDUSD, GBPUSD, XAUUSD. И пытаюсь прировнять лоты

вот небольшой скрипт

int start()

{
//----
string pair="AUDUSD";
Print("LotToUSD("+pair+")="+LotToUSD(pair));

pair="GBPUSD";
Print("LotToUSD("+pair+")="+LotToUSD(pair));

pair="XAUUSD";
Print("LotToUSD("+pair+")="+LotToUSD(pair));
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double LotToUSD(string P){

double InfoAsk=MarketInfo(P,MODE_ASK);
if(InfoAsk==0)return(0);

// if USD Start
string IfUSD=StringSubstr(P,3,3);
if(IfUSD=="USD")return(1/InfoAsk);

IfUSD=StringSubstr(P,0,3);
if(IfUSD=="USD")return(1);
// if USD Start

IfUSD="USD"+IfUSD;
InfoAsk=MarketInfo(IfUSD,MODE_ASK);
if(InfoAsk!=0)return(InfoAsk);

IfUSD=StringSubstr(P,0,3);
IfUSD=IfUSD+"USD";
InfoAsk=MarketInfo(IfUSD,MODE_ASK);
if(InfoAsk!=0)return(1/InfoAsk);

return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


ВОТ ЧТО ВЫВОДИТ ЭТОТ СКРИПТ:

LotToUSD(XAUUSD)=0.00079284
LotToUSD(GBPUSD)=0.60383921
LotToUSD(AUDUSD)=1.14142221

Что то не совсем правильно особенно с XAUUSD


Не совсем понял, что именно Вы хотите. Попробуйте плясать от такой "печки"

double LotToUSD(string P, double BasicContractSize){
   double ContractSize  = MarketInfo( P, MODE_MARGINREQUIRED ) * AccountLeverage();
   
   if ( ContractSize > 0 && BasicContractSize > 0 )
      rerurn( BasicContractSize / ContractSize );
   else
      return(0);
}

Здесь BasicContractSize - размер контракта в валюте депозита (например, 100000)

Причина обращения: