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

 
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 баксов за ответ?

)

Ждемс...

 
new-rena:

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

)

Ждемс...

Ну, если вопрос будет требовать индивидуальной работы и результатом будет готовый код, то все может быть...
 

Добрый день. В индикаторе необходимо получить данные из другого индикатора, при загрузке индикатора история отображается, новые значения не обновляются, подскажите в чём ошибка в цикле или ещё где:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,   // Количество просчитанных баров
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int limit;
   int counted_bars = IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit = Bars - counted_bars - 500;
   for (int i=limit; i>=0; i--)
   {
     Buf_1[i]=iCustom(Symbol(), 0,"ATR", 0, i);//При подстановке любого индикатора нет обновления!!!
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+