Замучила ошибка there are no trading operations - страница 6

 

Эта задачка даже ещё интереснее. Собрал простейший советник на базе кода из поста выше. Так же открывает 5 сделок, каждая в рынке 5 минут, и потом закрывается. Вот код:

#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static int test_ticket[2]={0,0};
   if(test_ticket[1]<5 && test_ticket[0]==0) {
      test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"test",33333,0,clrNONE);
      if(test_ticket[0]>0) test_ticket[1]++;
   }   
   if(OrderSelect(test_ticket[0],SELECT_BY_TICKET))
      if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent())
         if(OrderClose(test_ticket[0],OrderLots(),NormalizeDouble(Bid,_Digits),30,clrNONE)) {
            printf("Test order closed, ticket #%d",test_ticket[0]);
            test_ticket[0]=0;
         }   
   
  }
//+------------------------------------------------------------------+

Валидацию он прошел на первой попытке, но по NZDUSD торговых операций нет. Почему?


Даже если бы валидатор задал депозит недостаточный для открытия минимальным лотом, вышла бы ошибка 134, как в сообщении что выше выкладывал. А тут просто нет сделок! Почему???

Может всё таки валидатор косячит, или этому есть разумное объяснение?

 
Renat Akhtyamov:

а Вы сначала положите сюда полный ответ валидатора

и с чего Вы решили, что валидатор назначает тикеты по принципу который придумали Вы?

для того чтобы открыть 5 сделок, нужно считать количество открытых сделок, а не париться тикетами

Ренат, так я и считаю сделки, посмотрите внимательнее. Можете даже прогнать мой код в тестере. Там массив из двух значений: test_ticket[0] - запоминает тикет ордера, test_ticket[1] - количество попыток. 

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

if(test_ticket[1]<5 && test_ticket[0]==0) {
 

Вот такая история на следующих попытках с разным количеством ордеров


А вот здесь, на одной из следующих попытках, валидатор действительно использует минимальный лот, который заведомо не может открыться с депозитом в 1$. Вопрос, почему на попытках ранее не было сделок? И почему в этом прогоне используются заведомо ошибочные минимальный лот и депозит, которые инициируют ошибку валидации?

Vladimir Karputov:

...

В общем валидатор пока справляется со своей главной задачей: отсеивать недоработанный код из Маркета.

Ммм...

И это не случайный выстрел. Вот три следующие попытки.


 

Ошибка в логе "Нет денег на открытие такой-то сделки ..." говорит о том, что Вы всё-таки отправили торговый приказ, но совершенно перед этим ничего (или не все) не проверили. В статье четкий алгоритм проверки указан.


Запомните - ошибка "нет денег на открытие такой-то сделки ..." - это 99% ошибка в логике советника. Это пропущенные проверки (или их полное отсутствие). Это признак недостаточного понимания принципов кодирования.


Запомните: в реальном мире и депозит может быть $1, и плечо не всегда 1:100, и минимальный лот может быть 0.01 и 0.02 и 0.30 и 1.0 и ещё куча всякой дичи ...

 
Vladimir Karputov:

Ошибка в логе "Нет денег на открытие такой-то сделки ..." говорит о том, что Вы всё-таки отправили торговый приказ, но совершенно перед этим ничего (или не все) не проверили. В статье четкий алгоритм проверки указан.


Запомните - ошибка "нет денег на открытие такой-то сделки ..." - это 99% ошибка в логике советника. Это пропущенные проверки (или их полное отсутствие). Это признак недостаточного понимания принципов кодирования.


Запомните: в реальном мире и депозит может быть $1, и плечо не всегда 1:100, и минимальный лот может быть 0.01 и 0.02 и 0.30 и 1.0 и ещё куча всякой дичи ...

Владимир, Вы слона не заметили. Основная ошибка была 

Могу ответить Вашим языком, выдать нравоучение. 

 
Vladimir Karputov:

Ошибка в логе "Нет денег на открытие такой-то сделки ..." говорит о том, что Вы всё-таки отправили торговый приказ, но совершенно перед этим ничего (или не все) не проверили. В статье четкий алгоритм проверки указан.


Запомните - ошибка "нет денег на открытие такой-то сделки ..." - это 99% ошибка в логике советника. Это пропущенные проверки (или их полное отсутствие). Это признак недостаточного понимания принципов кодирования.


Запомните: в реальном мире и депозит может быть $1, и плечо не всегда 1:100, и минимальный лот может быть 0.01 и 0.02 и 0.30 и 1.0 и ещё куча всякой дичи ...

Владимир, не понимаю читаете Вы посты вообще или выхватываете интересные Вам картинки. Прочитайте всё внимательно ещё раз или пару раз с начала страницы хотя бы. И прочитайте выложенный там код! Даже не хочу утруждаться Вам всё разжёвывать!

 
Andrey Kaunov:

Даже не хочу утруждаться Вам всё разжёвывать!

Андрей, точно так же никто не хочет вам повторять уже написанное и разжёванное.

 
Да, но проблема то налицо. Может кто нибудь из сильных сайта сего всё таки попробует разобраться, и проверить валидатор. Ведь простейший прозрачный код без параметров вообще не делает сделок по NZDUSD и по GBPUSDcheck иногда. А если добавить какие то условия и не будет сделок и по золоту, то опять ошибка no trading operations и непройденная проверка.
 
Andrey Kaunov:
Да, но проблема то налицо. Может кто нибудь из сильных сайта сего всё таки попробует разобраться, и проверить валидатор. Ведь простейший прозрачный код без параметров вообще не делает сделок по NZDUSD и по GBPUSDcheck иногда. А если добавить какие то условия и не будет сделок и по золоту, то опять ошибка no trading operations и непройденная проверка.

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

Вполне вероятно, что именно отсутствие сообщения об ошибке в журнале, например, расчёта величины лота, и является причиной ошибок валидации.

 
Andrey Kaunov:

Вот такая история на следующих попытках с разным количеством ордеров


А вот здесь, на одной из следующих попытках, валидатор действительно использует минимальный лот, который заведомо не может открыться с депозитом в 1$. Вопрос, почему на попытках ранее не было сделок? И почему в этом прогоне используются заведомо ошибочные минимальный лот и депозит, которые инициируют ошибку валидации?

Ммм...

И это не случайный выстрел. Вот три следующие попытки.


Ошибка отправки торгового приказа 134 ...

Эту ошибку тестер написал? Если да, то это тоже одна из причин ошибок валидации. Вы должны самостоятельно рассчитывать возможность открытия позиции, и в случае невозможности это сделать, выводить собственное сообщение в журнал о невозможности торговли с установленными параметрами, а не отсылать уже заведомо некорректный приказ на сервер, полагаясь на то, что терминал и сервер за вас всё сделают. Такими некорректными приказами можно заспамить сервер, и быть в дальнейшем благополучно забаненным на автоторговлю. Это ваша ошибка, а не валидатора.