Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 915

 

проблема что тикетов этих больше одного. может 4, точно не знаю еще. поэтому создал класс, где будет номер тикета и другая информация, которую не хранит ордерселект. поэтому хотелось иметь доступ по тикету. но пока что в голову приходит только создавать обьекты класса и накидать в CarrayObj а потом доставать по индексу, сравнивать тикет и дальше анализировать.  а проблема почему спрашивал - что терялся из-за обработки ошибок. но с тем разобрался, спасибо, сам виноват в другом месте. Господа evillive AlexeyVik - спасибо за оперативные ответы!

  

 
 
Здравствуйте!  Напишите пожалуйста, почему в тестере стратегий не открывает сделки, пишет в журнале ошибка: (2015.07.13 00:22:39.218    TestGenerator: unmatched data error (high value 1.31150 at 2013.07.11 05:00 is not reached from the least timeframe, high price 1.31140 mismatches) котировки обновлял. Вот код советника:
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int   stoploss=50; 
int   takeprofit=30;
int       slipage=2;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
      if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
      if(V1()==true) 
     
       ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
     
//-------------------------------------------------------------------+ 
    if ( OrdersTotal()<1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
      if(V2()==true) 
     
       ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}

)
 
rylay:
Здравствуйте!  Напишите пожалуйста, почему в тестере стратегий не открывает сделки, пишет в журнале ошибка: (2015.07.13 00:22:39.218    TestGenerator: unmatched data error (high value 1.31150 at 2013.07.11 05:00 is not reached from the least timeframe, high price 1.31140 mismatches) котировки обновлял. Вот код советника:
)

По поводу упомянутой ошибки тестера, так будет всегда при тестировании на тиках. История котировок в МТ4 несовершенна, всегда есть несовпадения.

Код кишит ошибками. Переменные bars* не инициализированы, функция старт непонятно что возвращает, проверки исполнения торговых функций нет, исправляйте.

В начало кода добавьте #property strict.

И раз уж сделали целых две функции определения типа ордеров, почему бы туда не встроить счётчик ордеров каждого типа и  вместо сравнения if( OrdersTotal()<1...) писать if ( OrdersBuy<1...), if ( OrdersSell<1...)? Это было бы правильнее.

 

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

Другими словами - бар дал сигнал на открытие ордера. Он открылся, срабоал короткий тейк. Сделка закрылась, но советник по закрытии первой, сразу же открывает вторую точно такой же ордер, так как условие для открытия в пределах этого бара все еще есть. Мне надо чтобы если на одном баре была только одна сделка. А для открытия следующей какой либо сделки ждем открытия другого бара.

 
Poinson:

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

Другими словами - бар дал сигнал на открытие ордера. Он открылся, срабоал короткий тейк. Сделка закрылась, но советник по закрытии первой, сразу же открывает вторую точно такой же ордер, так как условие для открытия в пределах этого бара все еще есть. Мне надо чтобы если на одном баре была только одна сделка. А для открытия следующей какой либо сделки ждем открытия другого бара.

bool _ужеоткрывался = false;

if (isNewBar()){ _ужеоткрывался = false;}

if (!OrderSend(...) ) { /* обработка ошибок */;    } else { _yжеоткрывался = true; }

isNewBar() - стандартный, как есть в статьях, с использованием static datetime date = Time[0];

if (_ужеоткрывался) { return; //ордер не слать }

 
evillive:

По поводу упомянутой ошибки тестера, так будет всегда при тестировании на тиках. История котировок в МТ4 несовершенна, всегда есть несовпадения.

Код кишит ошибками. Переменные bars* не инициализированы, функция старт непонятно что возвращает, проверки исполнения торговых функций нет, исправляйте.

В начало кода добавьте #property strict.

И раз уж сделали целых две функции определения типа ордеров, почему бы туда не встроить счётчик ордеров каждого типа и  вместо сравнения if( OrdersTotal()<1...) писать if ( OrdersBuy<1...), if ( OrdersSell<1...)? Это было бы правильнее.

Спасибо. Буду исправлять.. Просто когда условие было одно:
if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
все работало только не совсем корректно, вот и спросил.
 
danik:

bool _ужеоткрывался = false;

if (isNewBar()){ _ужеоткрывался = false;}

if (!OrderSend(...) ) { /* обработка ошибок */;    } else { _yжеоткрывался = true; }

isNewBar() - стандартный, как есть в статьях, с использованием static datetime date = Time[0];

if (_ужеоткрывался) { return; //ордер не слать }

он пишет  'isNewBar' - function not defined 2015

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

 
Poinson:

он пишет  'isNewBar' - function not defined 2015

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

поищи статью на форуме про определение нового бара, там функция isNewBar() ее скопируй, может и разберешься, там ничего сложного - сравнивается время открытия нового бара(с индексом 0, т.е. последнего), если время больше, чем было раньше - значит новый бар только что появился. а если появился - значит можно уже открывать новую сделку, если есть остальные условия
 
Poinson:

он пишет  'isNewBar' - function not defined 2015

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

Да в любом советнике в кодобазе нашли бы!

//в старте перед условиями входа:
      if(NewBar() == true)
      { 
//----------------------
  return(0);
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
  static datetime lastbar = 0;
  datetime curbar = iTime(NULL,15,0);
  if(lastbar != curbar) 
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
} 
 
borilunad:

Да в любом советнике в кодобазе нашли бы! 

Спасибо )) Сильнейший просто! все заработало с 1го раза!

Всем спасибо! 

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