Komarouski 0 Share Posted December 2, 2013 советник собран по информации из видео с ютуба. тут есть сигналы: пробивной день, внутренний день, сигнал к развороту. но все они закрываются по стопам и открываются по условию: если нет моих ордеров и подходит по условиям баров то открывается позиция по текущей цене. Открытие ладно. Оно вроде как делает правильно.. и то вот сигнал пробивной день открывается по конкретной цене хая или лов предыдщего бара. Мне нужна помощь в закрытии ордеров. в стратегии пишут, что нужно выдерживать один бар по прибыли. То есть: появляется такая ситуация что предыдущий бар(1) закрылся так что его хай меньше хая бара(2) и лоу(1) больше лоу(2) и если цена закрытия (1) выше цены закрытия(1) то открывается бай.(сигнал внутренний день) по тактике закрывать надо когда бар закроется. но я не нашел такой функции в учебнике mql4. тоесть к моему коду внизу надо добавить функцию. которая будет закрывать ордера. тоесть открылся ордер на нулевом баре и закрылся на открытие следующего. Может это как-то перебором можно или еще как этого не знаю. помогите. прикрепляю код того что сделал.now.mq4 если кто сможет добавить такую функцию то выделите кусок //----- и подпишите строчки что делают. может кому и понравится уже такой какой есть. Link to post Share on other sites
Circle 147 Share Posted December 3, 2013 советник собран по информации из видео с ютуба. тут есть сигналы: пробивной день, внутренний день, сигнал к развороту. но все они закрываются по стопам и открываются по условию: если нет моих ордеров и подходит по условиям баров то открывается позиция по текущей цене. Открытие ладно. Оно вроде как делает правильно.. и то вот сигнал пробивной день открывается по конкретной цене хая или лов предыдщего бара. Мне нужна помощь в закрытии ордеров. в стратегии пишут, что нужно выдерживать один бар по прибыли. То есть: появляется такая ситуация что предыдущий бар(1) закрылся так что его хай меньше хая бара(2) и лоу(1) больше лоу(2) и если цена закрытия (1) выше цены закрытия(1) то открывается бай.(сигнал внутренний день) по тактике закрывать надо когда бар закроется. но я не нашел такой функции в учебнике mql4. тоесть к моему коду внизу надо добавить функцию. которая будет закрывать ордера. тоесть открылся ордер на нулевом баре и закрылся на открытие следующего. Может это как-то перебором можно или еще как этого не знаю. помогите. прикрепляю код того что сделал.[ATTACH]247340[/ATTACH] если кто сможет добавить такую функцию то выделите кусок //----- и подпишите строчки что делают. может кому и понравится уже такой какой есть. Вам надо просто запомнить в переменной номер бара (nBar=Bars) и далее по ходу пьесы каждый тик проверять соответствует ли запомненный номер бара текущему (if (nBar==Bars) ). Если они равны то значит бар "старый" т.е. еще не закрылся если не равны значит бар закрылся и началось формирование нового бара и с этим закрытым баром можно проделывать нужные вам вычисления его номер в массиве будет равен 1 (Close[1]). И не забудьте запомнить новый номер бара (nBar=Bars). Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
Wowa 8 Share Posted December 3, 2013 Условие для первого тика нового бара Volume[0]==1 Мы сами знаем, что проблема не имеет решения. Мы хотим знать, как ее решать. (с) К. Хунта Link to post Share on other sites
Komarouski 0 Author Share Posted December 3, 2013 Условие для первого тика нового бара Volume[0]==1 я сам написать это не могу.. запишите код как он выглядит для закрытия сделки.. может он перебором будет искать свои ордера и если находит свои по символу и по меджику. то закрывает.. for(int s=0;s<=OrdersTotal();s++) { OrderSelect(s, SELECT_BY_POS, MODE_TRADES); { if( тут должно быть условие.. ) { OrderClose(OrderTicket( ) ,OrderLots(),Ask,3,Blue); } } } если надо добавить переменные то тоже напишите их.. сделки открываются так: сначала переберает ордера в терминале.. если не находит свои то дальше следующиее: orders( это у меня значение количество найденых своих ордеров) //---- Пробивной день бай if(orders==0 && c1>o1&& c2>o2&& c1>c2) { OrderSend(Symbol(),OP_BUY,lot,h1,3,l2,Bid+TP*Point,"Пробивной день бай",Magic,0,Blue); } в целом мне надо кусок кода который будет переберать ордера свои и закрывать их если свеча на которой открылся ордер закрылась Link to post Share on other sites
Wowa 8 Share Posted December 4, 2013 (edited) Все верно В начале #define MAGIC 20131204 // Меджик номер Ваш цикл for(int s=0;s<OrdersTotal();s++) { OrderSelect(s, SELECT_BY_POS, MODE_TRADES); { if( Volume[0]==1 && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { OrderClose(OrderTicket( ) ,OrderLots(),Ask,3,Blue); } } И все. Тонкий момент: проверка открытых ордеров должна идти в тексте функции start() до открытия новых, иначе, если новую позу откроет на первом тике, то тут же и закроет З.Ы. Обратите внимание на цикл: for(int s=0;s<OrdersTotal();s++), а не for(int s=0;s<=OrdersTotal();s++) , как у Вас З.З.Ы. У этого способа есть один недостаток: если вдруг ордер не закроется на первом тике (на реале возможно), то не закроется совсем. Но для тестера и так достаточно. Для реала лучше отслеживать новый бар, но не по Bars, как пишет Сircle (Число баров истории ограничено и при достижении максимума перестанет изменяться), а по Time[0] : при открытии позы сохраняем в переменной (пусть datetime T, T=Time[0]), а при проверке на закрытие сравниваем if( T!=Time[0] && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { OrderClose(OrderTicket( ) ,OrderLots(),Ask,3,Blue); Edited December 4, 2013 by Wowa 1 Мы сами знаем, что проблема не имеет решения. Мы хотим знать, как ее решать. (с) К. Хунта Link to post Share on other sites
Recommended Posts