Jump to content

Нужна помощь в исправлении кода (Советник по стратегии Лари В.)


Komarouski

Recommended Posts

Komarouski

советник собран по информации из видео с ютуба.

тут есть сигналы: пробивной день, внутренний день, сигнал к развороту.

но все они закрываются по стопам и открываются по условию:

если нет моих ордеров и подходит по условиям баров то открывается позиция по текущей цене.

 

Открытие ладно. Оно вроде как делает правильно.. и то вот сигнал пробивной день открывается по конкретной цене хая или лов предыдщего бара.

 

Мне нужна помощь в закрытии ордеров.

в стратегии пишут, что нужно выдерживать один бар по прибыли. То есть:

появляется такая ситуация что предыдущий бар(1) закрылся так что его хай меньше хая бара(2) и лоу(1) больше лоу(2) и если цена закрытия (1) выше цены закрытия(1) то открывается бай.(сигнал внутренний день)

 

по тактике закрывать надо когда бар закроется. но я не нашел такой функции в учебнике mql4.

 

тоесть к моему коду внизу надо добавить функцию.

которая будет закрывать ордера. тоесть открылся ордер на нулевом баре и закрылся на открытие следующего.

 

Может это как-то перебором можно или еще как этого не знаю. помогите.

прикрепляю код того что сделал.now.mq4

 

если кто сможет добавить такую функцию то выделите кусок //----- и подпишите строчки что делают. может кому и понравится уже такой какой есть.

Link to post
Share on other sites
Circle
советник собран по информации из видео с ютуба.

тут есть сигналы: пробивной день, внутренний день, сигнал к развороту.

но все они закрываются по стопам и открываются по условию:

если нет моих ордеров и подходит по условиям баров то открывается позиция по текущей цене.

 

Открытие ладно. Оно вроде как делает правильно.. и то вот сигнал пробивной день открывается по конкретной цене хая или лов предыдщего бара.

 

Мне нужна помощь в закрытии ордеров.

в стратегии пишут, что нужно выдерживать один бар по прибыли. То есть:

появляется такая ситуация что предыдущий бар(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

Условие для первого тика нового бара

Volume[0]==1


Мы сами знаем, что проблема не имеет решения. Мы хотим знать, как ее решать. (с) К. Хунта

Link to post
Share on other sites
Komarouski
Условие для первого тика нового бара

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

Все верно

В начале

#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 by Wowa
  • Downvote 1

Мы сами знаем, что проблема не имеет решения. Мы хотим знать, как ее решать. (с) К. Хунта

Link to post
Share on other sites
  • Capman locked this topic
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...