Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 68

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

MT4 билд 604

Использую:

#import "kernel32.dll"
int GetLastError(void);
...
#import

Вызовы типа kernel32::GetLastError() проходят успешно, а вот на обычные вызовы встроенной функции приводят к ошибке:

'GetLastError' - ambiguous call to overloaded function with the same parameters
Кто-нибудь сталкивался с этим?


В Вашем случае используйте вызов ::GetLastError()

Мы подумаем, что можно сделать для предотвращения такого "неожиданного" поведения

 
mql5:

Спасибо за сообщение, ошибка в оптимизаторе компилятора. Исправляем.
В вашем случае ошибка проявилась из-за того, что вы модифицируете строковой параметр source внутри функции.
Так же ошибка связана с тем, что происходит инлайнинг функций, который не работает при компиляции под отладку.


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

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
int init()
  {
   string s[];
   string source="High,Medium,Low";
   stringToStringSplit(s,source,",");
   int i =0;
   for(i=0; i<ArraySize(s); i++)
     {
      Print(i," ",s[i]);
     }
  }
//+------------------------------------------------------------------+

void stringToStringSplit(string &out[],string source,string token)
  {
   int count=0,tokenCount=0;
   string value="";

Print("stringToStringSplit--------------------");

   ArrayResize(out,0);
   if(source == "")   return;
   tokenCount= tokenCounter(source,token);
   while(count<=tokenCount)
     {
      count++;
      value=strToken(source,token,count);
      ArrayResize(out,count);
      out[count-1]=StringTrimLeft(StringTrimRight(value));
      Print("set ",count - 1," value: ", value);
     }
     int i = 0;
     
     for(i=0; i<ArraySize(out); i++)
     {
      Print(i," ",out[i]);
     }
     Print("stringToStringSplit--------------------");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int tokenCounter(string source,string token)
  {
   int counter=0,pos=0;

   while(token!="")
     {
      pos=StringFind(source,token,0);
      if(pos>-1)
        {
         counter++;
         source=StringSubstr(source,pos+StringLen(token)+1);
           } else {
         break;
        }
     }
   return(counter);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 string strToken(string source,string token,int count)
  {
   string sub="";
   int i=0,pos=-1;

   if(token!="")
     {
      if(StringFind(source,token)!=-1)
        {
         for(i=1; i<=count; i++)
           {
            pos=StringFind(source,token);

            if(pos==-1)
              {
               if(i<count)
                 {
                  sub="";
                    } else {
                  sub=source;
                 }
               break;
                 } else {
               if(pos==0)
                 {
                  sub="";
                    } else {
                  sub=StringSubstr(source,0,pos);
                 }
              }

            source=StringSubstr(source,pos+1);
           }
           } else {
         sub=source;
        }
     }
   return(sub);
  }
//+------------------------------------------------------------------+

при отладке все нормально, но при обычной компиляции такой вывод

14:23:02 Script debug EURUSDX,H1: loaded successfully

14:23:02 debug EURUSDX,H1: stringToStringSplit--------------------

14:23:02 debug EURUSDX,H1: set 0 value: ow

14:23:02 debug EURUSDX,H1: set 1 value: ow

14:23:02 debug EURUSDX,H1: set 2 value: ow

14:23:02 debug EURUSDX,H1: 0 ow

14:23:02 debug EURUSDX,H1: 1 ow

14:23:02 debug EURUSDX,H1: 2 ow

14:23:02 debug EURUSDX,H1: stringToStringSplit--------------------

14:23:02 debug EURUSDX,H1: 0 ow

14:23:02 debug EURUSDX,H1: 1 ow

14:23:02 debug EURUSDX,H1: 2 ow

14:23:02 debug EURUSDX,H1: initialized

14:23:02 debug EURUSDX,H1: uninit reason 0

14:23:02 Script debug EURUSDX,H1: removed

пожалуйста, исправьте, очень напрягают такие ошибки

 

В старом редакторе MQL было удобно, когда нажимаешь Ctrl+F и потом сразу ESC, и далее можно через F3 искать это значение (значение сразу запоминалось в параметрах поиска).

В новом - необходимо хоть 1 раз нажать "Найти далее" чтобы значение запонилось.

Неудобство - в том, что в этот момент не всегда нужно смещаться по коду, нужно просто запомнить это значение в параметр поиска; заходить в буфер обмена для смены значений туда-сюда, также доставляет лишние движения.

Восстановите пожалуйста, если это возможно.

 
Bobs:

В старом редакторе MQL было удобно, когда нажимаешь Ctrl+F и потом сразу ESC, и далее можно через F3 искать это значение (значение сразу запоминалось в параметрах поиска).

В новом - необходимо хоть 1 раз нажать "Найти далее" чтобы значение запонилось.

Неудобство - в том, что в этот момент не всегда нужно смещаться по коду, нужно просто запомнить это значение в параметр поиска; заходить в буфер обмена для смены значений туда-сюда, также доставляет лишние движения.

Восстановите пожалуйста, если это возможно.


Ты какие-то чудеса рассказываешь. У меня никогда так не получалось, всегда надо было 1 раз нажать кнопку "Найти далее"
 
AlexeyVik:

Ты какие-то чудеса рассказываешь. У меня никогда так не получалось, всегда надо было 1 раз нажать кнопку "Найти далее"

Все время так работал, очень удобно было.
 

Здравствуйте,

написал в службу поддержки, дублирую здесь. Очень интересно знать, а есть еще те, кто пользуется оффлайн-графиками в MetaTrader4. В production-режиме, так сказать.

Сами используем схему на автономных графиках уж года 3.

Спасибо.

Заголовок: Невозможно получить бары с оффлайн-графика с нестандартным именем

Здравствуйте,

Вы уж извините, что моя очередная заявка связано с не очень стандартными схемами работы.

Однако, опять, схема работала в терминале MetaTrader 4 с версией до 600 билда, но не работает в новой.

Суть проблемы в заголовке. Дополнение - не работает, при попытке получить данные из эксперта(скрипта), который запущен на другом графике.
Прилагаю также скриншот.

На скриншоте синим отмечен правильный результат, в случае запуска скрипта на графике REURUSD1 - символ с нестандартным именем.
Однако, при запуске скрипта на USDCHF - результат неправильный - 0 баров.

Данный тест дает одинаковые числа большие нуля в терминале билда 509.

Наверное, понятно, что это не для игр нужно, а используется в инструментах долгое время.

Спасибо.

Файлы:
attachment.zip  225 kb
 

Немного запутался.

Если указано в Маркете Активации: 5

Это значит что я могу зарегистрировать советника на 5 разных счетах ?

Или на 5 разных компьютерах и могу использовать неограниченое количество счетов.

Буду очень рад за ответ.

5
 
success.sh7:

Если указано в Маркете Активации: 5

Это значит что я могу зарегистрировать советника на 5 разных счетах ?

Или на 5 разных компьютерах и могу использовать неограниченое количество счетов.

5

Посмотрите Правила:

IV. Продукты

  1. Продукт для сервиса "Маркет" может быть предоставлен только в виде скомпилированного файла с расширением EX5 или EX4.
  2. В Продуктах запрещен вызов любых DLL-библиотек, включая системные библиотеки Microsoft Windows.
  3. Запрещается в описании Продукта:
    • гарантировать или обещать получение прибыли;
    • использовать превосходные степени для описания достоинств Продукта или заложенной в основу Продукта идеи;
    • представлять результаты тестирования торговой стратегии на истории как результаты реальной торговли, прямо или косвенно;
    • использовать ссылки на внешние ресурсы в качестве описания;
    • давать кричащие/нескромные названия разделам описания и самим Продуктам;
    • использовать в качестве иконки Продукта и скриншотов любые картинки неэстетичного содержания.
    Описание Продукта должно быть изложено простыми понятными предложениями, без использования сленга и сокращений, и выдержано в спокойном тоне.
  4. Запрещается продажа и распространение любых вредоносных Продуктов через сервис "Маркет".
  5. Продавец может распространять Продукты через сервис "Маркет" на безвозмездной основе (бесплатно).
  6. Минимальная стоимость платного Продукта, который может быть выставлен на продажу в сервисе "Маркет", составляет $10.
  7. Продукты, приобретенные через сервис "Маркет", не подлежат возврату.
  8. Для каждого Покупателя автоматически создается индивидуальная защищенная версия Продукта, позволяющая использовать его только на оборудовании (аппаратная конфигурация компьютера и тип операционной системы), с которого был осуществлен запрос на покупку.
  9. Факт покупки Продукта регистрируется в учетной записи Покупателя.
  10. Факт создания защищенной версии Продукта для конфигурации оборудования Покупателя называется Активацией.
  11. Количество бесплатных Активаций Продукта, доступных Покупателю на другом оборудовании после приобретения Продукта, определяется Продавцом. Минимальное количество таких Активаций равно 4.
 
Rosh:

Посмотрите Правила:



Спасибо, я смотрел. Я переспрошу.

Активации: 5 значит как я понимаю не ограниченное количество счетов. Их может быть и 20 - 30, но не больше компьютеров ?