Основные понятия [17]
Торговые системы,тактики [67]
Форекс начинающим [16]
Разное [37]

Новый терминал МТ4 6хх (6 600-604-605-608-610-616-618) Решение проблем с советниками.

Добавить в социальные закладки:

-Новый терминал МТ4Новый терминал МТ4 6хх (6   578-584-600-604-605-606-607-608-609-610-611-612-618) Решение проблем с советниками

3 февраля официально вышел новый терминал Метатрейдер 4 (MetaTrader 4) с абсолютно новым движком как самого терминала, так и языка программирования. За 1 неделю после выхода 578 билда - компания MetaQuotes обновила терминал до 604 билда. 

Советники, ранее работавшие на терминале 509 билда - требуют тщательного вмешательства в свой код. Некоторые советники и индикаторы перестали работать? Не беда! Мы раскроем некоторые секреты редактирования старого кода, использования старых советников на новом билде, и собственно, покажем, как пользоваться новым терминалом. 
Как запустить советник на новом терминале, как исправить ошибки советника в новом билде, как установить советник в новый билд, как вернуть старый мт4 билд 509 - все это мы расскажем в нашей статье










Введение:

   90% пользователей терминала стали жаловаться на то, что новый билд терминала не "допилен" не "доделан" не "совершенен". Большинство стали жаловаться на головную боль, головокружение и рвоту, вызванную новыми событиями в мире трейдинга на терминалах компании MetaQuotes , но зачем?  
   
   Ведь компания старается во благо нас, трейдеров. И наконец таки, в новом МТ4 мы получим возможности, которые раньше казались только сказкой. Впредь можно разрабатывать сложные торговые системы, которые будут в десятки раз работать быстрее и четче. Новые панели управления прямиком на графике(Раньше это можно было сделать только с помощью сторонних библиотек) 
  
   Например наша программа VirtualTradePad v7.0 работавшая на терминале старых образцов, запускала отдельную программу на компьютере, и управляла сделками через файл данных. Теперь же мы разработали новую панель VirtualTradePad EXTRA для управления сделками в ручном режиме. Которая работает прямиком в терминале, не запуская при этом сторонний софт и не задействуя файлы данных. 
   
   Кроме того, в новом терминале теперь присутствует ООП, дополнительные функции, распределение торговых приказов,создание кнопок, тестирование индикаторов в тестере, маркет приложений с автоматическим обновлением и т.д. 


   В связи с этим нововведением, появились некоторые проблемы в старых экспертах. Я постараюсь рассказать о самых важных изменениях и способах решения некоторых проблем. 

Важно: Советники, компилированные в старом 509 билде, не имея открытый код в папке нового терминала - будут работать на новом билде без вмешательства. Не перекомпилируйте свои советники на новый билд, Если не хотите иметь проблем с новыми ошибками. 
Удалите с папок терминалов все свои открытые коды, или перенесите их в другу папку. Чтобы терминал не компилировал его новым компилятором!!! 

Все советники с данного сайта - работают корректно как на новом билде так и на старом билде. 

  • У Вас не работает эксперт на новом билде?
  • Эксперт не появляется в навигаторе? 
  • Эксперт больше не запускается на новом билде?
  • В Вашем эксперте много ошибок? 

Тогда Вы попали по адресу!!!! 


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


   Новый терминал теперь работает с политикой безопасности Windows, что дает некоторые преимущества в безопасности. Но легче ли стало пользователям от этого? Где находятся Ваши эксперты на новом терминале? как вернуть папки в локальный вид? 

1. Папки экспертов и индикаторов поменяли свое название:
Раньше было:  Ваш терминал\experts
Сейчас стало:  Ваш терминал\MQL4\Experts
2. Рабочая папка теперь находится на системном диске в папке Пользователи. 
например C:\Users\Владислав\AppData\Roaming\MetaQuotes\Terminal\Common 
теперь все терминалы пишут свои данные именно на системный диск, дальше мы поговорим как вернуть локальные папки. 


Для того, чтобы узнать каталог Вашего терминала необходимо сделать следующее:
  •  Откройте Ваш терминал
  •  Слева вверху - меню файл 
  •  Открыть каталог данных
Эта папка, в которой находятся все Ваши скрипты и советники. 



3. В папках экспертов, например Experts теперь можно создавать подпапки. 
например Ваш терминал\MQL4\Experts\Expforex, в которой можно складывать советники от отдельного программиста. В навигаторе в свою очередь - также будет иерархия папок и подпапок. 



4. Локальные папки 
Для того, чтобы сделать Вашу папку локальной, т.е. иметь прошлый вид своих экспертов и индикаторов, для того чтобы папка ваших экспертов находилась в папке вашего терминала, необходимо проделать несколько вещей (Вариант по выбору). 
  • Запустить терминал от администратора 


    • Непосредственно на ярлыке к терминалу прописать следующие команды:
    1. "D:\Forex\FX Start\MetaTrader4\terminal.exe" /portable - если в пути до проги есть пробелы 
    2. D:\Forex\Alpari\MetaTrader4\terminal.exe /portable - если пробелов в пути до файла нет 
    Таким образом общая схема такая - Путь до терминала+ пробел + "/" + ключ (portable)...



    5. Автоматическое перемещение старых советников 
    Советники, которые ранее находились в старых папках - автоматически при включении терминала будут перемещаться в новые папки. 

    6. Если Ваши советники не работают например с интернетом, Или же пишут ошибку
    Alert: Ошибка при вызове InternetOpenUrlW()
    Alert: Ошибка при вызове InternetOpenW()
     
    А также если ВЫ не хотите каждый раз запускать от Администратора, ВЫ можете поставить галочку - и терминал будет автоматически запускаться от администратора


    Новый язык программирования, отличия от старого, решение некоторых проблем


         Новый язык программирования терминала МТ4 стал очень богатым. Он существенно расширил свои границы, здесь появились классы, ООП, графические элементы, новые операции с счетом, новые функции................................ Но и проблем с старым кодом здесь также присутствует. 

    Для того, чтобы Вы понимали о чем идет речь, я создал советник, с наиболее частыми ошибками, которые вылазят при компиляции в новом билде. 




    1. Названия переменных с вспомогательными символами например . (точка)
    Все переменные которые имеют точку, или нижнее подчеркивание - теперь необходимо изменить на другое название. 
    Былоextern int Test.dot=10;
    Стало: extern int Testdot=10;

    Былоextern int Test_dot=10;
    Стало: extern int Testdot=10;

    Ошибка, которая возникает при неправильном коде: '.' - semicolon expected


    2. Задекларированных переменных теперь больше, и переменные, которые были названы именами новых функций - требует изменения имени. 
    Былоextern double char=554.5;
    Стало: extern double charnewexample=554.5;

    Былоdouble new=10;
    Стало: double neweample=10;

    Ошибка, которая возникает при неправильном коде: 'char' - unexpected token или  'new' - name expected 
     

    3. Каждая функция теперь должна иметь оператор возврата RETURN
    Было
    int Testreturnint()
      {
       int a;
       int b;
       if(a==b)return(1);
      }
    Стало: 
    int Testreturnint()
      {
       int a;
       int b;
       if(a==b)return(1);
       return(0);
      }

    Было
    bool Testreturnbool()
      {
       int a;
       int b;
       if(a==b)return(true);
      }


    Стало: 
    bool Testreturnbool()
      {
       int a;
       int b;
       if(a==b)return(true);
    return(false);
      }

    Было
    void Testreturnvoid()
      {
       int a;
       int b;
       if(a==b)return;
      }

    Стало: 
    void Testreturnvoid()
      {
       int a;
       int b;
       if(a==b)return;
    return;
      }


    Было
    string Testreturnstring()
      {
       int a;
       int b;
       if(a==b)return("43");
      }
    Стало: 
    string Testreturnstring()
      {
       int a;
       int b;
       if(a==b)return("43");
    return("");
      }

    Предупреждение, которое возникает при неправильном коде: not all control paths return a value
     

    4. Функция switсh в качестве выражения может принимать только Целые числа
    Если раньше через switсh можно было перебирать любые значения, то теперь данный оператор может принимать только целые числа в качестве сравнения, для того чтобы Ваша функция работала  дальше, Вам необходимо заменить ее на операторы сравнения if else
    Было
    int Testswitchdouble()
      {
       double k1=1.432;
       int y;
       switch(k1)
         {
          case 1.432:y=1;break;
          case 1.433:y=2;break;
          case 1.434:y=3;break;
         }
      }
    Стало: 
    int Testswitchdouble()
      {
       double k1=1.432;
       int y;
           if(k1== 1.432)y=1;
           if(k1==  1.433)y=2;
           if(k1==  1.434)y=3;
       return(y);
      }

    Ошибка, которая возникает при неправильном коде: 'k1' - illegal switch expression type и  '1.432' - constant expression is not integral

    5. Все переменные объявленные внутри функции, должны отличаться от названий глобальных переменных (Необязательно)
    Предупреждение, которое возникает при неправильном коде: declaration of 'testvariable' hides global declaration 

    6. Все переменные, должны соответствовать по типу в используемых функциях 
    Если Вы выводите например Print или ищите строку StringFind или объект ObjectCreate Вы  должны соответственно писать правильный тип данной переменной, или переводить переменную в нужный тип
    Было
    int test=1;
    Print(AccountNumber());
    StringFind("Пример строки",test);
    ObjectCreate(0,test,OBJ_LABEL,0,0,0);
    Стало: 
    int test=1;
    Print((string)AccountNumber());
    StringFind("Пример строки",(string)test);
    ObjectCreate(0,(string)test,OBJ_LABEL,0,0,0);

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

    Было
    int    dg=MarketInfo(Symbol(), MODE_DIGITS);
    Стало: 
    double    dg=MarketInfo(Symbol(), MODE_DIGITS);

    Ошибка или предупреждение, которые возникает при неправильном коде: the second parameter for StringFind function must be a string - возникает уже после компиляции эксперта
    implicit conversion from 'number' to 'string'
    possible loss of data due to type conversion




    7. Сторонние библиотеки и функции , которые включают в себя передачу строк в DLL
    Если в Вашем эксперте есть функции, которые имеют переменные стринг, в новом билде нужно переводить в юникод, Это не сложно. 

    например:
    Было
    #import "wininet.dll"
    int InternetOpenA(string sAgent,int lAccessType,
                      string sProxyName="",string sProxyBypass="",
                      int lFlags=0);
    int InternetOpenUrlA(int hInternetSession,string sUrl,
                         string sHeaders="",int lHeadersLength=0,
                         int lFlags=0,int lContext=0);
    #import
    Стало: 
    #import "wininet.dll"
    int InternetOpenW(string sAgent,int lAccessType,
                      string sProxyName="",string sProxyBypass="",
                      int lFlags=0);
    int InternetOpenUrlW(int hInternetSession,string sUrl,
                         string sHeaders="",int lHeadersLength=0,
                         int lFlags=0,int lContext=0);
    #import

    Ошибка , которые возникает при неправильном коде:  Error in call InternetOpenUrlA()

    8. Жесткий поиск ошибок #property strict
    установите данный код в начале Вашего советника, и Ваш советник выдаст кучу ошибок. Данные ошибки прошли жесткий отбор, и исправляя их Вы получите максимум скорости от Вашего эксперта. А также чистейший код советника

    9. Все остальные  ошибки и предупреждения решаются в индивидуальном порядке. 

    Как видите мы решили все вопросы с ошибками в течении 1 минуты Вашего времени. 
    Спасибо за внимание. теперь окно ошибок выглядит так:



    Решение индивидуальных проблем с советниками


    Если у Вас не работает эксперт или индикатор на новом билде, не появляется в навигаторе, не показывает значения или работает неправильно, ВЫ можете обратиться в наш форум. Все просьбы по изменению ошибок и советников будут удовлетворятся в порядке свободного времени. Если у Вас срочный заказ,  Вы можете обратиться в наш раздел Программирования и подать нам заявку, решение проблем в таком случае платное. И стоимость исправления ошибок на новом билде зависит от количества ошибок.  


    Как вернуть 509 билд и запретить обновление на новый терминал МТ4


    Если у Вас все же появляются проблемы с терминалами нового поколения МТ4 и вы не в состоянии справится с ошибками своих экспертов, Вы можете вернуть свой терминал до последнего "нормального" билда 509 одним из нижеперечисленных способов. 

    1. Включить контроль учетных записей. Это противоположная операция по отключению UAC 
    (Отключить UACВ таком случае, терминал перед обновлением должен спросить Вас о разрешении. Но это касается только если Ваш терминал находится на системном диске. (Не у всех работает)

    Скачать можно по ссылке.

    • Распакуйте резервную копию в нужном вам каталоге (предпочтительно за пределами «C:\Program Files\»), а затем скопируйте в нее все необходимые вам советники, пользовательские индикаторы, а также файлы с расширением .srv в папку «config», которая содержит IP адреса серверов интересующих вас брокеров.
    • По завершению дважды щелкните файл «terminal.exe». Первый раз, когда вы будете это делать, система запросит у вас «Login», «Password», and «Server» (не забудьте поставить галочку в окошке «Save account information»). После этого вы снова будете работать на МТ4 Build 509.

    Для того чтобы сделать 509 билд нашего терминала для любого ДЦ:
    • Устанавливаем мт 605+ (или любого билда) своего ДЦ.
    • Открываем папку нового билда
    • Копируем с новой папки терминала папку config в наш старый билд 509 с заменой файлов
    • Удаляем содержание папки config другого ДЦ и вставляем свой config. И еще ярлык terminal — значок.
    3. Удалить все, что находится в папке C:\ProgramData\MetaQuotes\WebInstall , при чем удалять придется каждый раз когда Вы запускаете свой старый терминал. 
    Для того чтобы терминал не успел обновится до нового билда, Вам необходимо зайти в Ваш каталог терминала, и открыть свойства каждого из трех файлов :

    • terminal.exe
    • metalang.exe
    • metaeditor.exe

    Правой кнопкой на файле - Свойства - Вкладка Безопасность - Изменить *(пример показан на рисунке):

    При этом новый терминал также может начать скачивание обновлений, и если после перезапуска терминала у Вас терминал открывается - и сразу закрывается - снова повторите пункт

    3. Удалить все, что находится в папке C:\ProgramData\MetaQuotes\WebInstall , при чем удалять придется каждый раз когда Вы запускаете свой старый терминал. 

    4. В поиске по своему компьютеру пишем mt4clw и liveupdate и удаляем данные службы МТ4









    Если данная статья Вам понравилась, пожалуйста, ставьте свои оценки и пишите комментарии. 


    Получить бесплатно Новый терминал МТ4 6хх (6  600-604-605-608-610-616-618) Решение проблем с советниками.

    Категория: Разное | Добавил: expforex (04.02.2014)
    Просмотров: 14298 | Комментарии: 19 | Теги: (600-604-608), советниками., мт4, 6хх, терминал, проблем, Новый, решение | Рейтинг: 4.8/256 |
    Всего комментариев: 191 2 »
       19               expforex        (10.01.2016 21:58)
    'MarketInfo' - illegal switch expression type 

    было:
      switch(MarketInfo(Symbol(), MODE_MINLOT))
      {
        case 0.01:
          LotDecimal = 2;
          break;
        case 0.1:
          LotDecimal = 1;
          break;
        default:
        {
          Print("!MINLOT IDENTIFICATION FAILED!");
          InitFail = True;
          return(0);
        }
      }

    стало: 
      if(MarketInfo(Symbol(), MODE_MINLOT)==0.01)LotDecimal=2;
      if(MarketInfo(Symbol(), MODE_MINLOT)==0.1)LotDecimal=1;

       18               expforex        (21.03.2014 11:29)
    Спасибо, я только написал что не допускаются точки.
    Но Ваше дополнение в тему. Спасибо

    А Вижу = да я написал про нижнее подчеркивание - остатки корректора декомпил кода. smile

       16               expforex        (17.03.2014 14:08)
    Приветствую,
    да вышеперечисленные способы работаю не  у всех на компьютере поэтому я и представил разные способы

       13               gsasha        (06.03.2014 14:53)
    На 610 билде не активируется в советниках функция включения ДЛЛ, советник ругается на необходимость включить функцию.
    Метаквоты опять перемудрили, баг за багом sad Ответ "Описываемое Вами поведение уже исправлено.

    Дождитесь, пожалуйста, следующего билда"

       14               expforex        (07.03.2014 10:32)
    Приветствую, да есть у них такое Багов много, от этого страдают обычные люди. Даже я не в силах что-то сделать, хоть и старался перекодировать все под новый билд При чем ошибок с моей стороны в кодах нет (было в некоторых экспертах, которые пришлось полностью переделать под новый билд из-за иерархии папок) так что остается ждать........

       12               expforex        (24.02.2014 14:15)
    Здравствуйте,
    все также как и в старом, с помощью стороннего софта и брокера ДукасКопи.

       9               Rymydolov        (20.02.2014 00:46)
    Большое вам спосибо !

       6               expforex        (16.02.2014 13:47)
    4. В поиске по своему компьютеру пишем mt4clw и liveupdate и удаляем данные службы МТ4

    1-10 11-15
    Имя *:
    Email:
    Код *:



    WebMoney Яндекс цитирования.