Спрашивайте! - страница 134

 
bakhul:
Не могли бы вы помочь мне добавить оповещение к этому фильтру, когда он пересекает 0 уровень или меняет цвет. Спасибо тем, кто хочет мне помочь...

Возможно, вам больше повезет, если вы напишете здесь: https://www.mql5.com/en/forum.

 

Сколько в настоящее время открыто ордеров на покупку и продажу у советника

Я только что просмотрел 134 страницы в надежде, что кто-то уже ответил на этот вопрос. Но мне не повезло...

После создания и настройки каждого типа пересечения, и разворотной точки, и диапазона ATR, и стратегии отбоя, которые я могу придумать с сотнями различных индикаторов, которые у меня есть. Я понял, что для полноценного автоматического советника нужны тонны переменных, для которых нужно писать код. Поэтому вместо этого я начинаю создавать советники с помощью пользователя. Что ж, перейдем к вопросам...

Какой код можно использовать для подсчета количества открытых ордеров на покупку и открытых ордеров на продажу, открытых советником в данный момент на рынке.

Я не хочу, чтобы он считал общее количество открытых ордеров, потому что я буду выставлять ордера на том же счете, чтобы компенсировать текущие ордера, которые выставил советник.

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

 

Небольшая помощь, пожалуйста...

Привет всем,

Я первоначально разместил эту тему как новую, но она была перемещена в другую тему по программированию (у меня нет возражений против ее перемещения BTW) и теперь, кажется, потерялась из-за количества плакатов в этой теме.

Возможно, кто-то здесь сможет мне помочь?

Я почти закончил свой первый советник после почти 7 дней проб и ошибок, вырезания и вставки и многочасового исследования.....

Может кто-нибудь подсказать мне, как сделать функцию выхода или стопа для советника?

Я хочу, чтобы советник удалял все текущие и отложенные сделки и выходил после достижения 10,000 в эквити. Ниже приведена часть кода на данный момент:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Как вы можете видеть, советник смотрит на эквити и затем устанавливает значение bool переменной StopTrade в true. Затем советник подтверждает команду и не обрабатывает ничего при значении StopTrade != true в течение одного цикла, но затем значение bool переменной StopTrade сбрасывается, и торговля продолжается.

Во-первых, есть ли способ заставить это делать то, что мне нужно, в том виде, в котором я это делаю?

Во-вторых, есть ли функция, которую я могу использовать, чтобы просто сказать советнику выйти из системы?

Любая помощь будет высоко оценена.

NB.

cutzpr - How Many Currently open Buy, and Sell Orders from EA

Я думаю, что часть моего кода может помочь вам в том, что вам нужно.

 

Я подумал, что цикл, который будет перебирать все открытые ордера, будет началом, но я не знаю, что сказать советнику, чтобы он просматривал только ордера, размещенные советником, и игнорировал ордера, которые я разместил вручную. Спасибо.

 

Магическое число

cutzpr - вам нужно использовать магическое число, а затем использовать что-то вроде следующего:

for (cnt=total;cnt>=0;cnt--)

{

OrderSelect(0,SELECT_BY_POS,MODES_TRADES);

if (OrderMagicNumber()==yourmagicnumber)

{if(OrderType()==OP_BUY)

 

Взглянув на этот код, я придумал вот этот кусок кода. Я не уверен, правильно ли он закодирован. Я установил

int MaxLong=5, MaxShort=5;

extern double Magic=10000;

extern int MaxOpenOrders=10;

итак...

if (b<=MaxLong)

{ торговля

}

if (s<=MaxShort)

{ торговля

}

Но советник все равно посылает максимальную покупку и максимальную продажу. Вместо того, чтобы посчитать, сколько ордеров есть в каждом из них, и ограничиться MaxLong и Short. Я знаю, что в коде должно быть что-то не так, но я не могу этого увидеть.

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{if(OrderType()==OP_BUY)

{

b++; // add order to Long Quantity

if(TP != 0)

{

if(b!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

b--; // Long Order closed. Remove one order from total Longs

return(0);

}

}

}

}

if (OrderMagicNumber()==Magic)

{if(OrderType()==OP_SELL)

s++; // Add one to Short order Quantity

if (TP != 0)

{

if(s!= 0)

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

s--; // Short Order Closed. Remove one order from total shorts

return(0);

}

}

}

}

}
 
cutzpr:
Взглянув на этот код, я придумал вот такую часть кода. Я не уверен, правильно ли он закодирован. Я установил

int MaxLong=5, MaxShort=5;

extern double Magic=10000;

extern int MaxOpenOrders=10;

так...

if (b<=MaxLong)

{ торговля

}

if (s<=MaxShort)

{ торговля

}

Но советник все равно посылает максимальную покупку и максимальную продажу. Вместо того, чтобы посчитать, сколько ордеров есть в каждом из них, и ограничиться MaxLong и Short. Я знаю, что в коде должно быть что-то не так, но я не могу этого увидеть.

Я думаю, что вы слишком усложняете ситуацию. Попробуйте использовать несколько коротких частей кода вместо одной большой функции. Это должно дать вам некоторую подсказку:

int totalOrders(int type)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == type) totalNumber++;

}

return(totalNumber);

}

[/CODE]

AND HERE IS EXAMPLE HOW YOU CAN USE IT

[CODE]

int totalBuy = totalOrders(OP_BUY);

int totalSell = totalOrders(OP_SELL);

if( (totalBuy + totalSell) < MaxOpenOrders)/*TOTAL NUMBER OF ORDERS WASN'T REACHED*/

{

if(totalBuy <= MaxLongOrders)

{

//OPENING LONG IS PERMITED

}

if(totalSell <= MaxShortOrders)

{

//OPENING SHORT IS PERMITED

}

}

 

[ASK] Индикатор "SilverTrend_Signal"

Я новичок в форексе и программировании на mql4. У меня есть индикатор SilverTrend_Signal (прикрепляю здесь) и

Я хочу сделать советника на основе этого индикатора, но у меня есть проблема с этим индикатором, сигнал может меняться

на одном и том же баре, например, стрелка сигнала восходящего тренда появляется на графике, затем может исчезнуть и, возможно.

может смениться на стрелку нисходящего тренда в том же баре. Может ли кто-нибудь помочь мне решить эту проблему?

Я использую этот индикатор на временном периоде M1 и EU.

Большое спасибо.

(Извините, мой английский недостаточно хорош).

Файлы:
 

Мое личное мнение заключается в том, что вам следует держаться подальше от использования индикаторов, которые перерисовывают сигналы. Особенно на графике M1. Сигналы будут меняться слишком часто. Вы просто напрашиваетесь на нестабильные сигналы и проблемы. Прошлая история выглядит хорошо, потому что это прошлое.

 
willya:
Я новичок в форексе и программировании на mql4. У меня есть индикатор SilverTrend_Signal (прикрепляю здесь) и

я хочу сделать советника на основе этого индикатора, но у меня есть проблема с этим индикатором, сигнал может меняться

на одном и том же баре, например, стрелка сигнала восходящего тренда появляется на графике, затем может исчезнуть и может

может смениться на стрелку нисходящего тренда в том же баре. Может ли кто-нибудь помочь мне решить эту проблему?

Я использую этот индикатор на временном периоде M1 и EU.

Большое спасибо.

(извините, мой английский не достаточно хорош)

Не уверен насчет того, как он перерисовывается, но если он перерисовывается ТОЛЬКО на текущем баре, то использование сигнала на закрытии бара (подтвержденного) будет в порядке.

Если он перерисовывает больше, чем на текущем баре, то можно забыть об использовании его сигнала для советника.

FerruFx