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

 
the size of local variables is too large (more than 512kb)

Что значит такая ошибка при компиляции и как ее лечить? Вот есть у меня класс, там около 80,000 строк. Ну что мне из него теперь два класса делать что ли? Ерунда какая-то. Какой смысл тогда в этой 64-битной версии, если так всё ограничено выходит?
 
Juer:
Как можно определить, что именно вызывает долгую компиляцию (свыше 10 минут). Получаемый ex5 файл весит около 12мб, не так уж и много. Как диагностировать и устранить причины, вызывающие столь длительную компиляцию?

https://www.mql5.com/ru/forum/165399#comment_3968004

Optimize=0

С этим вроде разобрался.

Время компиляции
Время компиляции
  • 2017.01.02
  • www.mql5.com
Всем привет! Код компилируется очень долго (около минуты). Строк кода - около 4000. От чего зависит время и как можно ускорить...
 
При модификацию Ордера , перед point= , нужно указать ордер о котором относится OrderGetDouble 
 
Ivan Ivanov:
При модификацию Ордера , перед point= , нужно указать ордер о котором относится OrderGetDouble 

Спасибо Ivan, я пробую, но у меня что то не получается.

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

Так как в самой конструкции модификации ордера обязательным полем заполнения является ticket и нет типа ордера.

m_trade.OrderModify(ticket,Bid-(SHAG_s*_Point),Ask+((SLL_s-SHAG_s) *_Point),Ask-((TPP_s+SHAG_s)*_Point),0,0,0);

В моём случае есть два открытых ордера Buy_Stop и Sell_Stop. Последовательность их открытия может быть любой. 

Номер Тикета мне тут ни чем не помогает. 

В условии проверки, я могу узнать есть ли среди открытых ордеров - ордер Sell_Stop (например).

Но не могу понять, как мне обратится именно к этому ордеру Sell_Stop. что бы при вызове OrderModify

модифицировался именно Sell_Stop, а не то что случайно попало под тикет.

У меня ощущение, что синтаксис языка заставляет меня перебирать все ордера по тикету, только ради того, что бы я заполнил поле тикет в OrderModify.

Вот тут я запутался с модификацией ордеров. Потерял логику процесса...

 

Существует ли функция для присоединения к графику эксперта? Наподобие ChartIndicatorAdd().

Или как программно присоединить эксперт к заданному графику, если нет шаблона?

 

Как перевести на mql5?

OP_LOTS = (((AccountBalance() * _LosPercent) / 100) / MarketInfo(Symbol(), MODE_TICKVALUE)) / (pp);
        OP_LOTS = MathRound(OP_LOTS / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
        OP_LOTS = MathMax(OP_LOTS, MarketInfo(Symbol(), MODE_MINLOT));
        OP_LOTS = MathMin(OP_LOTS, MarketInfo(Symbol(), MODE_MAXLOT));
 
Sprut112:

Как перевести на mql5?

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double lotMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
double lotMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double lotStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
Будет работать в обоих версиях.
 

Пожалуйста подскажите.

В справке есть пример: Общий алгоритм работы с ордерами.

  {
//--- получим общее количество ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
   {
   ResetLastError();
//--- скопируем в кэш ордер по его номеру в списке
   ulong ticket=OrderGetTicket(i);
   if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
   {
   double price_open   =OrderGetDouble(ORDER_PRICE_OPEN);
   datetime time_setup =OrderGetInteger(ORDER_TIME_SETUP);
   string symbol       =OrderGetString(ORDER_SYMBOL);
   long magic_number   =OrderGetInteger(ORDER_MAGIC);
   if(magic_number    ==m_magic)
   {
//  обработаем ордер с заданным ORDER_MAGIC
   }
   PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
   }
   else  // вызов OrderGetTicket() завершился неудачно
   {
   PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
   }
   }
  }

При компиляции возникает предупреждение на тип datetime  видимо конфликт преобразования из типа в тип. 

Не могу понять в чём проблема, по справке  ORDER_TIME_SETUP имеет тип datetime.

В чём проблема, и как её решить?

 
vladzeit:

Пожалуйста подскажите.

В справке есть пример: Общий алгоритм работы с ордерами.

При компиляции возникает предупреждение на тип datetime  видимо конфликт преобразования из типа в тип. 

Не могу понять в чём проблема, по справке  ORDER_TIME_SETUP имеет тип datetime.

В чём проблема, и как её решить?

datetime time_setup =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
//....
long magic_number   =(long)OrderGetInteger(ORDER_MAGIC);

Есть такое у OrderGetInteger нужно приводить к нужному типу, то-же самое и с INT

 
Konstantin Nikitin:

Есть такое у OrderGetInteger нужно приводить к нужному типу, то-же самое и с INT

Спасибо за пример.

Уточните ещё пожалуйста... правильно ли понял.

вот этим самым  =(datetime)OrderGetInteger. мы указываем OrderGetInteger принять явный тип datetime. ? 

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

Хочу понять, это правило или просто нужно запомнить как частный случай.  

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