Баг в функции OrderSend() ? - страница 10

 
Roger:
Так нельзя. Если у тебя на первом тике условие не совпало, весь час пролетит впустую.


на Н1 условие сохраняется 60 минут, т.е до следующего бара

//+------------------------------------------------------------------+
//|                                                     чернoвик.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

static datetime LastTime = 0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(NewBar()==true)
       {
        
           int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-250*Point,Ask+250*Point," ",16384,0,Green);
        
       }
  Comment ("LastTime   ",LastTime,"   NewBar   ",NewBar());  
//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar() 
    {
       
       if (iTime(NULL,0,0) != LastTime) 
       {
          LastTime = iTime(NULL,0,0);      
          return (true);
       } 
       else
          return (false);
     
    }

 комент посмотрите в тестере

 
pako:


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

 

Pako, я удивлён! Вы меня подкалывали "албанским кодом" на протяжении данной ветки, а предложил то что? :) Тоже самое только вид с боку! Ведь у Вас та же функция нового бара только более примитивно используемая. А дальше стоит функция посыла ордера, минуя все сигналы и тд и тп. А решение вопроса было не здесь! Так что албанский у Вас.

Swan:
Таки тогда
только при условии, открытия ордера на текущем баре. т.е. эту строчку в функции OpenBuy/Sell перенести





  Swan, Благодарю Вас! Вот что нужно было сделать! Если время нового бара присваивается в функции открытия ордера, то нет пропусков. Проверил уже, смотрю и не нарадуюсь как всё идёт чётко. Работает эксперт точно так как и нужно.

 Остался один вопрос. Почему прошлый вариант не работал? Там же условие то тоже было:

// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);

 Я думал, что тут код читается так.. если функция Trade(signal)) вернёт false, то выход из функции... и до обновления переменной lastBarTime в строке:

lastBarTime = iTime(NULL, 0, 0);

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

 
hoz:

  Swan, Благодарю Вас! Вот что нужно было сделать! Если время нового бара присваивается в функции открытия ордера, то нет пропусков. Проверил уже, смотрю и не нарадуюсь как всё идёт чётко. Работает эксперт точно так как и нужно.

 Остался один вопрос. Почему прошлый вариант не работал? Там же условие то тоже было:

 Я думал, что тут код читается так.. если функция Trade(signal)) вернёт false, то выход из функции... и до обновления переменной lastBarTime в строке:

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

Да, но если
signal == SIGNAL_NO

на первом тике нового бара lastBarTime обновляется..


мож без

   if (signal != SIGNAL_NO)
будет работать как и задуманно.. По коду сложно, проверять нада)
 
hoz:

Pako, я удивлён! Вы меня подкалывали "албанским кодом" на протяжении данной ветки, а предложил то что? :) Тоже самое только вид с боку! Ведь у Вас та же функция нового бара только более примитивно используемая. А дальше стоит функция посыла ордера, минуя все сигналы и тд и тп. А решение вопроса было не здесь! Так что албанский у Вас.

pako:
 если не трудно сформулируйте ТЗ еще раз , зачем вам контроль нового бара?


hoz:
 Сформулирую  и легко! Ещё 1 момент я не додумал, НО суть изложу целиком.

 Нужно, что б ограничений по количеству ордеров не было вообще. Т.е. ордера могут открываться в любом количестве... не важно сколько их будет, НО в текущем баре нужно, чтоб открывался только 1 ордер. Вот так вот.

 Т.е. открылся новый бар, значит можно в течении этого бара открыть 1 ордер, НО не более 1 ордера в текущем баре. Следующий ордер можно открыть только на следующем баре, не раньше..

 Так понятно теперь? 

я написал согласно ТЗ, на новом баре открывается одна позиция

в ТЗ я больше ничего не вижу  

Успехов Вам
 

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