Ошибки, баги, вопросы - страница 2013

 

Как к чужому Маркет-советнику прикрутить фреймовый функционал, чтобы иметь возможность получить ту же историю торгов бэктеста?

Сейчас для этого нужно использовать WinAPI. Костыльно получается.

 
prostotrader:

Почему так?

Код

Наверно, имелось в виду DoubleToString(xxx, 2). Когда второй параметр опущен, он по-умолчанию равен 8.

 
Stanislav Korotky:

Наверно, имелось в виду DoubleToString(xxx, 2). Когда второй параметр опущен, он по-умолчанию равен 8.


Я понял, поэтому убрал сообщение

 

МТ4 build 1090

при компиляции .mqh компилятор неправильно интерпретирует области видимости переменных, ограниченные фигурными скобками

for,while,if и т.д.

если локально объявлена переменная, то потом ругается на повторное объявление

void test1()
  {
   int total=1;
   for(int i=0;i<total;i++)
     {
      int a=0;
     }
   for(int i=0;i<total;i++)//в mqh 'i' - variable already defined
     {
      int a=0;//в mqh 'a' - variable already defined
     }
   Print(a);//в mqh компилятор здесь молчит
  }

если заинклудить тот же код, то правильно


это известный баг или создать заявку в СД?

 
Kirill Belousov:

МТ4 build 1090

при компиляции .mqh компилятор неправильно интерпретирует области видимости переменных, ограниченные фигурными скобками

for,while,if и т.д.

если локально объявлена переменная, то потом ругается на повторное объявление

если заинклудить тот же код, то правильно

это известный баг или создать заявку в СД?


В сервисдеск ещё рано - возможно Вы допускает ошибку в программировании. Но сначала код, пример использования и подробное описание ошибки. 

 
Kirill Belousov:

МТ4 build 1090

при компиляции .mqh компилятор неправильно интерпретирует области видимости переменных, ограниченные фигурными скобками

#property strict
 
fxsaber:
#property strict

Помог.

в МТ5 без него работает нормально. Для чего разный подход?

Или это исторические хвосты?

 
Kirill Belousov:

это исторические хвосты?

Да.

 
fxsaber:

Да.

Понятно.

//---

Подскажите, 

AccountFreeMarginCheck(...)


Откуда берет значение - запрос брокеру или как-то рассчитывается локально (можно формулу).

Вопрос возник в связи с тем, что у брокера в условиях написано, что при открытии усреднения с лотом, превышающим на 50% и более предыдущую позицию того же направления (находящуюся в рынке), может быть применено плечо, отличное от плеча на счете и паре. Т.е. если я правильно понимаю, то фактически AccountLeverage() бесполезен для такого случая

 
Kirill Belousov:

Подскажите, 

AccountFreeMarginCheck(...)


Откуда берет значение - запрос брокеру или как-то рассчитывается локально (можно формулу).

Локально.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Советники: Quantum 103

fxsaber, 2017.09.26 09:55

double AccountFreeMarginCheck(const string Symb,const int Cmd,const double dVolume)
{
 double Margin;

 return(OrderCalcMargin((ENUM_ORDER_TYPE)Cmd, Symb, dVolume,
        SymbolInfoDouble(Symb, (Cmd == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID), Margin) ?
        AccountInfoDouble(ACCOUNT_MARGIN_FREE) - Margin : -1);
}

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.02.27 18:40

// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
  double MarginInit, MarginMain;

  const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
  
  margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
                 (SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
  
  return(Res);  
}