MikR0ReR Опубликовано 28 февраля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 февраля, 2020 @agimat81 Вот точно не будет такого мануала! Нужно экстраполировать знания GET POST запросов с C# на MQL. Я посмотрел MQL, GET POST запросы можно организовать. А вот парсинг придется выводить в DLL на C# или кто на чем любит. Можно конечно парсинг организовать и в MQL, но штатными средствами это займет кучу времени и нервов, может работать не стабильно, вообщем гарантий не даю, не предназначен он для парсинга. Если я конечно правильно понял, что нужно работать с сайтом бинарником, то что написал выше верно. Словом парсить я имел в виду извлечение нужных нам Cookie и ответов из множества. Изменено 28 февраля, 2020 пользователем MikR0ReR 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Норковый слон Опубликовано 6 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 марта, 2020 Подскажите пожалуйста, при написании индюка, как можно перенести значения цены закрытия бара любого другого инструмента на текущий для необходимых вычислении? Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 6 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 марта, 2020 @Норковый слон iClose(), CopyOpen() или CopyRates() Изменено 6 марта, 2020 пользователем MikR0ReR 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Норковый слон Опубликовано 8 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 марта, 2020 Доброго времени суток. Запутался чуток. Подскажите, как правильно записать последний массив? При тесте в журнале выдает array out of range. Спойлер extern int Period = 20; double Close1; double Close2; double Max1; double Min1; double Dif[ ]; double idx[ ]; { for(int a =0 ; a<Bars-1; a++) { Close1 = iClose(NULL, 0, a); Close2 = iClose("HO", 0, a); Dif[ a ] = NormalizeDouble(Close1 /Close2, 3); } for (int i =0; i<Bars-1 - Period; i++) { Max1 = Dif[ArrayMaximum(Dif,Period,i)]; Min1 = Dif[ArrayMinimum(Dif,Period,i)]; idx [ i ]= NormalizeDouble(100*(Dif[ i ]-Min1)/(Max1-Min1),2); // как обычную переменую типа double в журнал принт выводит, а в массив не // влезает } return(rates_total); } Изменено 10 марта, 2020 пользователем Норковый слон Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 10 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 марта, 2020 @Норковый слон Чтоб индексы отображались используйте в спойлере тег "</>" или ставьте пробелы вокруг "i" Чтоб Вам что-то подсказать покажите определение массива, т.е. строчку типа: double Dif[...]; или подобное. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 11 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 марта, 2020 Новый урок http://tlap.com/mql-udobnoe-okruzhenie/ 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 12 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2020 И снова здравствуйте! Есть функция: for(int i=period_1_ent; i>=1; i--) { if(iClose(NULL,tf_bs_1_ent,i)>iOpen(NULL,tf_bs_1_ent,i)) res+=iClose(NULL,tf_bs_1_ent,i)-iOpen(NULL,tf_bs_1_ent,i); } Если коротко: на периоде period_1_ent идет перебор свечей и если свеча белая, то размер тела свечи складывается в res. Но возникло затруднение: как дописать функцию, чтобы, например, в Comment() или для дальнейшей работы? можно было использовать не только сам res на первом баре, но и res на любом из предыдущих баров. Если угодно, как получить функцию res(i). Прошу, если кто может, помогите, Пожалуйста!!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 12 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2020 @Владимир Стариков Вот сам себе ответил! Использовать массив res[]. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 12 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2020 9 минут назад, MikR0ReR сказал: @Владимир Стариков Вот сам себе ответил! Использовать массив res[]. Спасибо!Если можно, то по подробнее, что Вы имели в виду. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 12 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2020 @Владимир Стариков for(q=Bars()-1-period_1_ent;q>=1;q--) { for(int i=q+period_1_ent; i>=q; i--) { if(iClose(NULL,tf_bs_1_ent,i)>iOpen(NULL,tf_bs_1_ent,i)) res+=iClose(NULL,tf_bs_1_ent,i)-iOpen(NULL,tf_bs_1_ent,i); } ress[q]=res; } вот и получишь свой res(i) в виде массива ress, там будут данные для каждого бара. И учти что пример из массива с таймсерией. Если я правильно понял, иначе разверните свой вопрос. Изменено 12 марта, 2020 пользователем MikR0ReR 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 12 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2020 22 минуты назад, MikR0ReR сказал: @Владимир Стариков for(q=Bars()-1-period_1_ent;q>=1;q--) { for(int i=q+period_1_ent; i>=q; i--) { if(iClose(NULL,tf_bs_1_ent,i)>iOpen(NULL,tf_bs_1_ent,i)) res+=iClose(NULL,tf_bs_1_ent,i)-iOpen(NULL,tf_bs_1_ent,i); } ress[q]=res; } вот и получишь свой res(i) в виде массива ress, там будут данные для каждого бара. И учти что пример из массива с таймсерией. Если я правильно понял, иначе разверните свой вопрос. Еще раз благодарю. Как Вы поняли я не очень разбираюсь, но хотел бы продолжать развитие... В качестве консультации прошу пояснить следующее: 1. Bars() - количество баров на текущем графике. Т.е. получается, например на графике 5000 баров, period_1_ent=49, значит перебор свечей пойдет от 5000-1-49=4950 и до первого бара? Что-то странновато...Я просто не понимаю, может здесь и нет ошибки. 2. Вместо Bars() можно ли использовать iBars()? В чем их отличия? Буду признателен за ответы! Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 12 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2020 @Владимир Стариков Будет странно если ты веришь что программистами рождаются. Учатся всему, водить машину, писать, читать, ходить человек тоже учится. Я тоже этому учился. Помогли мне уроки по MQL. Они есть на этом сайте. И множество в сети. Синтаксис MQL4 очень похож на синтаксис языка Си. И на сколько я знаю родителем стал язык C++. Ну блин! iBars - Возвращает количество баров в истории по запрашиваемому символу и периоду. Ну например, у тебя программа работает по нескольким валютным парам и тебе нужно знать сколько баров на другой валютной паре. Bars - Количество баров на текущем графике. Если тебе не нужны данные другой валютной пары, есть путь короче, это Bars. Выполняется быстрее, пишется быстрее и т.д. period_1_ent мы потом прибавляем к int i=q+period_1_ent Это что бы не выйти за рамки массива. Поэтому в ress[q] будут данные только за 4950 баров. А res будет считаться 4999 бара. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 14 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2020 Господа, приветствую, столкнулся с проблемой которую не могу решить уже несколько дней: Есть такой индикатор, вот код: Спойлер #property copyright "TO" #property link "http://www.forex-tradexperts-to.narod.ru" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_color2 Lime #property indicator_color3 OrangeRed #property indicator_level1 -0.9 #property indicator_level2 0 #property indicator_level3 0.9 #property indicator_minimum -1.05 #property indicator_maximum 1.05 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 2 extern int Nbars=89; extern int MA_Period =9; int MA_Method =3; double Value[]; double MA[]; double iFish[]; double Buy[]; double Sell[]; int init() { IndicatorBuffers(5); SetIndexBuffer(0, iFish); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(1, Buy); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2, Sell); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(3, Value); SetIndexBuffer(4, MA); IndicatorShortName("TREND FILTER ("+Nbars+","+MA_Period+")" ); return(0); } int deinit() { return(0); } int start() { int counted_bars = IndicatorCounted(), i; if (counted_bars < 0) return(-1); if (counted_bars > 0) counted_bars--; int limit=Bars - counted_bars+2*Nbars; double up,dn,osc; for(i = limit; i >= 0; i--) { up = High[iHighest(NULL,0,MODE_HIGH,Nbars,i)]; dn = Low[iLowest(NULL,0,MODE_LOW,Nbars,i)]; if (up>dn)osc = 100*(Close[i]-dn)/(up-dn); else osc = 0; if (osc < 0) osc = 0.1; if (osc > 100) osc = 99.9; Value[i]=0.1*(osc-50.0); } for(i = limit; i >= 0; i--) { MA[i]=iMAOnArray(Value,0,MA_Period,0,MA_Method,i); iFish[i]=(MathExp(2.0*MA[i])-1.0)/(MathExp(2.0*MA[i])+1.0); if (iFish[i]> 0.9) {Buy[i] =iFish[i]; Buy[i+1] =iFish[i+1];} if (iFish[i]<-0.9) {Sell[i]=iFish[i]; Sell[i+1]=iFish[i+1];} } return(0); } Сам по себе он отлично работает. Обращаюсь к нему через iCustom, допустим к первому буферу - Trend =iCustom(_Symbol,tf,"TrendFilter",Nbars,MA_Period,1,i); В ответ всегда получаю 0.0, причем не важно к какому буферу и номеру элемента обращаться, везде одинаково получаю 0. В чем причина не пойму. TrendFilter.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 14 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2020 @djnet Написано правильно! Смотри логи. Ищи проблему в другом месте. Дай файл своей проблемы. Изменено 14 марта, 2020 пользователем MikR0ReR Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 14 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2020 36 минут назад, MikR0ReR сказал: @djnet Написано правильно! Смотри логи. Ищи проблему в другом месте. Дай файл своей проблемы. В логах пусто, нет ошибок. Суть идеи такая - один раз в сутки на открытии новой дневной свечи, сова опрашивает индикатор по часовым свечам за предыдущий день, если все данные лежат в одном диапазоне (для buy значения больше 0,9, для sell меньше -0,9) то считаем что тренд buy или sell соответсвенно, если значения индикатора разные, считаем что тренда нет. Спойлер int TrendFilter() { int i=1; int trend=0; // 1 - buy, 2 - sell double Trend[25]; ArrayFill(Trend,0,25,0); //int currday=TimeDayOfYear(iTime(_Symbol,tf,0)); int previusday=TimeDayOfYear(iTime(_Symbol,tf,1)); int dayofyear=TimeDayOfYear(iTime(_Symbol,tf,1)); while(dayofyear==previusday) { Trend[i] =iCustom(_Symbol,tf,"Trend Filter",Nbars,MA_Period,0,i); i++; dayofyear=TimeDayOfYear(iTime(_Symbol,tf,i)); Print ("Trend[i] ", Trend[i]); } //int Tr_min=ArrayMinimum(Trend,WHOLE_ARRAY,0); //int Tr_max=ArrayMaximum(Trend,WHOLE_ARRAY,0); //if(Trend[Tr_max]<-0.9) trend=2; //if(Trend[Tr_min]>0.9) trend=1; return(trend); } tf=60; Nbars=89; MA_Period=9; Функция в данном варианте в журнал шлет нули. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 14 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2020 @djnet может tf=60; не нравится ему. iCustom написан правильно. Проверяй что передаешь в iCustom. И ЕСЛИ НУЖНА ПОМОЩЬ НЕ НАДО СЛАТЬ ОГРЫЗКИ КОДА. Изменено 14 марта, 2020 пользователем MikR0ReR 1 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 14 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2020 3 минуты назад, MikR0ReR сказал: @djnet может tf=60; не нравится ему. iCustom написан правильно. Проверяй что передаешь в iCustom. И ЕСЛИ НУЖНА ПОМОЩЬ НЕ НАДО СЛАТЬ ОГРЫЗКИ КОДА. вся сова достаточно объемная, к тому же не до конца дописана и с кучей моего мусора, могу прислать , поставил вместо tf=60 - PERIOD_H1. Заработало. Спасибо. Вообще не понятно почему так, вроде кучу индюков опрашивал одним и тем же способом, только этот выпендривается, буду знать на будущее - передаем таймфрейм только через ENUM. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 16 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2020 Всем привет! Ребята, подскажите, можно ли этот индикатор прикрутить к советнику, чтобы ордера открывались при пересечении пунктирных линий или после формирования прямоугольника? Я пытался через iCustom, но не знаю как в нём найти индексы для линий или прямоугольников соответственно. Надеюсь, это вообще возможно в этом индюке.. FX Blue - Renko Bars.ex4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 16 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2020 35 минут назад, Svob сказал: Всем привет! Ребята, подскажите, можно ли этот индикатор прикрутить к советнику, чтобы ордера открывались при пересечении пунктирных линий или после формирования прямоугольника? Я пытался через iCustom, но не знаю как в нём найти индексы для линий или прямоугольников соответственно. Надеюсь, это вообще возможно в этом индюке.. FX Blue - Renko Bars.ex4 40 \u043a\u0411 · 0 загрузок А есть открытый код? Ведь индексы линий надо в нем смотреть.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 16 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2020 @Владимир Стариков Код не нужен чтоб посмотреть индексы. @Svob Прикрутить можно все, ну почти все. Этот индикатор не использует индексы , так что iCustom тебе не поможет. Он рисует объекты на графике, вот к ним привязаться можно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 16 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2020 1 час назад, MikR0ReR сказал: @Владимир Стариков Код не нужен чтоб посмотреть индексы. @Svob Прикрутить можно все, ну почти все. Этот индикатор не использует индексы , так что iCustom тебе не поможет. Он рисует объекты на графике, вот к ним привязаться можно. А это с помощью ObjectGet? Или как-то по другому? Какой-нибудь советник можешь посоветовать как пример? Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 16 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2020 @Svob Можно и ObjectGetDouble() вообщем все из группы "Графические объекты". Кода для примера нет. Поверь в свои силы и увидишь, что от иКастома не намного отличается привязка, ну просто больше кода придется написать. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 16 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2020 1 час назад, MikR0ReR сказал: @Svob Можно и ObjectGetDouble() вообщем все из группы "Графические объекты". Кода для примера нет. Поверь в свои силы и увидишь, что от иКастома не намного отличается привязка, ну просто больше кода придется написать. Попробую.. Спасибо за мотивацию :D.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 18 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2020 В 16.03.2020 в 20:30, MikR0ReR сказал: @Svob Можно и ObjectGetDouble() вообщем все из группы "Графические объекты". Кода для примера нет. Поверь в свои силы и увидишь, что от иКастома не намного отличается привязка, ну просто больше кода придется написать. Вроде что-то получилось :).. Индикатор добавляю вручную. На тестере работает отлично. Спойлер #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ extern double Lots = 0.1; extern int Magic = 373737; extern int Slippage = 3; //+------------------------------------------------------------------+ double PriceHigh, PriceLow; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5) { Slippage *= 10; } return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { PriceHigh = ObjectGetDouble(0,"RenkoIndUpTarget",OBJPROP_PRICE,0); PriceLow = ObjectGetDouble(0,"RenkoIndDownTarget",OBJPROP_PRICE,0); if (Bid >= PriceHigh && CountSell() > 0) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS)) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL) if (!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black)) Print("Error on close sell order"); } } } if (Bid <= PriceLow && CountBuy() > 0) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS)) { if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) if (!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black)) Print("Error on close buy order"); } } } if (CountBuy() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, 0, 0, "RomRenko", Magic, 0, Blue); if (ticket > 0) { Print("Buy order opened succesfully"); } else Print("Error on open buy order"); } if (CountSell() == 0 && Bid <= PriceLow) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "RomRenko", Magic, 0, Red); if (ticket > 0) { Print("Sell order opened succesfully"); } else Print("Error on open sell order"); } } //+------------------------------------------------------------------+ int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } Но есть проблема: на демо-счёте работает не так, как надо. Открыл бай, не закрыл.. Не открыл селл соответственно.. (скрин прицепил). На других парах вообще ордера не открывает. Может быть причина в том, что индикатор удаляет линии сразу после сработки и советник не успевает их отработать? А можно, как вариант, привязаться не к линиям, а к последнему прямоугольнику, к его цвету? FX Blue - Renko Bars.ex4 Изменено 18 марта, 2020 пользователем Svob Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 18 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2020 @Svob Можно! Это все делается тоже через объекты. Прошлых сообщения я говорил не только о линиях и об прямоугольниках тоже. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти