Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Ленивый Лис, прочтите комменты к сове - там у людей какие-то траблы были.

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

Access violation read to 0x00000008 говорит о том что приемный буфер кривой. Надо передать адрес массива или строки через &

p.s. с моей точки зрения решать задачу чтения файлов надо через библиотеку на нормальном языке программирования, там же можно быстро и элегантно проверить данные на целостность и попадание в допустимые диапазоны. А также кто проверит сам файл на целостность? Вдруг он скомпрометирован. Лично для меня весь ввод который может попасть в советник извне следует проверят так как будто это атака на сервер NASDAQ

Изменено пользователем nixxer
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


s это string lpBuffer в функции ReadFile

Как уже написал Никсер, нужно создать байтовый массив и передать его по ссылке. Когда насобираешь этих байтиков, то нужно брать по паре и читать как юникод. Легче найти апи библиотеку читающую в юникоде, чего ты упёрся в эту?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Ленивый Лис, прочтите комменты к сове - там у людей какие-то траблы были.


Все прочел, везде ткнулся, прога пишет
"Внимание!!! Не корретно задан каталог MetaTrader, укажите правильный каталог" - какой не укажу. Советника в архиве вообще не вижу. Почту не видит, в общем безнадега...
Что то надо наверно сделать, но не врублюсь я :((
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portable
Должно выглядеть ...\terminal.exe" /portable

и попробуйте снова.


И что за фигню вы вообще пишете?
"Советника в архиве вообще не вижу" и "прога пишет..."
Какая, блин, прога пишет - которую вообще не видите?!
Вы истерику немедленно тут прекращайте - иначе топик нахрен снесу.


Чтобы мы могли помочь, нам нужна информация, а не чьи-то сопли.
Вопрос не такой простой, все надо делать точно - а что вы там делаете, нам отсюда не видно.
Можно делать скрины, во вкладке Эксперты (в log-журнал бота) бот должен писать что делает и что не так - все это нужно прикреплять к посту.

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

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Пожалуйста. :d
Только спасибо не нальешь!

А где правильный, работающий код - принимавшим в разборе программистам в копилку?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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

Изменено пользователем Silentspec
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

ТП например 120 пипсов.

Работает мартин а значит дальний ордер всегда меньше чем ближайший к цене

ТП
вот скрин например как оно все три сделки закрыло в убыток http://joxi.ru/xAe1aBQiWboNAy

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
romses, а раздельно БУ и ТР бай и сэлл сеток считать не пробовали?
Групповуха в этом вопросе не приветствуется...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


ТП например 120 пипсов.

Работает мартин а значит дальний ордер всегда меньше чем ближайший к цене

ТП
вот скрин например как оно все три сделки закрыло в убыток http://joxi.ru/xAe1aBQiWboNAy


Сделайте табличку где цена и лот для каждого ордера и какой вышел ТР. Изменено пользователем Qj
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


вот скрин например как оно все три сделки закрыло в убыток http://joxi.ru/xAe1aBQiWboNAy


Этот скрин подтверждает факт наличия ошибки - но не дает инфы о её причине.
Надо видеть все рыночные ордера, что были у вас на графике и принимали участие в вычислении БУ и ТР.

По фрагменту и вашим рассказам о том, как, по вашему мнению, работает бот, судить ни о чем нельзя.
Надо видеть как реально работает бот и что реально у вас на графике.
Хотя бы по логам и скринам.

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

А что касается скрина, то садитесь и на бумажке считайте где у вас должен быть безубыток и ТР, какова разность между было и должно быть.
А потом по коду пробуйте понять почему у вас именно такая разность и где вы её схлопотали. Изменено пользователем Старик
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

В скачанном архиве эксперта Data Exchange v2.0 по ссылке от уважаемого OLL'а
-файл .ехе проги Data Exchange
-библиотека .mqh
-инструкция
Самого советника там нет,- и это первый вопрос. Судя по комментам должен быть

Следующая проблема - какую папку указать в качестве каталога мт4? Прога писалась для старого метатрейдера. Пользователь с форума проги пишет:

какую бы папку не указывал — говорит не правильная папка MT4.
Есть папка программы: C:\Program Files (x86)\Alpari Limited MT4
Есть папка данных: C:\Users\SuperUser\AppData\Roaming\MetaQuotes\Terminal\1FC{ТУТ_КУЧА_БУКОВОК}9A855301E


и далее пишет

Т.к. этот информер был сделан для предыдущей версии MT4, то... в качестве папки нужно указывать
C:\Users\{ПОЛЬЗОВАТЕЛЬ}\AppData\Roaming\MetaQuotes\Terminal\1FC{ТУТ_КУЧА_БУКОВОК}9A855301E\MQL4\Files
Далее, сам фаил DataExchange.mqh нужно будет немного изменить:
1. Заменить путь до файла на: Experts\Files\exchange\*
Т.е. к примеру, в функции SendIcq(int i) хендлер получится такой:
_handle=FileOpen ("Experts\Files\exchange\icqsend.msg",FILE_BIN|FILE_WRITE);
2. FileWriteArray функция у меня почему-то не работает... меняем ее на:

SendIcq:

for(int ii=0; ii
{

if (ii > 0)

FileWriteString(_handle,"\n"+_icqmessage[ii]);

else

FileWriteString(_handle,_icqmessage[ii]);

}

SendEMail:

for(int ii=0; ii
{

if (ii > 0)

FileWriteString(_handle,"\n"+_emailmessage[ii]);

else

FileWriteString(_handle,_emailmessage[ii]);
}
----------------------
При указании в качестве каталога мт4 любой папки вылезает сообщение: "Внимание!!! Не корректно задан каталог MetaTrader, укажите правильный каталог"
Как изменить файл DataExchange.mqh для меня загадка и в коде я тоже не разбираюсь. Это пока главные вопросы, уважаемые форумчане

2015-11-19_235352.jpg
Data_Exchange_v2_0.zip

Изменено пользователем Ленивый Лис
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portable
Должно выглядеть ...\terminal.exe" /portable

и попробуйте снова.


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

Пока всё выглядит намного хуже сложнее, чем сначала. :)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Да, бывает и так :d >:d
Итак, обещанная функция.
Нам понадобятся две функции из двух разных длл.

Спойлер

#import "kernel32.dll"
int GetFileAttributesW (string lpFileNameW);
#import
#import "shell32.dll"
int ShellExecuteW(int hWnd,int lpVerb,string lpFile,int lpParameters,int lpDirectory,int nCmdShow);
#import



Так же нам нужно прописать директории, где хранятся проверяемые файлы, в моем случае это:
string FilePathIndi="\MQL4\indicators";
string FilePathIncludes="\MQL4\include";

Далее нам нужна функция, которая проверит наличие конкретного файла. Передается в переменную путь к файлу, возвращается результат в случае успеха или -1, если файл не найден.
Спойлер


//+------------------------------------------------------------------+
//| Checks if the necessary file exists |
//+------------------------------------------------------------------+
int FileExists(string FilePath)
{
int result=-1;
result=GetFileAttributesW(FilePath);
return(result);
}



Функция проверки наличия файла. В этой функции формируется полный путь к нужному файлу, проверяется еге наличие при помощи предыдущей функции и в случае отсутствия файла открывается такой вот мессадж бокс:



Функция проверяет один файл:
Спойлер


//+------------------------------------------------------------------+
//| Checks if the necessary files and connects to URL to download |
//+------------------------------------------------------------------+
bool CheckDependency(string filename, int filetype)
{
// filetype = 1 for indicators
// 2 for includes
string URL = "https://drive.google.com/ и так далее"; // Любая ссылка
string filepath;
// Формиуем путь к конкретному типу файла
if(filetype==1) filepath=TerminalInfoString(TERMINAL_DATA_PATH)+FilePathIndi;
if(filetype==2) filepath=TerminalInfoString(TERMINAL_DATA_PATH)+FilePathIncludes;
if (FileExists(filepath+filename) {
if (MessageBox("The file "+filename+" not found. Expert will be closed. To run it you must download this file. Would you like to download the file now?","File Not Found",MB_YESNO|MB_ICONQUESTION) == IDYES)
ShellExecuteW(0,0,URL,0,0,1);
return(false);
}
return(true);
}



Эта функция запускает поочередно обработку каждого файла:
Спойлер


//+------------------------------------------------------------------+
//| Checks all external files |
//+------------------------------------------------------------------+
bool CheckAllDependencies()
{
bool dependencies=false;
dependencies = CheckDependency("\FFCal.ex4",1);
if(!dependencies)
{
ExpertRemove();
return(dependencies);
}
dependencies = CheckDependency("\MyWinUser32.mqh",2);
if(!dependencies)
{
ExpertRemove();
return(dependencies);
}
return(dependencies);
}

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Silentspec для чтения: здесь есть исходники на С + mql библиотека с кучей функций по работе с файлами, включая чтение и запись юникод строк и даже строковых массивов.
Ссылка (там есть ссылка на ftp и более свежую версию библиотеки)
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portable
Должно выглядеть ...\terminal.exe" /portable

и попробуйте снова.


Сделал, изменений не наблюдаю

3а.png

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portable
Должно выглядеть ...\terminal.exe" /portable

и попробуйте снова.


Сделал, изменений не наблюдаю

Попробуйте указать каталог 1F..... либо тот что на Alpari оканчивается.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Старик, спасибо большое время.

Т.е. в коде самого Тралла вы ошибку не видите которая может вести к таким последствиям?

Просто других ордеров в момент этих трех открытых не было.
Меджик в тралле проверяется и другие ордера в расчет он не должен брать, но их и нет по логам.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

я бы ужесточил код тралла таким образом:
1) в цикл вычисления price и lots добавил проверку OrderType() - сейчас у вас в вычислении этих переменных могут участвовать как рыночные ордера, так и отложки.
2) в цикл модификации добавил бы проверку на символ и тип ордера дополнительно к мэджику.
3) у вас вычисление ТР вне цикла модификации (между циклами) и фактически производится по последнему по порядку OrderSelect цикла вычисления price и lots - а это мог быть ордер вообще другой пары, причем как бай, так и сэлл, от балды. Даже если у вас на торгуемой паре открыты только рыночные сэлл ордера, последний OrderSelect у вас мог быть бай ордера другой пары - и вы вычислили ТР для бай ордера (уровень на Takeprofit*2 выше/хуже) и радостно присваиваете его как ТР сэлл ордеров, что конечно в глубоком минусе. Если я прав, то это замечательная плавающая ошибка! :d

А вообще в тралле не стоит модифицировать ордер не только при совпадении вычисленного и фактического ТР ордера, но и не стоит модицировать при отклонении расчетного (от фактического) ТР ордера менее чем на Х пипсов (допустим, Х=5 пятизначных).
И, имхо, уровень БУ сетки ордеров лучше считать не как средне арифметическое взвешенное, а нормально и с учетом комиссии и свопа.

Изменено пользователем Старик
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


я бы ужесточил код тралла таким образом:
1) в цикл вычисления price и lots добавил проверку OrderType() - сейчас у вас в вычислении этих переменных могут участвовать как рыночные ордера, так и отложки.
2) в цикл модификации добавил бы проверку на символ и тип ордера дополнительно к мэджику.
3) у вас вычисление ТР вне цикла модификации (между циклами) и фактически производится по последнему по порядку OrderSelect цикла вычисления price и lots - а это мог быть ордер вообще другой пары, причем как бай, так и сэлл, от балды. Даже если у вас на торгуемой паре открыты только рыночные сэлл ордера, последний OrderSelect у вас мог быть бай ордера другой пары - и вы вычислили ТР для бай ордера (уровень на Takeprofit*2 выше/хуже) и радостно присваиваете его как ТР сэлл ордеров, что конечно в глубоком минусе. Если я прав, то это замечательная плавающая ошибка! :d

А вообще в тралле не стоит модифицировать ордер не только при совпадении вычисленного и фактического ТР ордера, но и не стоит модицировать при отклонении расчетного (от фактического) ТР ордера менее чем на Х пипсов (допустим, Х=5 пятизначных).
И, имхо, уровень БУ сетки ордеров лучше считать не как средне арифметическое взвешенное, а нормально и с учетом комиссии и свопа.



Спасибо большое, вы оказались правы. если торговать на нескольких графиках то смуту вносило, то что ордер 0 не всегда оказывался от той серии ордеров для которой я хотел изменить ТП
теперь передаю Type в параметрах функции сразу после открытия очередного ордера, а не беру последний ордер в терминале.

Не очень понял, что значит нормально считать? Есть пример?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Не очень понял, что значит нормально считать? Есть пример?


http://tlap.com/forum/laboratoriya-profitfx/24/open-source-sovetnik-forex-setka-trader-mod-i-ea-setka/2738/?do=findComment&comment=246997
Оба варианта расчета уровня безубытка: как средне арифметическое взвешенное, так и прямой - с комиссиями и свопами.
Надеюсь, в коде найдете и разберетесь - там не всё просто. :)
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Господа помогите...
Просмотрел первые три урока Сергея. Здорово!
Пытаюсь воспроизвести сову по третьему уроку.... по ТМА.
Засада на ровном месте.
Вопрос - почему высвечиваются ошибки и symbol не подсвечивается в цвет?
http://joxi.ru/eAOlzELIJOnBro (для увеличения кликните мышкой на картинку)

Изменено пользователем Gtnh
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...