Очень нужна ваша помощь в написании функции - страница 6

 
Dmitry Fedoseev:
Все равно сохранилось.

еще такой вопрос

если у меня открывается пара ордеров, то для одного будет один тикет, для другого на единицу больше ?

Это всегда так ? 

если так, то тогда можно запоминать тикет первого, который закрылся з профитом, и выбирать второй прибавляю к первому 1.

 
traderEvgen:

еще такой вопрос

если у меня открывается пара ордеров, то для одного будет один тикет, для другого на единицу больше ?

Это всегда так ? 

если так, то тогда можно запоминать тикет первого, который закрылся з профитом, и выбирать второй прибавляю к первому 1.

В тестере так. В реале нет.
 
traderEvgen:

еще такой вопрос

если у меня открывается пара ордеров, то для одного будет один тикет, для другого на единицу больше ?

Это всегда так ? 

если так, то тогда можно запоминать тикет первого, который закрылся з профитом, и выбирать второй прибавляю к первому 1.

Незнаю. Не полагался бы на такое.
 
Dmitry Fedoseev:
Незнаю. Не полагался бы на такое.

еще вопрос

как лучше открывать одновременно две позиции ?

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

void OrderSendX(int cmd, double price, double stoploss, double takeprofit1, double takeprofit2)
{
   int count = 0;
   ticket1 = -1;
   ticket2 = -1;
   while(true)
   {
      if(ticket1 == -1 )
         ticket1 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit1, "Order_1", magicCounter, 0, Red);

      if(ticket2 == -1 )
         ticket2 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit2, "Order_2", magicCounter, 0, Green);
      
      if(ticket1==-1 || ticket2==-1)
      {  
         count++;
         Sleep(2000);
         RefreshRates();
      }
      if ((ticket1!=-1 && ticket2!=-1) || count>5)
      {
         magicCounter++;
         return;
      }
   }

   return;
}
 
traderEvgen:

еще вопрос

как лучше открывать одновременно две позиции ?

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

В этом коде 5 попыток с перерывом в 2 сек. Небольшие обрывы связи не редкость, 10 сек. на все попытки это мало.

Хорошо было бы исследовать явление. Посмотреть, что возвращает GetLastError() после неудачных попыток, на основании этого думать, что делать.

Может быть добавить проверку isConnected() и если нет связи, то не делать попыток и не считать их так же не считать оффквоты и реквоты. Тогда вопрос - что считать за ошибки?

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

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

 

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

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

Dmitry Fedoseev:

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

имхо, в MQL явно не хватает событий пользователя и потоков. В смысле - многопоточности. Работаем как в Borland С++ 3.0, где-то чуть ниже, где-то чуть выше.
 
Предлагаю очень хорошее решения для минимизации конфликтов ордеров.
Формируем строку, где последовательно будет записаны имя файла советника, символ и период. Далее вычисляем хэш строки. Это и будет базовым магиком советника. Внутри сотника их можно присваивать последовательно начиная с базового в некотором диапазоне(для некоторых советников может понадобиться более сложное управление ордерами).
 
Добрый день! Как написать индикатор на MQL4 я примерно знаю. А вот если я записал значения в два массива и хочу построить график зависимости значений одного массива от значений другого массива .Может кто-нибудь хотя бы примерно подскажет как это сделать . Может в виде скрипта или это возможно только в виде индикатора ?    А может в MQL4 есть уже стандартная функция которая  это делает ? Заранее благодарен