Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 662

 
Sergey Gritsay:
К сожалению в MQL5 нет аналога свойства MarketInfo(symbf,MODE_MARGINREQUIRED)  точно не помню, но где-то на форуме уже обсуждалась эта тема
OrderCalcMargin
OrderCalcMargin Вычисляет размер маржи, необходимой для указанного типа ордера на текущем счете и при текущем рыночном окружении без учета текущих отложенных ордеров и открытых позиций. Позволяет оценить размер маржи для планируемой торговой операции. Значение возвращается в валюте счета. bool  OrderCalcMargin ( ENUM_ORDER_TYPE   action,   // тип ордера string   symbol,   // имя символа double   volume,   // объем double   price,   // цена открытия double& margin   // переменная для получения значения маржи ); Параметры action [in] Тип ордера, может принимать значения из перечисления ENUM_ORDER_TYPE. symbol [in] Имя финансового инструмента. volume [in] Объем торговой операции. price [in] Цена открытия. margin [out] Переменная, в которую будет записан необходимый размер маржи в случае успешного выполнения функции. Вычисление производится как если бы на текущем счете не было отложенных ордеров и открытых позиций. Значение маржи зависит от многих факторов и может меняться при...
Документация | 2015.12.03 14:00
 
forexman77:

Необходимо получить программно,  размер свободных средств, необходимых для открытия 1 лота на покупку в MQL5, аналог MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED);"

Попробуйте функцию OrderCheck().
 
Alexey Kozitsyn:
Попробуйте функцию OrderCheck().
Спасибо! Разобрался.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
 
forexman77:
Спасибо! Разобрался.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
Да, можно и так, но в случае с OrderCheck() ей скармливается уже готовая для отправки структура торгового запроса непосредственно перед самим запросом.
 

Такой  вопрос, я хочу часть кода перенести в функцию, но что б результатом функции был не возврат значения, а собственно изменение значений переменных, как это сделать?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

 
-Aleks-:

Такой  вопрос, я хочу часть кода перенести в функцию, но что б результатом функции был не возврат значения, а собственно изменение значений переменных, как это сделать?

так не поможет?

int OpenOrdersInfo()

{

...

return(0);

}

 
-Aleks-:

Такой  вопрос, я хочу часть кода перенести в функцию, но что б результатом функции был не возврат значения, а собственно изменение значений переменных, как это сделать?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

дык все тут нормально получилось  VOID не возвращает результат. 

 
-Aleks-:

Такой  вопрос, я хочу часть кода перенести в функцию, но что б результатом функции был не возврат значения, а собственно изменение значений переменных, как это сделать?

Можно так попробовать, но решение не из лучших:

int CountExpOrder_OS=0,CountExpOrder_OB=0,CountMarketOrder_OS=0,CountMarketOrder_OB=0;

OpenOrdersInfo(CountExpOrder_OS,CountExpOrder_OB,CountMarketOrder_OS,CountMarketOrder_OB);
  Print("Ордеров на покупку(Magic: ",Magic,")=",CountExpOrder_OB);
  Print("Ордеров на продажу(Magic: ",Magic,")=",CountExpOrder_OS);
  Print("Позиций на покупку(Magic: ",Magic,")=",CountMarketOrder_OB);
  Print("Позиций на продажу(Magic: ",Magic,")=",CountMarketOrder_OS);


void OpenOrdersInfo(int &CountExpOrder_OS,int &CountExpOrder_OB,int &CountMarketOrder_OS,int &CountMarketOrder_OB)
 {
  CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));
  CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));
  CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));
  CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));
 }
 
Vladislav Andruschenko:

дык все тут нормально получилось  VOID не возвращает результат. 

Да, получается верно - просто был косяк с моей стороны и я впал в ступор.

Всем спасибо за помощь.

 

Сейчас по пятерке буду вопросы задавать :) 

 
-Aleks-:

Да, получается верно - просто был косяк с моей стороны и я впал в ступор.

Всем спасибо за помощь.

 

Сейчас по пятерке буду вопросы задавать :) 

5 баксов за ответ?

)

Ждемс...

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