КонстантинYO Опубликовано 12 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2018 не могу понять как мне добиться что бы при пересечении цены его линии автоматом происходила покупка или продажа..У индикатора есть буфер в виде массива. на 0-баре значение индикатора записывается в буфер[0], на 1-баре в буфер[1] и т.д. Это понятно?, тогда пересечение линии индикатора снизу вверх определяется так:if ( Open[0] = bufer[0] )т.к. 0-свеча не закрыта сигналить может часто, поэтому чаще всего определяют на 1-баре. Для пересечения сверху вниз зеркально. Спасибо за ответ, но я все равно не пойму как это реализовать, не догоняю я до конца. ~x( Посмотрел советники под индикаторы МА и ничего разобрать не могу , по идее смысл тот же...1 линия, надо что бы когда была цена под ней продавал, на покупку в точности до на оборот , у меня же открывает одну сделку и держит ее до конца года (с 02.01.2016 до 29.12.2017).... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2018 КонстантинYO ну не всё сразу, потихоньку одолеешь.Вам надо научиться пользоваться оператором принт и смотреть торги в журнале. Что нужно сделать:1. Подключить индюк и получить данные с 1-бара ind = iCustom(..., 0, 1);2. if ( Open[1] = ind ) // это условие для BUY { Print("-- Условие Бай: ind=",ind); OrderSend(...); }3. if ( Open[1] > ind && Close[1] { Print("-- Условие Селл: ind=",ind); OrderSend(...); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
КонстантинYO Опубликовано 12 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2018 КонстантинYO ну не всё сразу, потихоньку одолеешь.Вам надо научиться пользоваться оператором принт и смотреть торги в журнале. Что нужно сделать:1. Подключить индюк и получить данные с 1-бара ind = iCustom(..., 0, 1);2. if ( Open[1] = ind ) // это условие для BUY { Print("-- Условие Бай: ind=",ind); OrderSend(...); }3. if ( Open[1] > ind && Close[1] { Print("-- Условие Селл: ind=",ind); OrderSend(...); } По скольку я только начал изучать делал по уроку вот так if (CountBuy () == 0 && Bid > PriceByu) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, 0, 0, "Tren robot", Magic, 0, Blue); if(ticket > 0) { TP = NormalizeDouble(Ask+TakeProfit*Point, Digits); SL = NormalizeDouble(Ask-StopLoss*Point, Digits);С буфером немного разобрался открывает закрывает сливает депо по тестеру , когда смотришь визуально то открывает сделки совсем не по индикатору ,так вот вопрос мне в место того что я переписал так сказать , нужно вставить 3.пункт который Вы написали, но я не пойму как это сделать без ошибок ? Изменено 12 марта, 2018 пользователем КонстантинYO Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 14 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2018 Всем привет.Подскажите как правильно реализовать ограничение всех(открытых /закрытых) ордеров в день?Я так понимаю надо проверить по дате открытия в списке открытых/закрытых ордеров, но как?Моих знаний не хватает.Помогите с функцией перебора по ордерам истории ( и открытых уже ордеров ) с запросом времени и сравнения, заранее спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2018 объявляете следующую функцию, а в основном коде пишете:int cntO = 0cntO = ord_count ( MODE_TRADES, Magic || -1, Type || -1, D'2018.03.14' );cntO += ord_count ( MODE_HISTORY, Magic || -1, Type || -1, D'2018.03.14' );далее по своему плану...ПС: Magic || -1 - означает: либо магик, либо -1, но не всё сразу Спойлер int ord_count ( int mode, int magic, int type, datetime start ){ int res = 0; for ( int no = ( mode == MODE_TRADES ? OrdersTotal() : OrdersHistoryTotal() ) - 1; no >= 0; no-- ) { if ( !OrderSelect ( no, SELECT_BY_POS, mode) || OrderSymbol() != _Symbol || !( sel.magik || !( OrderType() == type || type || OrderOpenTime() if ( ( mode == MODE_TRADES ? OrderOpenTime() : OrderCloseTime()) res++; } return( res );} Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 MODE_HISTORY спасибо, а можете поподробнее объяснить про дату в конце, а то я так понимаю что привязка будет к ней или нет?или это начальная дата Изменено 15 марта, 2018 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 Вы функцию под спойлером посмотрели? это дата старта, даты конца нет. В качестве даты старта можно использовать любую переменную datetime Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 Вы функцию под спойлером посмотрели? это дата старта, даты конца нет. В качестве даты старта можно использовать любую переменную datetime Спасибо) я это и уточнял)просто никогда не сталкивался с таким уровнем, буду очень благодарен , если вы объясните как теперь правильно, задать макс количество ордеров И оч Вас прошу обьясните функцию?Я не оч понимаю как что и за чем там работает...зарание извиняюсь Изменено 15 марта, 2018 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 как теперь правильно, задать макс количество ордеровЯ просто не догадываюсь что Вы хотите получить... ну например так:extern int MaxOrdcount = 200;далее в тексте, где вычисляется количество ордеров:if ( cntO >= MaxOrdcount ) { Print("Stop trade - order count over limits."); return; }Это условие должно быть до модуля открытия новых ордеров, но после модуля закрытия и сопровождения ранее открытых. Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 Ага)ну я правильно все написал тогда. Спасибо, проверил себяЗадача, чтобы в день сова открывала например только 2 ордера(это и закрытые и открытые), новый день опять 2 ордера и тдИ это кол во могло меняться в глоб переменной! Добавлено: 15-03-2018 08:27:38Если есть более простое решение чем перебор открыт/закрыт ордеров, я Вам точно бутылку должен буду Изменено 15 марта, 2018 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sam123456789 Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 Добрый день!Начал я осваивать это нелегкое дело. но очень интересное!Спасибо Автору за то что есть такие уроки!Очень много дают, а главное дают возможность напрягать мозги что мне очень интересно!но вот, я решая задачку #4 от урока 4, столкнулся с проблемой.советник не удваивает позиции. упорно.Что только не делал, прочитал первые 100 страниц данной темы, перерыл интернет, анализировал каждую буковку функций FindLastLots, описанной в уроке, и функции повторного открытия позиции по условиям при движении цены против.Переписывал с нуля раза три, пробовал перебор с последнего лота и с первого, пробовал что только не провал.... все по идее правильно. но не работает. укажите пожалуйста на ошибку?файл прикладываю.Я не очень хочу пользоваться мартином, и не стану скорее всего, но меня убивает что не могу найти решение проблемы. Просто из за того что замылился глаз а скорее из за за недостатка знаний и опыта.помогите люди добрый. test4_MARTIN.mq4 Изменено 15 марта, 2018 пользователем Sam123456789 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 Если есть более простое решение чем перебор открыт/закрыт ордеровКонечно есть. Нужны дополнительно две глобальные переменные:int dayNom=-1, dayCount=0;в тексте программы:- в самом начале: if ( Day() != dayNom ) { dayCount = 0; dayNom = Day(); } - там где сделки открываются: if ( dayCount = 0 ) dayCount++;Добавлено: 15-03-2018 09:48:12не могу найти решение проблемыПопробуйте после поиска последнего ордера вставить принт:lastlot = FindLastLots(....);Print("Потом прогоните в тестере 1-2 дня и смотрите в журнале свои принты.Если с лотом всё в порядке, ставьте принт дальше по тексту, если принтов нет - то выше по тексту. Только так найдёте ошибку. Без умения искать ошибку Принт-ами не получиться освоить mql... Изменено 15 марта, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 и тут я чувствую запутался)пожалуйста можете поподробней обьяснить последнюю запись ^:)^ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2018 Последняя запись: если количество ордеров позволяет -> открываем ещё, если открыли -> прибавляем счётчик. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sam123456789 Опубликовано 16 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2018 найдёте ошибку. Без умения искать ошибку Принт-ами не получиться освоить mql... Спасибо! а есть и более расширенный пост или материал об алгоритмах поиска ошибок?? теми же принтами, может есть еще варианты. сложно новичку понять и сделать так чтоб мозг работал в нужном направлении, картинка складывается пока очень тяжело, это для меня 4-ый урок программирования в жизни=) и что бы не смущать людей глупыми вопросами, хотел бы решать их сам, но как решать это тоже сложность-)))п.с. на просторах сети материал есть.если есть и тут отправьте пожалуйста, будет полезно. спасибо. Изменено 16 марта, 2018 пользователем Sam123456789 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 16 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2018 Нда)кто то в дебри лезет)а кто то 2 мя строчками решает проблему)Огромное спасибо, бутылка точно с меня) \M/ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2018 Sam123456789 материалов у меня нет и в сети не искал... Как сам делаю, так и Вам советую. Пробуй принты обязательно - глаза раскрываются, чем больше принтов - тем лучше.Если не получится - пиши, я исправлю ошибку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
atnet Опубликовано 17 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 марта, 2018 Подскажите кто знает плиз. Как известно на ECN счетах сначала открываем ордер, а затем модифицируем. А можно ли в BUY LIMIT ордере сразу указать стоплосс на ECN ?Столкнулся с ситуацией в тестере, когда при сильном движении в 290 ст.пунктов срабатывает buy limit и сов не успевает выставить SL. Далее счет сливается. Как избежать этого ? Спойлер Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 17 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 марта, 2018 можно ли в BUY LIMIT ордере сразу указать стоплосс на ECN ?Не вижу ограничений для отложек вообще. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 21 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 марта, 2018 Свежий урокhttp://tradelikeapro.ru/mql4-pishem-indikator-novostey/ 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Serhoo Опубликовано 25 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 марта, 2018 Здравствуйте! Идея бота проста: если цена выше машки покупаем, если ниже продаем. Стоп и профит фиксированы. Хочу понять какое уточнение можно внести в код бота, чтобы покупал не хрен знает где (например после того как возьмет профит, ордеров нет, сигнал на покупку, так как цена выше машки), а именно около машки не далее чем на фиксированное количество пунктов? Заранее благодарен!И еще подскажите пожалуйста существует тема на форуме или ресурс, где можно было бы подробно узнать о тестере стратегий, и тех данных, которые он выдает по окончании тестирования. Нашел много околотемных постов, но именно по спецификации выдаваемых параметров нигде не нашел. Заранее спасибо! Изменено 25 марта, 2018 пользователем Serhoo Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 марта, 2018 Serhoo всё дело в том, что цена дёргается вверх/вниз и пересекает многократно линию МА, поэтому вводят отступ от линии для избежания ложных срабатываний. Иногда ждут закрытия бара, а бар может быть довольно крупным... Вот пример решения с дистанциями отступа от МА: min_indent if ( Close[0] = MA + min_indent && Bid пересекли вверх -> OP_BUYif ( Close[0] > MA && Bid MA - max_indent ) -> пересекли вниз -> OP_SELL Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 26 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2018 счетчик для ТП, СЛ и троля. моя проблема со всех уроков. ситуация, есть скажем такой шаблон - стандарт : ... double maprice = iMA( Symbol(), 0, MaPeriod, MaShift, MODE_SMMA, PRICE_CLOSE, 1); //--------- условие на открытие if (CountBay() == 0 && Ask { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask , Slippadge,0,0,"РОБОТ", Magic, Blue); if (ticket > 0) { SL = NormalizeDouble(Ask - StopLotss *Point, Digits); TP = NormalizeDouble(Ask + TakeProfit *Point, Digits); if(OrderSelect(ticket, SELECT_BY_TICKET)) if(OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)== true) Print ("ошибка модиф бая"); } else Print( "ошибка открытия ордера на покупку" + " error ",GetLastError()); } //------------- на закрытия if (Cena_Sell >= Bid && CountBay() > 0 ) { for(int i = OrdersTotal() -1; i>=0; i-- ) { if ( OrderSelect( i,SELECT_BY_POS, MODE_TRADES)) { if ( OrderMagicNumber() == Magic && OrderType()== OP_BUY ) if (! OrderClose( OrderTicket(), OrderLots(), Bid , Slippadge, Black )) Print("ошибка закрытия ордера на покупку"); } } итд... //----------------------------------------------- все хорошо он ставит СЛ, ТП, троля. и закрывая позицию тут же открывает снова. до условия закрытия. итд крутил - вертел пришел к выводу создать такой вот счетчик с его условием открытия: if (Ask > maprice && CountBay() + CountSell() == 0 && CountCloseBUY()== 0) ... //--------- int CountCloseBUY() { int count=0; for ( int i= OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == OP_BUY) count++; } return (count); } не работает. интуитивно понимаю что проблема в счетчике. нашел другие варианты в виде отдельной пользовательской ф-ци. работает. но она мне сложна пока для понимание и в освоение применения с болие сложным условием входа. хотелось что то более независимое и универсальное было, типо ...&& CountCloseBUY()== 0). помогите пожалуйста. и не судите строго) Изменено 26 марта, 2018 пользователем Ar4i Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kasatik Опубликовано 27 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2018 Добрый день господа программисты! Подскажите возможно ли написать функцию трала для сетки разнонаправленных ордеров. Ковыряю не первый день все никак. double sl, tp_, be=PriceBE(-1); int err=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==smb && OrderMagicNumber()==magic && OrderType() { if(Bid>GetLastPriceOpen(OP_BUY) && GetLastPriceOpen(OP_BUY) { if(Bid-be>trstart*pnt) { if(OrderType()==OP_BUY && OrderStopLoss() { sl = NDD(Bid-trstep*pnt); if(OrderStopLoss() { ModifyOrders(OP_BUY, -1, sl, 0); } } if(OrderType()==OP_SELL && OrderTakeProfit() { tp_ = NDD(Bid-trstep*pnt); if(OrderTakeProfit() { ModifyOrders(OP_SELL, -1, 0, tp_); } } } } } } }} Это один из вариантов... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 марта, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2018 все хорошо он ставит СЛ, ТП, троля. и закрывая позицию тут же открывает снова. до условия закрытия. итд крутил - вертел пришел к выводу создать такой вот счетчик с его условием открытия: Что такое троля, я не понял..., но Вам не нужен счётчик, ибо всегда в истории сделок будут и бай и селл.Вам нужно условие пересечения МА, а не просто нахождение цены за МА.Пробуйте вместо части условия: maprice >= Bid , писать ( Open[0] > maprice && Close[0] Подскажите возможно ли написать функцию трала для сетки разнонаправленных ордеров. Возможно, если сумма объёмов разных сеток - разная и цена движется в сторону большего объёма. Чем больше разность объёмов, тем ближе ТП. Для одной сетки нужно двигать СЛ, для другой ТП. Задача не столько сложная, сколько геморройная... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти