awals Опубликовано 2 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 июля, 2019 6 минут назад, 0ll_ сказал: awals я просил файл, который Вы получаете с сервера, можно в виде текста. Мы же в нём будем данные искать Понял. MyStopLossJson_Test_EURUSD_60.txt Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 3 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2019 Всем привет! Будьте добры посмотрите пожалуйста на индикатор и подскажите или поправьте, почему у меня не получается данные по буферам получить. HP_DIFF.ex4 Proverka 2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
batmanuyga Опубликовано 3 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2019 Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ). if( timepref==Time[0])return ; int timeprev=Time[0]; maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1); if(CountBuy()==0 && Bid>maprice ) { ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue); Открываются , почему то не только на открытии бара, но и в середине бара ( например в 10.07 ), если предыдущий ордер закрылся... Что не так , не пойму. Изменено 3 июля, 2019 пользователем batmanuyga Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ent Опубликовано 3 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2019 5 часов назад, batmanuyga сказал: Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ). if( timepref==Time[0])return ; int timeprev=Time[0]; maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1); if(CountBuy()==0 && Bid>maprice ) { ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue); Открываются , почему то не только на открытии бара, но и в середине бара ( например в 10.07 ), если предыдущий ордер закрылся... Что не так , не пойму. Данная переменная int timeprev; должна быть глобальной, т.е. находиться за пределами функции void OnTick() и тп. Ну и конструкция должна быть немного иной. if (timeprev != Time[0]) { maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1); if (CountBuy()==0 && Bid>maprice) { ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue); timeprev = Time[0]; } } Изменено 3 июля, 2019 пользователем Ent 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll_ Опубликовано 3 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2019 awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266} разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{". Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",". Полученный массив по строчно анализируем и записываем в переменные. Вот пример работы StringSplit: string strArr[]; ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr); 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 3 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2019 5 часов назад, batmanuyga сказал: if( timepref==Time[0])return ; int timeprev=Time[0]; Если код скопирован из советника, то у Вас опечатка в имени переменной timepref(v) Изменено 3 июля, 2019 пользователем usver73 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
awals Опубликовано 3 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2019 4 часа назад, 0ll_ сказал: awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266} разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{". Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",". Полученный массив по строчно анализируем и записываем в переменные. Вот пример работы StringSplit: string strArr[]; ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr); Спасибо, но ни черта не понял, первый массив получил, а как дальше так и не понял. Как выбрать последнею запись, как последний массив записать в переменные. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 4 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 июля, 2019 13 часов назад, awals сказал: Как выбрать последнею запись 18 часов назад, 0ll_ сказал: Функция вернёт размер массива, берём последнюю запись [n-1] считываем в переменную типа string значение последней записи string LastLine = strArr[n-1], где n- размер массива strArr. и дальше 18 часов назад, 0ll_ сказал: и опять засовываем в StringSplit, только с разделителем ",". string strArr2[]; ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2); 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
awals Опубликовано 4 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 июля, 2019 13 часов назад, usver73 сказал: считываем в переменную типа string значение последней записи string LastLine = strArr[n-1], где n- размер массива strArr. и дальше string strArr2[]; ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2); Огромное спасибо, всё получилось и ещё вопрос, а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей? Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 4 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 июля, 2019 8 минут назад, awals сказал: а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей? организуйте цикл, типа for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++) { // здесь получаете значение из массива и обрабатываете как было раньше расписано string LastLine = strArr[i]; int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2); } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
awals Опубликовано 6 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2019 В 04.07.2019 в 19:52, usver73 сказал: организуйте цикл, типа for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++) { // здесь получаете значение из массива и обрабатываете как было раньше расписано string LastLine = strArr[i]; int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2); } Добрый день, подскажите если какие-нибудь путные Книги по обучению MQL4? Или может вы порекомендуете. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll_ Опубликовано 6 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2019 6 часов назад, awals сказал: подскажите если какие-нибудь путные Книги по обучению MQL4? Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся... Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
awals Опубликовано 6 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2019 1 час назад, 0ll_ сказал: Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся... Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет. Вот в этом и дело почему ищу Книгу, Уровень у меня начинающий это мой первый Индикатор, который пробую паписта. А вот сам Индикатор ну или что получилось.не судите учусь. StopLoss.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kudinoff Опубликовано 6 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2019 Подскажите зеленому как правильно расписать цикл for() для следующей задачки: if(allbuyprofit<-AccountBalance()*LockTrigger/100)OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink); нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger. Ссылка на сообщение Поделиться на другие сайты More sharing options...
NightTraider Опубликовано 7 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2019 Подскажите как написать, чтобы в терминалы отображались значки открытых ордеров на основе скрипта for(int i=0;i<OrdersHistoryTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderSymbol()!=Symbol()||OrderType()>1)continue; name=OrderTicket(); color col=SellColor; if(OrderType()==0)col=BuyColor; datetime a = OrderOpenTime(); double b = OrderOpenPrice(); datetime c = OrderCloseTime(); double d = OrderClosePrice(); datetime f; ObjectCreate(name+"T",OBJ_ARROW,0,a,b); ObjectSet(name+"T",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"T",OBJPROP_ARROWCODE,1); // - стрелка вправо ObjectCreate(name+"F",OBJ_ARROW,0,c,d); ObjectSet(name+"F",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"F",OBJPROP_ARROWCODE,3); // - стрелка влево y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2); f = c+5*PeriodSeconds(PERIOD_CURRENT); ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor); x=x+y; } HistoryOrders.mq4 Изменено 7 июля, 2019 пользователем NightTraider Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll_ Опубликовано 7 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2019 12 часов назад, kudinoff сказал: нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ... на залокированных ордерах? В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) ); потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать... NightTraider по идее приведённый Вами код должен показать все закрытые ордера, в том числе ручные и открытые скриптом - в нём нет фильтрации по магику. Ссылка на сообщение Поделиться на другие сайты More sharing options...
awals Опубликовано 7 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2019 11 часов назад, NightTraider сказал: Подскажите как написать, чтобы в терминалы отображались значки открытых ордеров на основе скрипта for(int i=0;i<OrdersHistoryTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderSymbol()!=Symbol()||OrderType()>1)continue; name=OrderTicket(); color col=SellColor; if(OrderType()==0)col=BuyColor; datetime a = OrderOpenTime(); double b = OrderOpenPrice(); datetime c = OrderCloseTime(); double d = OrderClosePrice(); datetime f; ObjectCreate(name+"T",OBJ_ARROW,0,a,b); ObjectSet(name+"T",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"T",OBJPROP_ARROWCODE,1); // - стрелка вправо ObjectCreate(name+"F",OBJ_ARROW,0,c,d); ObjectSet(name+"F",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"F",OBJPROP_ARROWCODE,3); // - стрелка влево y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2); f = c+5*PeriodSeconds(PERIOD_CURRENT); ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor); x=x+y; } HistoryOrders.mq4 6 \u043a\u0411 · 0 загрузок Вот Order_Indikator.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kudinoff Опубликовано 7 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2019 4 часа назад, 0ll_ сказал: Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ... на залокированных ордерах? В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) ); потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать... Локирование частичное, поэтому дальнейший рост просадки возможен. Не понял, зачем лот умножать на коэффициент (с расчетом лотности как раз нет проблем). int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) ) выдаст абракадабру. Если имелась в виду именно кратность просадки тригеру, то правильнее MathFloor( allbuyprofit / AccountBalance() / ( LockTrigger / 100 ) ) Как в дальнейшем использовать kfx, чтобы открытие локов было однократным для каждого значения kfx (до тех пор, пока локирующий ордер, соответствующий этой кратности, не закрыт)? Пока что все попытки приводят к хаотичному открытию ордеров. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll_ Опубликовано 7 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2019 4 часа назад, kudinoff сказал: Локирование частичное, поэтому дальнейший рост просадки возможен Самый простой вариант это создать глобальную переменную (лучше на уровне терминала) kfz = 1; и внести в Вашу формулу изменения: if( allbuyprofit< -AccountBalance() *LockTrigger *kfz /100) { OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink); kfz++; } После закрытия лока ( ну или слива ;) ) не забыть присвоить kfz = 1; Ссылка на сообщение Поделиться на другие сайты More sharing options...
kudinoff Опубликовано 7 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2019 2 часа назад, 0ll_ сказал: kfz++ Не работает Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll_ Опубликовано 8 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2019 14 часов назад, kudinoff сказал: 16 часов назад, 0ll_ сказал: kfz++ Не работает Сочувствую... Ссылка на сообщение Поделиться на другие сайты More sharing options...
kudinoff Опубликовано 8 июля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2019 Оказалось ошибка тикета из-за которой он беспорядочно открывал ордера. Изменено 10 июля, 2019 пользователем kudinoff Ссылка на сообщение Поделиться на другие сайты More sharing options...
AdA Опубликовано 10 августа, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 августа, 2019 Ребята, привет! Поделитесь пожалуйста хорошим обучающим курсом программирования mql4. Ссылка на курс из форума не приходит на почту. Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 10 августа, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 августа, 2019 15 минут назад, AdA сказал: Ребята, привет! Поделитесь пожалуйста хорошим обучающим курсом программирования mql4. Ссылка на курс из форума не приходит на почту. Спасибо! Ссылка на онлайн и оффлайн версии курса курса Здравствуйте, дорогой подписчик ! Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами: 1) Онлайн версия Доступна по ссылке: http://tlap.com/wppage/videokurs-foreks-dlya-chaynikov/ А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем. http://tlap.com/category/uroki-po-mql/ 2) Оффлайн версия Если вы предпочитаете более старомодный способ просмотра, вы можете скачать курс в виде отдельных видео-уроков в комплекте с оболочкой для запуска и наслаждаться просмотром, даже без участия интернета. Например где-то на даче, долгими зимними вечерами...) Вот ваша ссылка на скачивание архива с видеокурсом "Форекс для Чайников":https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar Также вы можете скачать этот курс с торрент-трекера:https://rutracker.net/forum/viewtopic.php?t=4126559 Изменено 10 августа, 2019 пользователем MikR0ReR 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AdA Опубликовано 10 августа, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 августа, 2019 1 час назад, MikR0ReR сказал: Ссылка на онлайн и оффлайн версии курса курса Здравствуйте, дорогой подписчик ! Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами: 1) Онлайн версия Доступна по ссылке: http://tlap.com/wppage/videokurs-foreks-dlya-chaynikov/ А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем. http://tlap.com/category/uroki-po-mql/ 2) Оффлайн версия Если вы предпочитаете более старомодный способ просмотра, вы можете скачать курс в виде отдельных видео-уроков в комплекте с оболочкой для запуска и наслаждаться просмотром, даже без участия интернета. Например где-то на даче, долгими зимними вечерами...) Вот ваша ссылка на скачивание архива с видеокурсом "Форекс для Чайников":https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar Также вы можете скачать этот курс с торрент-трекера:https://rutracker.net/forum/viewtopic.php?t=4126559 Нужен курс по программированию. Нашел на другом источнике. Спасибо! Еще вопрос, подскажите пожалуйста, сколько потребуется времени (в часах, примерно) чтобы освоить программирование в объеме: открытие и сопровождение советником сетки ордеров по сигналам торговой системы, учитывающей ATR и показатели выхода новостей по новостному календарю? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти