Soldat Опубликовано 14 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 ноября, 2015 Soldat у Вас 1 эксперт торгует по 10 парам - это понятно, при этом использует для поиска сигнала 4 ТФ - это можно понять, но в чём вопрос и сложность - не понятно...Ваш эксперт будет стоять и получать тики с одного графика (пары), узнать котировку по другой паре можно только специально через запрос, т.е. Вы можете отследить закрытие бара (любого ТФ) только на основной паре, а теперь, как говориться, следите за руками: тик пришел и сова поняла, что по основной паре открылся новый бар, а по другой паре (XXXYYY) тика ещё не было, вопрос что Вам вернёт функция iClose(XXXYYY, 0, 1)?Если Вы знаете ответ - то Вам должно быть вообще все понятно.Я точного ответа не знаю, но могу предположить, что эта функция вернёт Вам не то, что Вы ожидали, скажу даже больше, эта функция вернёт Вам не то, даже если Вы сделаете запрос по текущей паре, но с другого ТФ.Это я к тому, что отслеживать закрытие баров на 4 ТФ надо по той паре, где стоит сова, потом в цикле делать расчёты сигналов по всем парам (предполагая, что и там бары закрыты, или проверяя время открытия 1 бара на основной паре и рабочей паре). Проблема в том, что он торгует на одном таймфрейме. А 4 таймфрейма, это для большего охвата. Советник торгует по прайс экшену. Считай одной свечной комбинации. Она появляется нечасто. Вот и решил сделать советник мультивалютным и мультитаймфреймовым. Чтобы поставил на один символ, а торговля происходила сразу на куче валют и нескольких таймфреймах. А если делать даже в цикле, то опять возвращаемся к 40 операторам if или for. Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 14 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 ноября, 2015 Soldat, нет никакого смысла делать советник по подобной стратегии, работающий одновременно на разных валютных парах. У разных пар в любом случае будет разная волатильность и как минимум разные СЛ-ТП, поэтому подбирать параметры (оптимизировать) нужно будет на каждую пару в отдельности. С вашей идеей это исключено полностью. Делайте один советник с настраиваемыми параметрами и оптимизируйте для выбранных пар, потом ставьте копию советника с нужным сетом и разными магиками на пары. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Soldat Опубликовано 14 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 ноября, 2015 Soldat, нет никакого смысла делать советник по подобной стратегии, работающий одновременно на разных валютных парах. У разных пар в любом случае будет разная волатильность и как минимум разные СЛ-ТП, поэтому подбирать параметры (оптимизировать) нужно будет на каждую пару в отдельности. С вашей идеей это исключено полностью. Делайте один советник с настраиваемыми параметрами и оптимизируйте для выбранных пар, потом ставьте копию советника с нужным сетом и разными магиками на пары. Да один советник сделан. Ну а чего там можно оптимизировать? Профит везде одинаковый, а стоп я вообще не стал ставить. Свечи они везде одинаковые. По крайней мере на основных парах. Стоп не стал ставить, потому что сделки открываются не очень часто. Вроде советник открыл сделку, а я потом посмотрел чего он там наоткрывал и сделал выводы. Вообще мультивалютность мне нужна, чтобы сделать из него алерта на требуемый мне патерн. А то просматривать несколько десятков графиков очень затратно по времени. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 ноября, 2015 Soldat теперь понятно. предлагаю след. алгоритм:Делаете 4 сигнальные функции на 4 ТФ по основной паре.После срабатывания сигнальной функции по Х-ТФ идёт вызов функции поиска свечного паттерна с передачей в неё периода (Х-ТФ). Т.е. функция поиска свечного паттерна одна на все пары и ТФ.Внутри поисковой функции будет цикл по всем парам. (без него ни как).т.е.if ( isNewBar_M5() ) f_FindPA( PERIOD_M5 ); // например...имхо, ну а там как знаете... 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Soldat Опубликовано 15 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 ноября, 2015 Кто-нибудь знает - есть ли альтернатива стандартному алерту? Хочется поменять дизайн и самое главное - этот ужасный звук. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2015 Кто-нибудь знает - есть ли альтернатива стандартному алерту? Хочется поменять дизайн и самое главное - этот ужасный звук.Поменяй звук. смотри здесь: C:\Program Files (x86)\MetaTraderХХХХ\SoundsПоменять дизайн конечно можно, но в 2 словах не описать как создать окно на уровне терминала. да и имхо не нужно это... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Soldat Опубликовано 16 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2015 Кто-нибудь знает - есть ли альтернатива стандартному алерту? Хочется поменять дизайн и самое главное - этот ужасный звук.Поменяй звук. смотри здесь: C:\Program Files (x86)\MetaTraderХХХХ\SoundsПоменять дизайн конечно можно, но в 2 словах не описать как создать окно на уровне терминала. да и имхо не нужно это... А я вот думаю воспользоваться MessageBox, только вот возникла загвоздка с отображением временного периода графика. Хотел сделать, чтобы выводилось сообщение наподобие "Образовался сигнал на покупку" Symbol () период графика Period () " По-моему эта функция более одного параметра не отображает. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2015 Soldat сформируйте строку со всеми параметрами и её передайте. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 16 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2015 Кто-нибудь знает - есть ли альтернатива стандартному алерту? Хочется поменять дизайн и самое главное - этот ужасный звук.Поменяй звук. смотри здесь: C:\Program Files (x86)\MetaTraderХХХХ\SoundsПоменять дизайн конечно можно, но в 2 словах не описать как создать окно на уровне терминала. да и имхо не нужно это... А я вот думаю воспользоваться MessageBox, только вот возникла загвоздка с отображением временного периода графика. Хотел сделать, чтобы выводилось сообщение наподобие "Образовался сигнал на покупку" Symbol () период графика Period () " По-моему эта функция более одного параметра не отображает. Так и пишите "Образовался сигнал на покупку"+IntegerToString(Symbol ())+"период графика"+IntegerToString(Period ()) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2015 +IntegerToString(Symbol ()) Чёт ты перегнул... :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 16 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2015 Сгоряча =)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Томич Опубликовано 17 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 ноября, 2015 Как найти разницу в пунктах между закрытием первого бара Close[1] и закрытием текущего Close[0]?В последствии отображать в виде гистограммы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ASugler Опубликовано 17 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 ноября, 2015 Достаточно простобуфер индикатора = (Close[ i ]-Close[i+1])/Point(); DifClose.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
romses Опубликовано 18 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 ноября, 2015 Коллеги, добрый день,Есть тралл ТП который работает, но всегда выдает Error 1, а в редких случаях переводить ТП в убыток. Помогите решать проблему пожалуйста.void TrallTP(){ double price = 0, lots = 0, avgprice = 0; for (int i=OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i,SELECT_BY_POS)) { if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) { price +=OrderOpenPrice() * OrderLots(); lots +=OrderLots(); } } } if (price == 0) return; avgprice = NormalizeDouble(price / lots, Digits); if (OrderType() == OP_BUY) TP = NormalizeDouble(avgprice + Takeprofit * Point, Digits); if (OrderType() == OP_SELL) TP = NormalizeDouble(avgprice - Takeprofit * Point, Digits); for (int i=OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i,SELECT_BY_POS)) { if (OrderMagicNumber() == Magic) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), TP, OrderExpiration(), clrAliceBlue)) printf("Error: ", GetLastError()); } } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 18 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 ноября, 2015 НУ во первых расчет Средней цены идет для обоих направлений, из-за этого при наличии ордеров как бай так и селл возможен вариант когда ТП выставится в минус.Error 1 лечится легко. просто добавь перед модификацией дополнительную проверку if (TP==OrderTakeProfit()) continue; 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
romses Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Спасибо за помощь. Ордера советник открывает только в одну сторону, потому такой ситуации не возможно.Вот сегодня снова в убыток передвинул три ордера (((не пойму как?может брокер шаманит? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Парни, подсобите плиз с функцией.Назначение: загрузка параметров из set файлов при инициализации советника.Назначаю переменные: Спойлер #define OF_READ 0#define OF_WRITE 1#define OF_READWRITE 2#define OF_SHARE_COMPAT 3#define OF_SHARE_DENY_NONE 4#define OF_SHARE_DENY_READ 5#define OF_SHARE_DENY_WRITE 6#define OF_SHARE_EXCLUSIVE 7 Импортирую функции из библиотеки: Спойлер #import "kernel32.dll"int _lopen (string path, int of);int _lcreat (string path, int attrib);int _llseek (int handle, int offset, int origin);int _lread (int handle, string buffer, int bytes);int _lwrite (int handle, string buffer, int bytes);int _lclose (int handle);#import Объявляю текстовый массивstring lines[];Объявляю путь к сетамstring FilePathSets="\\MQL4\\Presets";Функция открывает сет файл и переносит значения в массив lines[]До этого функцией определил значение prefix Спойлер //+------------------------------------------------------------------+//| Function loads set file |//+------------------------------------------------------------------+int LoadSet() { int presymb=StringLen(prefix); int result=-1; string s=""; string NameOfSymbol = StringSubstr(Symbol(),presymb,6); string name=StringConcatenate("\\",ExpertName,"_",NameOfSymbol,"_",SetVersion); string filepath=TerminalInfoString(TERMINAL_DATA_PATH)+FilePathSets+name+".set"; // filepath - полный путь к файлу и его название. // И при открытии файла возвращается хендл -1.... Что я не так сделал? int handle=_lopen (filepath,OF_READ); if(handle { Print("Ошибка открытия файла ",filepath); return (-1); } result=_llseek (handle,0,0); if(result { Print("Ошибка установки указателя" ); return (-1); } ArrayResize(lines,0); //загрузка файла set int i=0; while(result>0) { s=_lread (handle,s,1); if(s=="" || StringFind(s,",")>0) continue; ArrayResize(lines,i+1); lines=s; //сохраним все переменные из файла в массив для последующего поиска и выборки } result=_lclose (handle); if(result Print("Ошибка закрытия файла ",filepath); return (i); } Затем я ищу нужный мне параметр в массиве Спойлер //+------------------------------------------------------------------+//| Function searches for "match" parameter in lines[] massive |//+------------------------------------------------------------------+string GetSetFileString(string match) { int LinesLength=ArraySize(lines); int pos=StringLen(match); for(int i=0;i { if(StringFind(lines,match,0)!=-1) return (StringSubstr(lines,pos+1)); } return(""); } Ну а потом просто перевожу из строки в нужный мне вид. Изменено 19 ноября, 2015 пользователем Silentspec Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Спойлер Парни, подсобите плиз с функцией.Назначение: загрузка параметров из set файлов при инициализации советника.Назначаю переменные: Спойлер #define OF_READ 0#define OF_WRITE 1#define OF_READWRITE 2#define OF_SHARE_COMPAT 3#define OF_SHARE_DENY_NONE 4#define OF_SHARE_DENY_READ 5#define OF_SHARE_DENY_WRITE 6#define OF_SHARE_EXCLUSIVE 7 Импортирую функции из библиотеки: Спойлер #import "kernel32.dll"int _lopen (string path, int of);int _lcreat (string path, int attrib);int _llseek (int handle, int offset, int origin);int _lread (int handle, string buffer, int bytes);int _lwrite (int handle, string buffer, int bytes);int _lclose (int handle);#import Объявляю текстовый массивstring lines[];Объявляю путь к сетамstring FilePathSets="\\MQL4\\Presets";Функция открывает сет файл и переносит значения в массив lines[]До этого функцией определил значение prefix Спойлер //+------------------------------------------------------------------+//| Function loads set file |//+------------------------------------------------------------------+int LoadSet() { int presymb=StringLen(prefix); int result=-1; string s=""; string NameOfSymbol = StringSubstr(Symbol(),presymb,6); string name=StringConcatenate("\\",ExpertName,"_",NameOfSymbol,"_",SetVersion); string filepath=TerminalInfoString(TERMINAL_DATA_PATH)+FilePathSets+name+".set"; // filepath - полный путь к файлу и его название. // И при открытии файла возвращается хендл -1.... Что я не так сделал? int handle=_lopen (filepath,OF_READ); if(handle { Print("Ошибка открытия файла ",filepath); return (-1); } result=_llseek (handle,0,0); if(result { Print("Ошибка установки указателя" ); return (-1); } ArrayResize(lines,0); //загрузка файла set int i=0; while(result>0) { s=_lread (handle,s,1); if(s=="" || StringFind(s,",")>0) continue; ArrayResize(lines,i+1); lines=s; //сохраним все переменные из файла в массив для последующего поиска и выборки } result=_lclose (handle); if(result Print("Ошибка закрытия файла ",filepath); return (i); } Затем я ищу нужный мне параметр в массиве Спойлер //+------------------------------------------------------------------+//| Function searches for "match" parameter in lines[] massive |//+------------------------------------------------------------------+string GetSetFileString(string match) { int LinesLength=ArraySize(lines); int pos=StringLen(match); for(int i=0;i { if(StringFind(lines,match,0)!=-1) return (StringSubstr(lines,pos+1)); } return(""); } Ну а потом просто перевожу из строки в нужный мне вид. Чем вам не нравится обертка от MQL?string file_name = get_file_name_by_type ( type ); if ( !FileIsExist ( file_name ) ) { return result; } int handle = FileOpen ( file_name, FILE_READ | FILE_TXT ); if ( handle == INVALID_HANDLE ) { return result; } string val = FileReadString ( handle ); FileClose ( handle ); if ( str_is_empty ( val ) ) { FileDelete ( file_name ); return result; } Попробуйте сначала прописать полный путь руками C:\.... , если все гуд, то что то с относительным путем.. Изменено 19 ноября, 2015 пользователем Qj 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Парни, подсобите плиз с функцией. _lread и остальные функции подобного именования оставлены для обратной совместимости и их явное использование - дурной тон. Следует использовать CreateFileW и другие widechar функции 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Парни, подсобите плиз с функцией. _lread и остальные функции подобного именования оставлены для обратной совместимости и их явное использование - дурной тон. Следует использовать CreateFileW и другие widechar функции Давно хотел спросить, в чем разница между PostMessageA например и PostMessageW? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ленивый Лис Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Знающим любое решение такой задачи прошу откликнуться.Как сделать так, чтобы по закрытию свечи на заданном ТФ скриптом или индюком делался скрин графика и автоматически отправлялся на почту, думаю это было бы чрезвычайно полезно всем, кому не удобно вытаскивать копм на закрытии каждой свечиПоделитесь, пожалуйста, любой инфой по этому поводу - софтом, умеющим делать скриншоты, например.Я так понимаю, что мт4 умеет отсылать только сообщение на мыло и нужен какой то внешний софт, как решить вопрос автоматической отправки скринов? :-/ Изменено 19 ноября, 2015 пользователем Ленивый Лис Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Silentspec, разница в том что PostMessageA конвертирует строки в уникод вместо нерадивого программиста. Таким образом вызов PostMessageW на несколько команд ассемблера и вызов ф-ции конвертации короче, так как нет оберток вокруг уникода. В наш век быстрых процессоров это не критично но знать об этом стоит. На низком же уровне вызов с обеих ф-ций сводится к NtUserPostMessage 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Мистика какая-то. Выдает, что файла в этой директории нету, а он есть...2015.11.19 11:47:38 2000.09.01 00:00 Bolvanka v1.00 USDCHF,M15: Такого файла не существует C:\Users\Rjhytd\AppData\Roaming\MetaQuotes\Terminal\FC0DDA156FE31321E58C2060B9D89910\MQL4\Presets\Firestarter v1.21_USDCHF_01.set Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Изучайте_http://docs.mql4.com/ru/chart_operations/windowscreenshot_http://docs.mql4.com/ru/chart_operations/chartscreenshot_http://docs.mql4.com/ru/common/webrequest_http://docs.mql4.com/ru/common/sendftp Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2015 Silentspec у тебя пробел в названии файла "Firestarter v1.21_USDCHF_01.set". попробуй без пробела...и поддерживаю Qj - пользуйся mql-функциями, чтоб не заморачиваться с кодировками, массивами и т.д. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти