Старик Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Ленивый Лис, прочтите комменты к сове - там у людей какие-то траблы были. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Access violation read to 0x00000008 говорит о том что приемный буфер кривой. Надо передать адрес массива или строки через &p.s. с моей точки зрения решать задачу чтения файлов надо через библиотеку на нормальном языке программирования, там же можно быстро и элегантно проверить данные на целостность и попадание в допустимые диапазоны. А также кто проверит сам файл на целостность? Вдруг он скомпрометирован. Лично для меня весь ввод который может попасть в советник извне следует проверят так как будто это атака на сервер NASDAQ Изменено 19 ноября, 2015 пользователем nixxer 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 s это string lpBuffer в функции ReadFileКак уже написал Никсер, нужно создать байтовый массив и передать его по ссылке. Когда насобираешь этих байтиков, то нужно брать по паре и читать как юникод. Легче найти апи библиотеку читающую в юникоде, чего ты упёрся в эту? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Да,я уже понял >:dСпасибо Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ленивый Лис Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Ленивый Лис, прочтите комменты к сове - там у людей какие-то траблы были. Все прочел, везде ткнулся, прога пишет "Внимание!!! Не корретно задан каталог MetaTrader, укажите правильный каталог" - какой не укажу. Советника в архиве вообще не вижу. Почту не видит, в общем безнадега...Что то надо наверно сделать, но не врублюсь я :(( Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portableДолжно выглядеть ...\terminal.exe" /portableи попробуйте снова.И что за фигню вы вообще пишете?"Советника в архиве вообще не вижу" и "прога пишет..."Какая, блин, прога пишет - которую вообще не видите?!Вы истерику немедленно тут прекращайте - иначе топик нахрен снесу.Чтобы мы могли помочь, нам нужна информация, а не чьи-то сопли.Вопрос не такой простой, все надо делать точно - а что вы там делаете, нам отсюда не видно.Можно делать скрины, во вкладке Эксперты (в log-журнал бота) бот должен писать что делает и что не так - все это нужно прикреплять к посту.Или вы начнете показывать что у вас происходит и что не так - или я эту бодягу отправлю в архив.За вас никто работать не будет, ищите описания как настраивать, разбирайтесь - и пишите точно что не получается со 100% информации об этом. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Пожалуйста. :dТолько спасибо не нальешь!А где правильный, работающий код - принимавшим в разборе программистам в копилку? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 так а нету >:dне справился, отложил на потом.я так понял, лучше всего сделать библиотеку на си и подключить ее к моей болванке.а так как разбираться пока некогда (стоят более необходимые и первостепенные задачи), решил сделать автозагрузку сетов попозже.так что мое изучение винапи пока решил завершить.кстати, могу поделиться простенькой, но интересной функцией (ну кому то может и не интересной), которая проверяет нужные для работы совы файлы (заданные в виде стрингов) и в случае не нахождения их открывает браузер с нужной страницей (по заданной ссылке) для загрузки. Например, забыли закинуть файлик индюкатора, хранящийся у нас на гуглдрайве. Сов выдал окно с мессаджем, мол, файла нету, хотите загрузить? При нажатии да открывается страничка с загрузкой, а сова открепляется от экрана. Дальше уже ручками. Может кто-то допилит функцию до полного автомата, как знать. Домой приеду - выложу. Изменено 19 ноября, 2015 пользователем Silentspec Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Цитата так а нету >:dне справился, отложил на потом. =(( :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
romses Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 ТП например 120 пипсов.Работает мартин а значит дальний ордер всегда меньше чем ближайший к цене ТПвот скрин например как оно все три сделки закрыло в убыток http://joxi.ru/xAe1aBQiWboNAy Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 romses, а раздельно БУ и ТР бай и сэлл сеток считать не пробовали?Групповуха в этом вопросе не приветствуется... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 ТП например 120 пипсов.Работает мартин а значит дальний ордер всегда меньше чем ближайший к цене ТПвот скрин например как оно все три сделки закрыло в убыток http://joxi.ru/xAe1aBQiWboNAy Сделайте табличку где цена и лот для каждого ордера и какой вышел ТР. Изменено 19 ноября, 2015 пользователем Qj 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
romses Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 не очень понял, что надо сделать.по скриншоту не то? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 вот скрин например как оно все три сделки закрыло в убыток http://joxi.ru/xAe1aBQiWboNAy Этот скрин подтверждает факт наличия ошибки - но не дает инфы о её причине.Надо видеть все рыночные ордера, что были у вас на графике и принимали участие в вычислении БУ и ТР.По фрагменту и вашим рассказам о том, как, по вашему мнению, работает бот, судить ни о чем нельзя.Надо видеть как реально работает бот и что реально у вас на графике.Хотя бы по логам и скринам.Например, в боте у вас один из ордеров может быть выставлен с другим мэджиков - ну запороли вы его где-то в боте в части, которую мы не видим...И у вас на экране вроде 3 ордера - а расчет уровня безубытка был сделан для 2-х ордеров и для 3-х ордеров он в глубоком минусе.Или где-то вне зоны прямой видимости у вас там болтается или ошибочно открывается встречный ордер - которого быть не должно, но есть и который все расчеты портит.Да всё что угодно может быть невидимое нам у вас там в боте вне фрагмента, что вы выложили...А что касается скрина, то садитесь и на бумажке считайте где у вас должен быть безубыток и ТР, какова разность между было и должно быть.А потом по коду пробуйте понять почему у вас именно такая разность и где вы её схлопотали. Изменено 19 ноября, 2015 пользователем Старик Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ленивый Лис Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 В скачанном архиве эксперта 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]);elseFileWriteString(_handle,_icqmessage[ii]);}SendEMail:for(int ii=0; ii{if (ii > 0)FileWriteString(_handle,"\n"+_emailmessage[ii]);elseFileWriteString(_handle,_emailmessage[ii]);}----------------------При указании в качестве каталога мт4 любой папки вылезает сообщение: "Внимание!!! Не корректно задан каталог MetaTrader, укажите правильный каталог"Как изменить файл DataExchange.mqh для меня загадка и в коде я тоже не разбираюсь. Это пока главные вопросы, уважаемые форумчане 2015-11-19_235352.jpgData_Exchange_v2_0.zip Изменено 19 ноября, 2015 пользователем Ленивый Лис 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portableДолжно выглядеть ...\terminal.exe" /portableи попробуйте снова. Вы сделали это?При добавлении этого параметра вызова терминала в ярлыке термиинала на рабочем столе все необходимые для работы терминала каталоги, по идее, должны переместиться или быть пересозданы в каталоге терминала.Проблемы это, скорее всего, не решит - но сделает ваш терминал более удобным для настройки этой опции.Пока всё выглядит намного хуже сложнее, чем сначала. :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 Да, бывает и так :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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 Silentspec для чтения: здесь есть исходники на С + mql библиотека с кучей функций по работе с файлами, включая чтение и запись юникод строк и даже строковых массивов.Ссылка (там есть ссылка на ftp и более свежую версию библиотеки) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ленивый Лис Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portableДолжно выглядеть ...\terminal.exe" /portableи попробуйте снова. Сделал, изменений не наблюдаю3а.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 в ярлыке терминала на рабочем столе, добавьте в свойствах в строке вызова терминала /portableДолжно выглядеть ...\terminal.exe" /portableи попробуйте снова. Сделал, изменений не наблюдаю Попробуйте указать каталог 1F..... либо тот что на Alpari оканчивается. Ссылка на сообщение Поделиться на другие сайты More sharing options...
romses Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 Старик, спасибо большое время.Т.е. в коде самого Тралла вы ошибку не видите которая может вести к таким последствиям?Просто других ордеров в момент этих трех открытых не было.Меджик в тралле проверяется и другие ордера в расчет он не должен брать, но их и нет по логам. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 я бы ужесточил код тралла таким образом:1) в цикл вычисления price и lots добавил проверку OrderType() - сейчас у вас в вычислении этих переменных могут участвовать как рыночные ордера, так и отложки.2) в цикл модификации добавил бы проверку на символ и тип ордера дополнительно к мэджику.3) у вас вычисление ТР вне цикла модификации (между циклами) и фактически производится по последнему по порядку OrderSelect цикла вычисления price и lots - а это мог быть ордер вообще другой пары, причем как бай, так и сэлл, от балды. Даже если у вас на торгуемой паре открыты только рыночные сэлл ордера, последний OrderSelect у вас мог быть бай ордера другой пары - и вы вычислили ТР для бай ордера (уровень на Takeprofit*2 выше/хуже) и радостно присваиваете его как ТР сэлл ордеров, что конечно в глубоком минусе. Если я прав, то это замечательная плавающая ошибка! :dА вообще в тралле не стоит модифицировать ордер не только при совпадении вычисленного и фактического ТР ордера, но и не стоит модицировать при отклонении расчетного (от фактического) ТР ордера менее чем на Х пипсов (допустим, Х=5 пятизначных).И, имхо, уровень БУ сетки ордеров лучше считать не как средне арифметическое взвешенное, а нормально и с учетом комиссии и свопа. Изменено 20 ноября, 2015 пользователем Старик 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
romses Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 я бы ужесточил код тралла таким образом:1) в цикл вычисления price и lots добавил проверку OrderType() - сейчас у вас в вычислении этих переменных могут участвовать как рыночные ордера, так и отложки.2) в цикл модификации добавил бы проверку на символ и тип ордера дополнительно к мэджику.3) у вас вычисление ТР вне цикла модификации (между циклами) и фактически производится по последнему по порядку OrderSelect цикла вычисления price и lots - а это мог быть ордер вообще другой пары, причем как бай, так и сэлл, от балды. Даже если у вас на торгуемой паре открыты только рыночные сэлл ордера, последний OrderSelect у вас мог быть бай ордера другой пары - и вы вычислили ТР для бай ордера (уровень на Takeprofit*2 выше/хуже) и радостно присваиваете его как ТР сэлл ордеров, что конечно в глубоком минусе. Если я прав, то это замечательная плавающая ошибка! :dА вообще в тралле не стоит модифицировать ордер не только при совпадении вычисленного и фактического ТР ордера, но и не стоит модицировать при отклонении расчетного (от фактического) ТР ордера менее чем на Х пипсов (допустим, Х=5 пятизначных).И, имхо, уровень БУ сетки ордеров лучше считать не как средне арифметическое взвешенное, а нормально и с учетом комиссии и свопа. Спасибо большое, вы оказались правы. если торговать на нескольких графиках то смуту вносило, то что ордер 0 не всегда оказывался от той серии ордеров для которой я хотел изменить ТПтеперь передаю Type в параметрах функции сразу после открытия очередного ордера, а не беру последний ордер в терминале.Не очень понял, что значит нормально считать? Есть пример? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 20 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2015 Не очень понял, что значит нормально считать? Есть пример? http://tlap.com/forum/laboratoriya-profitfx/24/open-source-sovetnik-forex-setka-trader-mod-i-ea-setka/2738/?do=findComment&comment=246997Оба варианта расчета уровня безубытка: как средне арифметическое взвешенное, так и прямой - с комиссиями и свопами.Надеюсь, в коде найдете и разберетесь - там не всё просто. :) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gtnh Опубликовано 21 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2015 Господа помогите...Просмотрел первые три урока Сергея. Здорово!Пытаюсь воспроизвести сову по третьему уроку.... по ТМА.Засада на ровном месте. Вопрос - почему высвечиваются ошибки и symbol не подсвечивается в цвет?http://joxi.ru/eAOlzELIJOnBro (для увеличения кликните мышкой на картинку) Изменено 21 ноября, 2015 пользователем Gtnh Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти