Выставление ордеров

 

Вот код.

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

Ни фига не получается. Третий ордер не ставится. Такое впечатление, что советник не доходит до этого

момента и начинает сначала. Если кто знает подскажите пожалуйста!

//---- input parameters
extern int       Profit=50;
extern double    Lot=0.1;
int              magic=123456;
int              total;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  total=OrdersTotal();
//----
  {
   if (total==0)
    {
     OrderSend(Symbol(),OP_SELLSTOP,Lot,Ask-(Profit*2)*Point,0,Ask,Ask-(Profit*3)*Point,"",magic,0,CLR_NONE);
    }
   if (total<2)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_BUYSTOP)
      {
       OrderSend(Symbol(),OP_SELLSTOP,Lot,Ask-(Profit*2)*Point,0,Ask,Ask-(Profit*3)*Point,"",magic,0,CLR_NONE);
      }
     }
    }
   if (total<2)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_SELLSTOP)
      {
       OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Profit*Point,0,Ask-Profit*Point,Ask+(Profit*2)*Point,"",magic,0,CLR_NONE);
      }
     }
    } 
   if (total<3)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_BUY)
      {
       OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Profit*Point,0,Ask-Profit*Point,Ask+(Profit*2)*Point,"",magic,0,CLR_NONE);
      }
     }
    }
   if (total<3)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_SELL)
      {
       OrderSend(Symbol(),OP_SELLSTOP,Lot,Ask-(Profit*2)*Point,0,Ask,Ask-(Profit*3)*Point,"",magic,0,CLR_NONE);
      }
     }
    }
   return(0);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
 OrderSelect(SELECT_BY_POS,MODE_TRADES);
Прочтите справку по этой функции. Она не правильно использована.
 
Talex:
 OrderSelect(SELECT_BY_POS,MODE_TRADES);
Прочтите справку по этой функции. Она не правильно использована.
Второй стопордер открывается и там такая же функция
 

Вам нужно получше (более скурпулёзно) разобраться в смысле и порядке использования функции OrderSelect() .
Посмотрите здесь Учебник по MQL4 - Торговые операции - Закрытие и удаление ордеров .

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

 
SK. писал (а):

Вам нужно получше (более скурпулёзно) разобраться в смысле и порядке использования функции OrderSelect() .
Посмотрите здесь Учебник по MQL4 - Торговые операции - Закрытие и удаление ордеров .

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


Спасибо попробую!

А если по сути моего вопроса, что можете подсказать

Эта часть кода работает,

//---- input parameters
extern int       Profit=50;
extern double    Lot=0.1;
int              magic=123456;
int              total;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  total=OrdersTotal();
//----
  {
   if (total==0)
    {
     OrderSend(Symbol(),OP_SELLSTOP,Lot,Ask-(Profit*2)*Point,0,Ask,Ask-(Profit*3)*Point,"",magic,0,CLR_NONE);
    }
   if (total<2)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_BUYSTOP)
      {
       OrderSend(Symbol(),OP_SELLSTOP,Lot,Ask-(Profit*2)*Point,0,Ask,Ask-(Profit*3)*Point,"",magic,0,CLR_NONE);
      }
     }
    }
   if (total<2)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_SELLSTOP)
      {
       OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Profit*Point,0,Ask-Profit*Point,Ask+(Profit*2)*Point,"",magic,0,CLR_NONE);
      }
     }
    }

а дальше нет

   if (total<3)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_BUY)
      {
       OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+Profit*Point,0,Ask-Profit*Point,Ask+(Profit*2)*Point,"",magic,0,CLR_NONE);
      }
     }
    }
   if (total<3)
    {
    OrderSelect(SELECT_BY_POS,MODE_TRADES);
     {
     if(OrderType()==OP_SELL)
      {
       OrderSend(Symbol(),OP_SELLSTOP,Lot,Ask-(Profit*2)*Point,0,Ask,Ask-(Profit*3)*Point,"",magic,0,CLR_NONE);
      }
     }
    }
   return(0);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MakarFX:
Talex:
 OrderSelect(SELECT_BY_POS,MODE_TRADES);
Прочтите справку по этой функции. Она не правильно использована.
Второй стопордер открывается и там такая же функция

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

По сути Вашего вопроса - вместо того, чтобы бесполезно тратить время, необходимо доподленно разобраться в сущности и порядке использования функции OrderSelect() и её параметров. Нет необходимости переписывать готовые тексты из учебника и статей сюда, на форум, чтобы ответить на Ваш вопрос. Просто почитайте.

 
MakarFX:

А если по сути моего вопроса, что можете подсказать


А по сути не правильно используете функцию OrderSelect(). Так как она может быть использована и с 2-мя и с 3-мя параметрами и все параметры объявлены как int, только поэтому не возникает ошибки(хотя я не проверял), но по сути функция работает не правильно.
 
SK. писал (а):

Вам нужно получше (более скурпулёзно) разобраться в смысле и порядке использования функции OrderSelect() .
Посмотрите здесь Учебник по MQL4 - Торговые операции - Закрытие и удаление ордеров .

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

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

Если Вы знаете где именно моя ошибка, подскажите!

 
Talex:
MakarFX:

А если по сути моего вопроса, что можете подсказать


А по сути не правильно используете функцию OrderSelect(). Так как она может быть использована и с 2-мя и с 3-мя параметрами и все параметры объявлены как int, только поэтому не возникает ошибки(хотя я не проверял), но по сути функция работает не правильно.
Данный вариант этой функции я взял из MACD Sample
 
MakarFX:
SK. писал (а):

Вам нужно получше (более скурпулёзно) разобраться в смысле и порядке использования функции OrderSelect() .
Посмотрите здесь Учебник по MQL4 - Торговые операции - Закрытие и удаление ордеров .

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

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

Если Вы знаете где именно моя ошибка, подскажите!

Вашу бы энергию в мирное русло..

Во-первых, быстро не получится. Все хотят, но чтобы получить хороший результат нужно время.
Во-вторых, два человека дважды указали Вам на ошибку: неправильно используется функция OrderSelect(). Даны ссылки - справка в МЕ и Учебник. Вам осталось прочесть, понять и использовать. Или.. я не знаю какими ещё словами.. ну, хотите, я прям тут Вам лекцию прочту? (полезу в учебник, скопирую параграф и выложу здесь). Думаете, так лучше будет?

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