Alexandrkas Опубликовано 11 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 января, 2017 Подскажите по 6 уроку, написание скриптов. С первым заданием из ДЗ не могу разобраться. Нужно написать скрипт, который будет выставлять защитные стоп ордера к уже имеющимся. Вроде по логике все правильно в коде, но почему то на графике ни чего не происходит. Файл скрипта прилагаю. StopOrderProtection.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 11 января, 2017 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 января, 2017 Подскажите по 6 уроку, написание скриптов. С первым заданием из ДЗ не могу разобраться. Нужно написать скрипт, который будет выставлять защитные стоп ордера к уже имеющимся. Вроде по логике все правильно в коде, но почему то на графике ни чего не происходит. Файл скрипта прилагаю. Приветствую!1-я ошибка тут:for(int i=OrdersTotal()-1; i Правильно будет:for(int i=OrdersTotal()-1; i>=0; i--) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexandrkas Опубликовано 11 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 января, 2017 1-я ошибка тут:Код: [Выделить]for(int i=OrdersTotal()-1; iПравильно будет:for(int i=OrdersTotal()-1; i>=0; i--) Спасибо. Теперь все работает. Я почему-то рассуждал, что цикл будет продолжаться пока i не станет меньше либо равно нулю. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 11 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 января, 2017 Странно, вроде все нормально работать должно :d Изменено 11 января, 2017 пользователем Silentspec Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 11 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 января, 2017 Приветствую! Подскажите,чего все ордера у файл не пишутся http://joxi.ru/V2VgoO6TnB4bAvПробовал код с sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); вынести за Ордертайп,та же фигня.void OnTick() { //--- Открываем файл int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { type=0; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_SELL) { type=1; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_BUYLIMIT) { type=2; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_SELLLIMIT) { type=3; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_BUYSTOP) { type=4; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_SELLSTOP) { type=5; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } RefreshRates(); }//OrderSelect FileClose(h); }// Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 12 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2017 Разбираюсь с советником, при компиляции пишет ошибку 'AutoTimeSettings should be (fal…' - parameter passed as reference, variable expected делает ссылку на эту строкуif (AutoTimeSettings) {MessageBoxA(0, "AutoTimeSettings should be (false) at the test mode. Using ManualGMT_Offset", "Error", 0);в чем может быть дело? Ссылка на сообщение Поделиться на другие сайты More sharing options...
afert Опубликовано 12 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2017 Уважаемые программисты! Возможно глупый вопрос, но не могу сообразить. Собираю советник по индикатору и двум таймфреймам Н1 и М15, на Н1 есть сигнал и пока он держится на М15 может быть несколько потенциальных входов. Подскажите как прописать условие чтобы брался только первый или один? Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 12 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2017 Подскажите на примере как правильно все открытые сделки в мт4 записать у файл и прочитать их,бо реально,что не делал пишет только последний ордер и все.А если ордер закрылся то запись о нем не стираеться из файла.//Запись//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { //--- Открываем файл int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { type=0; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_SELL) { type=1; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_BUYLIMIT) { type=2; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_SELLLIMIT) { type=3; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_BUYSTOP) { type=4; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } if(OrderType()==OP_SELLSTOP) { type=5; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp; FileWrite(h,s); } RefreshRates(); }//OrderSelect FileClose(h); }// Import_trade.mq4Export_trade.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 Подскажите на примере как правильно все открытые сделки в мт4 записать у файл и прочитать их,бо реально,что не делал пишет только последний ордер и все.А если ордер закрылся то запись о нем не стираеться из файла. навскидку думаю что ты просто перезаписываешь переменные и остается один последний ордер. Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 навскидку думаю что ты просто перезаписываешь переменные и остается один последний ордер. А как правильно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 навскидку думаю что ты просто перезаписываешь переменные и остается один последний ордер. А как правильно? Может просто каждый ордер отдельно записывать в отдельный файл, я же не знаю для чего и каквы используете эти данные. Толковые ребята найдутся которые распишут как нужно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Viktor M. Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 Здравствуйте, уважаемый Сергей Ака! В MQL eсть функция GetTickCount, которая возвращает число msec, прошедших с момента запуска системы. Скажите пожалуйста, возможно-ли с помощью этой функции определить время между тиками т.е. GetTickCount_2 - GetTickCount_1 = t(msec), и, как это правильно прописать в коде MQL. И ещё, пожалуйста, как в условном операторе прописать направление движения цены (вверх или вниз). Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 Жаль,что в моем вопросе отсутствую специалисты способные помочь по записи и чтению всех типов ордеров в файл с обновлением если ордер закрылся. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 FileWrite(h,s); FileWriteString(h, s + "\r\n") вам в помощь. Но лучше такs += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n";FileWrite(h,s); ...}//OrderSelectFileWrite(h,s);FileClose(h); Изменено 13 января, 2017 пользователем SilverKZ Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 FileWriteString(h, s + "\r\n") вам в помощь. Куда конкретно записать FileWriteString(h, s + "\r\n")void OnTick() { //--- Открываем файл int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { type=0; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; FileWriteString(h,s); } if(OrderType()==OP_SELL) { type=1; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; FileWriteString(h,s); } if(OrderType()==OP_BUYLIMIT) { type=2; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; FileWriteString(h,s); } if(OrderType()==OP_SELLLIMIT) { type=3; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; FileWriteString(h,s); } if(OrderType()==OP_BUYSTOP) { type=4; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; FileWriteString(h,s); } if(OrderType()==OP_SELLSTOP) { type=5; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; FileWriteString(h,s); } RefreshRates(); }//OrderSelect FileClose(h); }//Добавлено: 13-01-2017 14:07:47 FileWrite(h,s); FileWriteString(h, s + "\r\n") вам в помощь. Но лучше такs += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n";FileWrite(h,s); ...}//OrderSelectFileWrite(h,s);FileClose(h); У меня в файл с новой строки пишеться,но вместо трех сделок,пишеться раз в 100 больше.http://joxi.ru/n2YVoxLUKdkoA6вот исходникhttp://joxi.ru/krD0oMginOGWrp Изменено 13 января, 2017 пользователем scherbakovss Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 Так Спойлер Цитата //Запись//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { //--- Открываем файл int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { type=0; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s+=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; } if(OrderType()==OP_SELL) { type=1; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s+=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; } if(OrderType()==OP_BUYLIMIT) { type=2; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s+=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; } if(OrderType()==OP_SELLLIMIT) { type=3; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s+=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; } if(OrderType()==OP_BUYSTOP) { type=4; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s+=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; } if(OrderType()==OP_SELLSTOP) { type=5; lot=OrderLots(); sl=OrderStopLoss(); tp=OrderTakeProfit(); sl=NormalizeDouble(sl,Digits); tp=NormalizeDouble(tp,Digits); s+=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n"; } RefreshRates(); }//OrderSelect FileWrite(h,s); FileClose(h); }// Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 }//OrderSelect FileWrite(h,s); Наверное FileWriteString(h,s); //вместо FileWrite(h,s);Добавлено: 13-01-2017 14:30:05Так (click to show/hide) Все равно в файл пишет 100 дубликатов вместо 3х сделок. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 scherbakovss, вам нужен советник или скрипт? Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 scherbakovss, вам нужен советник или скрипт? Советник,так,что бы я его видел.Добавлено: 13-01-2017 18:54:22scherbakovss, вам нужен советник или скрипт? в терминале было три сделки открыто,а он в текстовый файл 15895 записей сделал Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 OK, сделал рефакторинг кода Export и поправил чуть, импорт сами сделайте. Export_trade.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 OK, сделал рефакторинг кода Export и поправил чуть, импорт сами сделайте. А как для отложенного ордера вернуть цену,по которой он установлен?OrderOpenPrice() это же для рыночного ордера? Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 13 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2017 А как для отложенного ордера вернуть цену,по которой он установлен? Так же, как и для рыночного. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 14 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 января, 2017 Вы можете открыть сокет и вторым терминалом к нему подключиться ( можно даже сделать терминалы на разных компьютерах ).Так же вы можете использовать расширяемую память, но это от вас потребует синхронизации процессов для работы с ней ( mutex или semaphore ). Ссылка на сообщение Поделиться на другие сайты More sharing options...
scherbakovss Опубликовано 14 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 января, 2017 ). А можно по человечески ответить?Ваши ссылки на википедию,в которой поверхностные статьи.Как конкретно подключиться к сокету,приведите пример на mql4 ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 января, 2017 А можно по человечески ответить?Имхо, не будет примеров на мкл... Это сложная тема и стоит немалых денег.Если скорость передачи значений между терминалами не критична, то передавать можно через файл в общей папке терминалов - эти примеры видел в сети. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти