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