Непонятки с тестером

 

билд 211, моделирование все тики

советник довольно простой, открываем по рынку (это работает )))) ), ставим отложенники.

закрываемся только по тейк-лосу, либо удаляемся.

void deleteAll(){
   int res=0;
    for (int i=OrdersTotal();i>=0;i--) {
        if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
               RefreshRates();
               if (IsTradeAllowed()){
                  switch (OrderType()){
                     case OP_BUY: OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Orange); break;
                     case OP_SELL: OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Orange); break;
                     default: OrderDelete(OrderTicket(),Orange); break;
                  }
               }
            }
        }
   }
    return(0);
}

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

в итоге - в логе валятся ошибки 145 - "Модификация запрещена, так как ордер слишком близок к рынку"

но у меня нет модификации! только удаление либо закрытие. где копать - не понимаю ((

позабавило следуещее:

23:39:47 1999.12.03 14:58 DiggerTmp EURUSD,M1: open #465 sell 0.20 EURUSD at 1.0017 sl: 1.0037 tp: 0.9997 ok
23:39:47 1999.12.03 14:58 DiggerTmp EURUSD,M1: open #466 buy stop 0.20 EURUSD at 1.0037 sl: 1.0017 tp: 1.0057 ok
23:39:47 1999.12.06 01:04 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:04 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:10 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:10 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:32 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:32 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:34 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:34 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:38 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:38 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:41 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:41 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:43 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:43 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:46 DiggerTmp EURUSD,M1: OrderDelete error 145
23:39:47 1999.12.06 01:46 DiggerTmp EURUSD,M1: OrderClose error 145
23:39:47 1999.12.06 01:50 DiggerTmp EURUSD,M1: delete #466 buy stop 0.20 EURUSD at 1.0037 sl: 1.0017 tp: 1.0057 ok

т е при моделировании попытки происходят рандомно 15 раз за 46 мин, притом что данные есть на всех таймфреймах!! и это при моделировании на минутках, все тики [на остальных тф в режиме "все тики" такая же ботва].


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

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

void tralBuy(){
   RefreshRates();
   double tmp,lvCnsl=aOpen[0]-aPoint[4]-Ask;
   if (lvCnsl>0) {
// бла-бла код, определяем tmp - уровень тейка
// данные массивов aPos aOpen aStop заполняются при сканировании ордеров - там все корректно
      if (IsTradeAllowed() && tmp<=aTake[0]-Point) { Print(aPos[0],"/",aOpen[0],"/",NormalizeDouble(aStop[0],Digits),"/",tmp," - ",Ask); OrderModify(aPos[0],aOpen[0],aStop[0],tmp,0,Orange); }
   }
   return(0);
}
 
void tralSell(){
   RefreshRates();
   double tmp,lvCnsl=Bid-aPoint[4]-aOpen[1];
   if (lvCnsl>0) {
// бла-бла код, определяем tmp - уровень тейка
// данные массивов aPos aOpen aStop заполняются при сканировании ордеров - там все корректно
      if (IsTradeAllowed() && tmp>=aTake[1]+Point) { Print(aPos[1],"/",aOpen[1],"/",NormalizeDouble(aStop[1],Digits),"/",tmp," - ",Bid); OrderModify(aPos[1],aOpen[1],aStop[1],tmp,0,Orange);}
   }
   return(0);
}

итог в логе (часть ессно)

00:07:07 1999.01.15 15:06 eDGS_Help_v1 EURUSD,M1: open #334 buy 0.20 EURUSD at 1.1681 sl: 1.1647 tp: 1.1693 ok
00:07:07 1999.01.15 15:07 eDGS_Help_v1 EURUSD,M1: 334/1.1681/1.1647/1.1682 - 1.1653
00:07:07 1999.01.15 15:07 eDGS_Help_v1 EURUSD,M1: OrderModify error 145
00:07:07 1999.01.15 15:07 eDGS_Help_v1 EURUSD,M1: 334/1.1681/1.1647/1.1682 - 1.1664
00:07:07 1999.01.15 15:07 eDGS_Help_v1 EURUSD,M1: modify #334 buy 0.20 EURUSD at 1.1681 sl: 1.1647 tp: 1.1682 ok

как видно, если стоп ближе 10п от цены, валит ошибка. но мы то меняем не стоп, а тейк!! а он от цены где то на 20 пунктов...

вот такие казусы (

притом что таких ошибок оочень мало (гдето 0.1 % от общего числа), но главное - не понятна природа этого (

есть у кого мысли, как ее победить?

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

 

Ну так выведите в лог MODE_FREEZELEVEL, что он покажет? А под модификацией тут наверно подразумевается и закрытие и удаление тоже, надо в справке поправить ... Заморозка на эти операции тоже влияет, проходил как-то. А вообще мне Ваш ДЦ не очень нравится.

 

ну вообще то у меня в коде есть проверка MODE_STOPLEVEL и корректировка параметров.

вывел FREEZELEVEL = 10, что вопчем то ожидаемо. только ктонить объясните мне разницу между этими двумя переменными...

.. и причем тут дц? :-) если я меняю у ордера параметр, значение которого вне этих вышеописанных переменных - с чего бы ему морозицо?

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

зы. с утра обновилась версия до 213.. без перемен (

 
GameOver:

ну вообще то у меня в коде есть проверка MODE_STOPLEVEL и корректировка параметров.

вывел FREEZELEVEL = 10, что вопчем то ожидаемо. только ктонить объясните мне разницу между этими двумя переменными...

.. и причем тут дц? :-)

Стоплевел и Фризлевел - параметры выдаваемые сервером ДЦ к которому подсоеденен терминал во время теста. Попробуйте провести тест на данных сервера MQ, самому интересно стало)

З.Ы. А разница примерно такая: Стоплевел - мин.уровень для установки отложников, стопов и тейков, А фризлевел растояние от цены на котором любые операцие с открытом ордером запрещены.

 
GameOver:

... и уж тем более - удалить и закрыть по рынку я должен иметь возможность вообще в любое время - закие тут нахрен заморозки еще могут быть?

Если ордер к рынку находится на расстоянии ближе чем FREEZLEVEL, то ордер ни модифицировать, ни удалить ни закрыть не удастся.
 
goldtrader:Если ордер к рынку находится на расстоянии ближе чем FREEZLEVEL, то ордер ни модифицировать, ни удалить ни закрыть не удастся.

Блин, что-то я подзабыл, только если ордер находится ближе, или любой из приказов по ордеру: стоп или тейк ближе Freezlevel? У меня вроде проблема заключалась в том, что когда почти срабатывал TP (находился ближе FREEZLEVEL) закрыть ордер не мог. Непомню...
 

Из справки терминала:

FREEZELEVEL - Уровень заморозки ордеров в пунктах. Если цена исполнения находится в пределах, определяемых уровнем заморозки, то ордер не может быть модифицирован, отменен или закрыт.

Цена исполнения для

- отложенных ордеров - цена открытия;

- открытых позиций - уровни SL и TP.

 

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

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

тогда осталось только выяснить - почему при моделировании на минутках и всех тиках в течении 45 минут приходит тока 15 тиков?...

 
Figar0:
Стоплевел и Фризлевел - параметры выдаваемые сервером ДЦ к которому подсоеденен терминал во время теста. Попробуйте провести тест на данных сервера MQ, самому интересно стало)

собсно на них и тестирую.. тока у них же демо счета в omnivest (?)

 
Figar0:
goldtrader:Если ордер к рынку находится на расстоянии ближе чем FREEZLEVEL, то ордер ни модифицировать, ни удалить ни закрыть не удастся.

Блин, что-то я подзабыл, только если ордер находится ближе, или любой из приказов по ордеру: стоп или тейк ближе Freezlevel? У меня вроде проблема заключалась в том, что когда почти срабатывал TP (находился ближе FREEZLEVEL) закрыть ордер не мог. Непомню...
Любой из приказов, который на данный момент ближе к рынку. А вообще-то порядочные ДЦы заморозками не злоупотребляют.
 
GameOver:

вот уж реально - сапожники без сапог ((((

Скорее, экспертописатели без рук... И по вопросу фриз-левела и по "15 тикам за 45 минут".
Без обид.
Причина обращения: