oleguitar Опубликовано 6 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2015 Значит я не въехал... Я думал, что а и б это значения индикатора (может на разных барах). Если из них что-то является ценой и нуждается в проверке на каждом тике, то, естественно, эту проверку надо выносить из блока if (Н4). Ну да, я так и делал, а показания индикатора записал в глобальную статическую переменную Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 6 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2015 Я немного не понял!!!А суть-то вопроса в чём?Ну высчитали мы раз в 4-е часа индикаторы и что дальше?Нам надо их запоминать или нет?Если надо то:static double a = 0; double a1 = Ваш индикатор №1;static double b = 0; double a1 = Ваш индикатор №2;static datetime newbar = 0; datetime t = iTime(NULL,PERIOD_H4,0); if(newbar != t){ newbar = t; if(a != a1) a = a1; if(b != b1) b = b1; if(a > b) { Ваш ордер }}Если не надо запоминать значения индикаторов то: double a = 0; double b = 0;static datetime newbar = 0; datetime t = iTime(NULL,PERIOD_H4,0); if(newbar != t){ newbar = t; if(a > b) { Ваш ордер }}Примерно вот так! Изменено 6 января, 2015 пользователем Konstebl 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
VladVM Опубликовано 7 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2015 Задумка такая - открывается ордер при условии отсутствия открытых ордеров и закрытых ордеров по истории, закрывается по стоп лосу или тейк профиту. после этого в истории появляется запись о закрытом ордере и ордера больше не открываются.Вроде все сделал по мануалу, ордер открывается, после его закрытия открывается новый!Уважаемые гуру, помогите разобраться чайнику.Вот мое "изобретение"#property copyright ""#property link ""#property version ""#property strictextern double Lots = 0.1;extern int TakeProfit = 30;extern int StopLoss = 30;extern int Slippage = 2;extern int Magic = 12345;int ticket;double TP, SL;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ if (Digits == 3 || Digits == 5) { TakeProfit *= 10; StopLoss *= 10; Slippage *= 10; } return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ Comment(" колличество закрытых ордеров ",CountTradesHistory(),"\n" " колличество открытых ордеров ",CountTrades()); Sleep (4000); if (CountTradesHistory() == 0 && CountTrades() == 0) { ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Buy", Magic, 0, Blue); if (ticket > 0) { TP = NormalizeDouble (Ask + TakeProfit * Point, Digits); SL = NormalizeDouble (Bid - StopLoss * Point, Digits); OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } }//+------------------------------------------------------------------+//| Expert function |//+------------------------------------------------------------------+int CountTradesHistory(){ int counthistory = 0; for (int i = OrdersTotal() - 1; i >= 0; i --) { if (OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) counthistory++; } } return (counthistory);}//+------------------------------------------------------------------+int CountTrades(){ int count = 0; for (int i = OrdersTotal() - 1; i >= 0; i --) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) count++; } } return (count);}Буду благодарен за помощь!Влад Изменено 7 января, 2015 пользователем VladVM Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2015 Задумка такая - открывается ордер при условии отсутствия открытых ордеров и закрытых ордеров по истории, закрывается по стоп лосу или тейк профиту. после этого в истории появляется запись о закрытом ордере и ордера больше не открываются.Вроде все сделал по мануалу, ордер открывается, после его закрытия открывается новый!Уважаемые гуру, помогите разобраться чайнику.У берите из этой строки if (CountTradesHistory() == 0 && CountTrades() == 0)это: "CountTradesHistory() == 0 && "это лишнее. В реальном терминале ордера в истории всегда есть. Первый раз вижу такое... Ссылка на сообщение Поделиться на другие сайты More sharing options...
VladVM Опубликовано 7 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2015 Здравствуйте 0ll ! Спасибо за отклик!В том то и дело, мне надо чтоб при условии не верности "CountTradesHistory() == 0 && " ордера переставали открываться.я проверял в тестере МТ4 на истории. обнуляю журнал и запускаю, выставляется первый ордер ( if (CountTradesHistory() == 0 && CountTrades() == 0) условие выполняется, ордер открылся)после закрытия ордера не важно как, в Comment(CountTradesHistory=1,CountTrades=0) прописываются на терминале кратковременно, а ордер открывается снова, т.е. получается как будто условие "if (CountTradesHistory() == 0 && CountTrades() == 0" соблюдено. Не могу понять как так получается!? (по факту CountTradesHistory=1 и CountTrades=0, по условию открытия CountTradesHistory() == 0 && CountTrades() == 0, а ордер открывается)Если я по Вашему совету удаляю "CountTradesHistory() == 0 && " получается следующее, ордер открывается, после его закрытия открывается новый т.е. тоже что и было, а мне надо, чтоб при наличии ордера в истории именно этого ( скажем "советника") ордера перестали выставляться. Изменено 7 января, 2015 пользователем VladVM Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2015 Так Вам надо, чтоб советник перестал выставлять ордера? Но всё равно через контроль исторических ордеров - неправильно, т.к. если поставите в итоге бота на реальный счёт - работать не будет. Проще сделать флаг одноразовой операции:bool flOpenNew = true;void OnTick(){ ... if (flOpenNew && CountTrades() == 0) { ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Buy", Magic, 0, Blue); if (ticket > 0) { flOpenNew = false; .... далее Ваш код Ссылка на сообщение Поделиться на другие сайты More sharing options...
VladVM Опубликовано 7 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2015 Спасибо, наверно так и сделаю. Просто хотел далее использовать информацию по крайнему закрытому ордеру в основном алгоритме при, скажем обрыве связи.Я только начал изучать MQL, хотел набросать простенький советник, в кратце алгоритм таков: открытие первого ордера по индикатору, пусть это БАЙ с лотом 0,1, сработал ТП открывается опять БАЙ с начальным лотом, если первый БАЙ ордер закрылся по СЛ, то открывается СЕЛЛ с удвоенным лотом. СЕЛЛ закрылся по ТП, открывается СЕЛЛ с начальным лотом, а если СЕЛЛ закрылся по СЛ, открывается БАЙ и опять удваивается лот и т.д. Как то так, может что порекомендуете, как лучше реализовать данный алгоритм. Я хотел использовать данные из истории о крайнем закрытом ордере, но если Вы говорите это не будет работать, то пока не знаю чего делать, буду думать.А по предыдущему моему описанию проблемы, есть какое либо объяснение поведения написанного мной кода? Изменено 7 января, 2015 пользователем VladVM Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2015 1. По Вашему алгоритму: это самый простой вид мартингейла. Реализаций множество. На флёте сливает - несколько заходов в (-) и лот становится космическим.2. Данные из истории нужно использовать в ОнИнит - при запуске/перезапуске советника (в случае проблем с терминалом). В остальных случаях копить данные в переменных. Количество лосей последний тикет и может лот последнего ордера.3. По Вашему коду - не разбирался. по-идее должен был работать. Надо принты ставить и отслеживать ошибку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
VladVM Опубликовано 8 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 января, 2015 В коде уже стоят "коменты", просто запустить и посмотреть, хотелось бы понять проблему.Я понимаю, что это будет не граль, да и не пытаюсь его создать, это так для набития руки!По Лосям я думал, ввести счетчик и по мере накопления поступательно изменять положение ТП на увеличение, чтоб выйти из канала флета, или ввести остановку работы советника (по накоплению определенного количества ЛОСЕЙ) с последующей ручной оптимизацией и повторным запуском, может еще ввести трал СЛ с выводом в безубыток и далее в ПРОФИТ, ну это еще только задумки,а реализация впереди.Скорей всего по мере погружения еще будут вопросы, буду признателен, если в дальнейшем поможете мудрым советом в освоении MQL!С уважением,Влад Изменено 8 января, 2015 пользователем VladVM Ссылка на сообщение Поделиться на другие сайты More sharing options...
gaidamaka89 Опубликовано 9 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2015 Доброго времени суток! Нужна помощь в создании, как мне кажется, несложного индикатора. Суть вопроса:Возможно ли сделать индикатор, который бы мог подхватывать на графике нарисованную вручную фигуру: прямоугольник, и растягивать его вслед за графиком, даже желательно чтоб он был впереди графика на свечей 20, пока я его не удалю? а то надоедает каждый раз вручную это делать :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Problematico Опубликовано 9 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2015 Мои познания MQL языка равняется к нулю и столкнулся с такой проблемой как добавить алерт к индикатору, который в свою очередь очень сильно облегчил бы мне мониторинг графика. В общем, прошу вас уважаемые и знающие своё дело программисты добавить алерт к индикатору OsMA_Divergence_v1. Нужно чтобы при появлении дивергенции и серых точек выскакивал алерт-табличка. Думаю есть еще трейдеры которые торгуют на дивергенции цены и данный алерт помог бы многим из нас. Наверняка для вас, программисты, это не составит большого труда, но ваша помощь очень сильно облегчило бы мне мониторинг и торговлю в целом. .PNGOsMA_Divergence_v1.mq4 Изменено 12 января, 2015 пользователем Problematico Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mamotaro Опубликовано 9 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2015 Я думал что в плане графических построений, я самый ленивый трейдер этого форума.....как я ошибался.....браво коллега =d> :)) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2015 Пришлось поиграться. 1. В Вашем индюке 2 сигнала + отдельно по хаям и лоям.2. Сигнал появляется на 0-баре, но может исчезнуть (звенит несколько раз, а в итоге пусто) - поэтому съём сигнала сделал с 1-бара. поэтому у Вас будет ощущение, что алерт запаздываетПробуйте. OsMA_Divergence_v1.mq4 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Problematico Опубликовано 9 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2015 Пришлось поиграться. 1. В Вашем индюке 2 сигнала + отдельно по хаям и лоям.2. Сигнал появляется на 0-баре, но может исчезнуть (звенит несколько раз, а в итоге пусто) - поэтому съём сигнала сделал с 1-бара. поэтому у Вас будет ощущение, что алерт запаздываетПробуйте. Огромнейшее спасибо за ваш труд. По тестим... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Китаец™ Опубликовано 10 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 января, 2015 Помогите пожалуйста убрать алерт в индикаторе!Не могу выключить его! atrzq.mq4 Изменено 10 января, 2015 пользователем Китаец Ссылка на сообщение Поделиться на другие сайты More sharing options...
MagDag Опубликовано 10 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 января, 2015 Пробуй atrzq.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Китаец™ Опубликовано 11 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 января, 2015 Пробуй Спасибо большое!!Вроде молчит <:-p> Ссылка на сообщение Поделиться на другие сайты More sharing options...
Problematico Опубликовано 12 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2015 0ll, если вас не затруднит, не могли бы вы переделать трал советник e-movinginwl2? Нужно лишь добавить 5 уровней/шагов Б/У за ценой. На данном советнике имеется значения лишь LevelProfit (уровень после которого активируется Б/У) и LevelWLoss (уровень без убытка). Хочу чтобы таких уровней было 5. Искал подобные моему описанию тралы, но ничего толкового и работающего не нашел :( Закинул на 5 разных окон графиков, но получился по спартанский, хочется чтобы было удобно :d Скрин чего я хочу прилагается.Безымянный.PNG1.PNGe-movinginwl2.mq4e-movinginwl2.ex4 Изменено 12 января, 2015 пользователем Problematico Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 15 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2015 Уважаемые трейдеры!! возникла проблема, и никак не могу ее решить...гдето на сайте уважаемый XBMS выкладывал свой сов HA-EXPERT для таких как я...я его вроде бы от и до прочесал...и решил просто изменить условия входа в сделку...сделки вроде открываются в тестере, а вот закрываются только покупки, продажа закрывается по завершении тестирования...в чем может быть проблема...в журнале иногда пишет OrderModify Error 1 ATR-2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2015 kempo У Вас ордера закрываются по СЛ или ТР. в расчёте СЛ есть ошибки. проверьте. Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 15 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2015 kempo У Вас ордера закрываются по СЛ или ТР. в расчёте СЛ есть ошибки. проверьте. void OpenSellOrder(){ mlots = GetLots(); if (AutoSL) sl = CalcSL(OP_SELL); else sl = ND(Bid - StopLoss*Point); tp = ND(Bid - TakeProfit*Point); ticket = OrderSendReliable(Symbol(), OP_SELL, mlots, Bid, Slippage, 0, 0, comment, Magic, 0, Red); if(ticket > 0) OrderModifyReliable(OrderTicket(), OrderOpenPrice(), sl, tp, 0);все дело в Bid/Ask???Oll большое спасибо))))разобрался))) Изменено 15 января, 2015 пользователем kempo Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2015 kempo У Вас ордера закрываются по СЛ или ТР. в расчёте СЛ есть ошибки. проверьте. все дело в Bid/Ask???Я бы сказал больше в + / - Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 15 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2015 kempo У Вас ордера закрываются по СЛ или ТР. в расчёте СЛ есть ошибки. проверьте. все дело в Bid/Ask???Я бы сказал больше в + / - да я разобрался)))спасибо и удачи Вам)))Добавлено: 16-01-2015 05:02:57Возник еще один вопрос...а как можно сделать ограничение сделок в день...По идее нужно немного переделать функцию CountSell/CountBuy...я правильно понял??? Изменено 16 января, 2015 пользователем kempo Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2015 Возник еще один вопрос...а как можно сделать ограничение сделок в день...По идее нужно немного переделать функцию CountSell/CountBuy...я правильно понял???Нет. надо делать отдельный счётчик и сброс счётчика. ф-ции CountSell считают открытые ордера, а Вам надо считать закрытые, или я не правильно понял? Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 16 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2015 Возник еще один вопрос...а как можно сделать ограничение сделок в день...По идее нужно немного переделать функцию CountSell/CountBuy...я правильно понял???Нет. надо делать отдельный счётчик и сброс счётчика. ф-ции CountSell считают открытые ордера, а Вам надо считать закрытые, или я не правильно понял? я наверно неправильно задал вопрос...по идее в функции CountSell нужно поменять OrdersTotal на OrdersHistoryTotal и MODE_TRADES на MODE_HISTORY...ведь так???а вот как это связать с датой я не знаю...не могли бы вы подсказать как это делать...С ув. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти