Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 236

 
s4sha45:

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

<

void OnTick()

  {

  if (OP_SELL==0 && OP_BUY==0)

   int ticket=OrderSend(Symbol(),OP_BUY,Lot1,Ask,Slippage,StopLoss,TakeProfit,"My order",MagicNumber,0,clrGreen);

>

Вы написали (дословно по-русски):

Если 1 равно 0 и 0 равно 0, то открыть позицию.

 
Artyom Trishkin:

Вы написали (дословно по-русски):

Если 1 равно 0 и 0 равно 0, то открыть позицию.

В видео автор писал эту строчку так  if (b==0 && s==0) и у него все работало. и до этого он никаких переменных b и s не вводил. может быть версия старая. если же это не правильно, то как должна выглядеть строчка, которая определяет, что у меня сейчас нет ордеров?
 
bool FindOrder(int eType, int eMagic, string eSymbol)
   {
   for(int i=OrdersTotal()-1; i>=0; i--)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderCloseTime()>0) continue;
      if(OrderSymbol()!=eSymbol) continue;
      if(OrderMagicNumber()!=eMagic) continue;
      if(OrderType()!=eType) continue;
      return(true);
      }
   return(false);
   }
bool b=FindOrder(OP_BUY,Magic,Symbol());
if(b)
   {
   
   }
 
s4sha45:

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

<

void OnTick()

  {

  if (OrdersTotal()==0)   int ticket=OrderSend(Symbol(),OP_BUY,Lot1,Ask,Slippage,StopLoss,TakeProfit,"My order",MagicNumber,0,clrGreen);

  }

Если вам нужно открыть ордер когда нет ни бай, на селл, ни стоповых, ни лимитных ордеров.

OrdersTotal()
Закрытые ордера не учитывает.
 
Александр:

Если вам нужно открыть ордер когда нет ни бай, на селл, ни стоповых, ни лимитных ордеров.

Закрытые ордера не учитывает.
Благодарю!
 

Добрый вечер! Возник такой вопрос: необходимо сравнивать рыночные цены на каждом тике с ценами из определенного csv файла(7 столбцов) , причем ордеры сгруппированы в серии и количество ордеров в каждой серии может быть произвольным. Хочу понять, что будет быстрее : потратить время при инициализации на создание массива со всеми данными по каждому ордеру , а потом на тике итеририроваться по массиву , или каждый раз открывать файл и запихивать все в курсор. Интересно примерное время обращения к файлу и к массиву, много ли времени выиграю. Спасибо!

 
Karomos:

Добрый вечер! Возник такой вопрос: необходимо сравнивать рыночные цены на каждом тике с ценами из определенного csv файла(7 столбцов) , причем ордеры сгруппированы в серии и количество ордеров в каждой серии может быть произвольным. Хочу понять, что будет быстрее : потратить время при инициализации на создание массива со всеми данными по каждому ордеру , а потом на тике итеририроваться по массиву , или каждый раз открывать файл и запихивать все в курсор. Интересно примерное время обращения к файлу и к массиву, много ли времени выиграю. Спасибо!

Что написали, не очень понятно, но обращение к памяти однозначно быстрее чтения из файла.

 

Здравствуйте. Подскажите, можно ли вызвать окно параметров советника ПРОГРАММНО ? 

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

В параметрах советника у меня присутствуют уровни BUY_STOP и SELL_STOP. На самом деле, советник в большинстве случаев может вычислить эти уровни сам, мне нужно просто проконтролировать их правильность.

Поэтому я хочу чтобы советник при запуске вычислил эти уровни, подставил их в параметры и вывел окно параметров на экран. Если уровни правильные, я нажимаю ОК и далее советник работает в штатном режиме. Если советник ошибся с определение уровней, я исправляю их на правильные значения. Если нельзя вывести окно параметров программно, то подскажите можно ли как-то инициализировать параметры (у меня написана функция для их вычисления) ДО вывода окна параметров советника.

 

Уважаемые знатоки!

Подскажите плиз, как найти ордер.

Ситуация такая:

- советник открывает одновременно 2 ордера. SL одинаковые, TP не устанавливается.

- Дальше при некоторых условиях советник закрывает первый ордер, а у второго надо подкорректировать SL.

Вопрос - как второй ордер найти?

Проблема в том, что таких пар может быть открыто несколько. Но время открытия у разных пар точно разное.


Вариантов, как я понял, может быть много. Как это сделать проще и правильнее?

В комментариях писать тикет не хотелось бы, т.к. брокер его может затереть.

В принципе, у второго ордера можно поставить другой магик. Но это задачу всё равно не решает.

Можно искать по времени или цене открытия. Но где гарантия, что второй ордер откроется по той же цене?

Что посоветуете?

 

Индикатор из МТ5 рисует линию двумя цветами. 

Значения линии находятся в одном буфере. 

Можно ли как-то определить цвет линии при запросе значений из индикатора?

Причина обращения: