Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1240

 

Добрый день.

Имею странную проблему.

Терминал МТ4. На каждом графике порядка 15 индикаторов (стандартных и своих самописных). В некоторых случаях если удалять индикатор через список индикаторов (Ctrl + i) - терминал наглухо вешается. При этом, если тот же индикатор попытаться удалить нажав правой кнопкой мыши на линию или стрелку, нарисованную индикатором через буфер, и выбрав пункт меню "Удалить индикатор" - индикатор удаляется мгновенно и без проблем. Больше всего выбешивает, что проблема плавающая: то один индикатор зависает при удалении, то другой.... то один и тот же индикатор подвешивает терминал, то не подвешивает.

Всвязи с описанным 2 вопроса:

1) с чем может быть связано зависание терминала при удалении индикатора через список индикаторов?

2) в чем разница между двумя способами удаления индикаторов, которые я описал выше?

 
satorifx:

Имею странную проблему

Попробуйте погонять сначала семь индикаторов вместе, если проблем не обнаружится, тогда оставшиеся 8 отдельно. Если будут проблемы, снова разделите пополам. Так найдётся виновник или два. А если ничего не выявится убирайте по одному от 15. Метод тыка при работе с чёрным ящиком даёт результат при навыке и терпении.
 
Обработчик событий MT5, CHARTEVENT_CUSTOM OnChartEvent () знает, что он работает с несколькими потоками.

Можно ли создать потокобезопасную логику внутри обработчика OnChartEvent ()?

Можете ли вы вообще написать поточно-ориентированный код на MQL5?
 
Подскажите пожалуйста! Если я вызываю в эксперте пользовательский индикатор через iCustom, как сделать чтобы в эксперт вывести входные параметры этого индикатора? Исходник индикатора есть. Это вообще сложно?
 
Sayberix:
Подскажите пожалуйста! Если я вызываю в эксперте пользовательский индикатор через iCustom, как сделать чтобы в эксперт вывести входные параметры этого индикатора? Исходник индикатора есть. Это вообще сложно?

Записывайте в порядке перечисления свойств как в индикаторе

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );


Открываем "Входные параметры" в индикаторе и их копируем поочерёдно с нужными значениями

Обязательно смотрим на тип переменной, и если она строковая, то берём в кавычки, пропускать ничего нельзя:

double val=iCustom(NULL,0,"SampleInd","",240,3,"",clrNONE,clrNONE,1,0);
 
Добрый день, почему возникают такие артефакты? Код экстренного закрытия вроде бы должен закрывать при первом пересечении? Ошибок при закрытии не возникало.
if(MathAbs(Ima-Ima2) <= c && OrdersTotal() != 0)
        {
         OrderSelect(ticket, SELECT_BY_TICKET);
         int a = OrderType();
         RefreshRates();
         if(a == 0)
           {
            OrderClose(ticket, lots, Bid, 20, clrBlack);
           }
         if(a == 1)
           {
            OrderClose(ticket, lots, Ask, 20, clrBlack);
           }
         ticket = 0;
}
Файлы:
test.png  22 kb
 
Будет ли  RefreshRates здесь работать?

В функци OrderSend у нас есть cena, но cena была задана еще до цикла.


double cena=Ask;

for (int i=0; i<=10; i++)
   {
   RefreshRates();
   int t=OrderSend(OrderSymbol(),OP_BUY,0.1,cena,10,0,0); 
   if (t!=-1) break;
   }
 
igrok333:
Будет ли  RefreshRates здесь работать?

В функци OrderSend у нас есть cena, но cena была задана еще до цикла.


не будет

 
Igor Makanu:

не будет

он взял цену раньше, когда аск еще был старым,
а потом только рефрешратес поменял аск, да?
 
Вы же догадываетесь. Переменная cena не зависит от RefreshRates. 
Причина обращения: