Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 383

 
Vitalie Postolache:

Если без внешних всяких - то есть PositionClose

А ещё можно открыть позицию с тем же объёмом в обратную сторону, в итоге получится закрытие.

нету говорит такой функции ?
 
Tapochun:

Устанавливаем две локальные переменные в функции OnTick типа bool: buyExist = false и sellExist = false. 

По приходу нового тика проверяете наличие ордеров, принадлежавших данному советнику. Если есть ордер на продажу - sellExist = true, тоже самое с бай ордером. И далее проверяете, если buyExist = true - ордер на покупку не открывать. Тоже для sell. Все.

А зачем лишние переменные, если всё-равно проверяем наличие открытых позиций?

Проверили наличие Buy - нет открытых Buy - открыли один, проверили наличие Sell - нет открытых Sell -открыли один. Переменные-то зачем?

 
Artyom Trishkin:

А зачем лишние переменные, если всё-равно проверяем наличие открытых позиций?

Проверили наличие Buy - нет открытых Buy - открыли один, проверили наличие Sell - нет открытых Sell -открыли один. Переменные-то зачем?

Можно и так. Я просто это в голове представил как отдельную функцию проверки, где по ссылке переданы флаги. В данном случае, мой вариант, выполняет только одну функцию - проверка наличия ордеров, а не проверка+открытие. Легче будет расширить программу. Короче - одна функция - одно действие.
 
Artyom Trishkin:

А зачем лишние переменные, если всё-равно проверяем наличие открытых позиций?

Проверили наличие Buy - нет открытых Buy - открыли один, проверили наличие Sell - нет открытых Sell -открыли один. Переменные-то зачем?

Я та думал что будет что то на манер ОрдерТотал. а тут береборку делать надо? и функцию прописывать? распознания ордеров?
 
le0nid2014:
Я та думал что будет что то на манер ОрдерТотал. а тут береборку делать надо? и функцию прописывать? распознания ордеров?
А как без перебора? У Вас одновременно может быть куча ордеров, от кучи экспертов по куче символов... А Вы ведь хотите, чтобы Ваш эксперт обрабатывал только свои ордера?
 
Tapochun:
Можно и так. Я просто это в голове представил как отдельную функцию проверки, где по ссылке переданы флаги. В данном случае, мой вариант, выполняет только одну функцию - проверка наличия ордеров, а не проверка+открытие. Легче будет расширить программу. Короче - одна функция - одно действие.

Ну так, а проверка-то - и есть вызов функции, возвращающая флаг:

if(!Функция_проверки_наличия_позиции(symbol, OP_BUY,magic)) Функция_открытия_позиции(symbol, OP_BUY,Lots,stop_loss,take_profit,magic,comment);
if(!Функция_проверки_наличия_позиции(symbol, OP_SELL,magic)) Функция_открытия_позиции(symbol, OP_SELL,Lots,stop_loss,take_profit,magic,comment);

 
le0nid2014:
Я та думал что будет что то на манер ОрдерТотал. а тут береборку делать надо? и функцию прописывать? распознания ордеров?
Естественно ищите в наличии рыночный ордер по символу, типу и магику, и возвращайте результат поиска: true - есть, false - нету.
 
new-rena:
нету говорит такой функции ?
Нда, ошибочка вышла, когда говорил про "без инклюдов", эта функция как раз в инклюднике Trade.mqh.
 
Tapochun:
А как без перебора? У Вас одновременно может быть куча ордеров, от кучи экспертов по куче символов... А Вы ведь хотите, чтобы Ваш эксперт обрабатывал только свои ордера?

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

 

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

 


extern double Lots = 1.00;

extern int MagicNumb = 698541; //Magic


int start ()

{


if (OrdersTotal() == 0 && ********** )

  OrderSend("USDCHF",OP_BUY,Lots,Ask,0,0,0,"5891",MagicNumb,0,Red);


if (OrdersTotal() == 0 && ***********)

  OrderSend("USDCHF",OP_SELL,Lots,Bid,0,0,0,"58892",MagicNumb,0,Red);

  


  

 
le0nid2014:
он начальное дополнение к основному роботу .     задача советника держать всегда открытые 2 ордера в оба направления  ( основной робот их подхватывает , но сам основной робот не может начать .   и когда осн. закончит с одним их направлений ордера он его закроет ) и тут этот советник должен опять открыть ордер в том направление рынка кв котором нет ордера.
В двух советниках должны быть одинаковые магики. И запущены должны быть на разных графиках одного инструмента. А вообще конечно проще доработать основной, чем городить ещё один.