Слишком частые запросы/Слишком много запросов

 
В MetaTrader ошибки описаны так:

ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы. Необходимо уменьшить частоту запросов, изменить логику программы.

Если на реальном счете делается запрос в бесконечном цикле раз в секунду - будет ли это ошибкой? Запретит ли брокер торговать из-за этого?

ERR_TOO_MANY_REQUESTS 141 Слишком много запросов. Необходимо уменьшить частоту запросов, изменить логику программы.

Если на одном терминале 12-20 экспертов и все запрашивают цену раз в секунду - будет ли это слишком много запросов?Запретит ли брокер торговать из-за этого?
 
Безусловно Вы получите максимальные репрессии за бесконечные циклы и такие частые запросы.
Скорее всего Вам сразу же запретят торговать. И будут абсолютно правы.
 
Renat писал (а):
Безусловно Вы получите максимальные репрессии за бесконечные циклы и такие частые запросы.
Скорее всего Вам сразу же запретят торговать. И будут абсолютно правы.

Таким образом, единственно верная частота обновления котировок - та, которую дает брокер? То есть на реальном счете можно работать только по  приходу нового тика от брокера - по функции start()?.
 

Интересно, различаются ли котировки от демо и реала от одного и того же брокера? Если нет или слабо отличаются (1-2) пипса, то через разделяемую память можно организовать так:
1 - с демо пишутся котировки с заданной частотой в эту память, так как на демо нет этой ошибки.
2 - с реального счета эти же котировки читаются

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

Зачем это понадобилось - на новостях за тик иногда получаем движение в 5-6 пунктов, что ведет к сильному проскальзыванию. Если котировки получаем сами, немного раньше тика - этого можно избежать.

 
Игра на новостях (в момент выхода новостей) - тупиковый путь развития стратегии, лучше пытаться в стратегии как-то спрогнозировать направления движения рынка на основе имеющейся технической картины .... IMHO
 
Если котировки получаем сами, немного раньше тика
Это как?:)
"Конфликтует тело с организмом" (М.Жв.)
 
Немного не так выразился. Есть мультивалютный советник. Обработка данных - в dll. После передачи данных в dll (1-й тик) , в dll формируются сигналы на сделку, исходя из того, какие котировки придут от других советников. Естественно, что для получения этого сигнала ждем еще одного тика (2-й тик) и в функции start() получаем нужное действие - купить, продать,закрыть, ждать дальше. Между тиками может пройти несколько секунд, цены могут измениться и в итоге сделки окажутся убыточными, так как советник пипсует :)
Поэтому я сам обновлял котировки раз в секунду. На демо счете все идеально работало, был профит.

Но на реальном ничего не выйдет, так как нельзя требовать котировки часто. Вот и возникает вопрос, как можно сделать так, чтобы не ждать постоянно функции start(). Вариант с бесконечным циклом и RefleshRates() отметается на реальном счете.

Одно из предложений - запрашивать с демо счета и передавать в реальный. Цены вроде совпадают.

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

Но может есть идеи получше?
 
RefleshRates() не посылает запросов на торговый сервер.
 
Rosh:
RefleshRates() не посылает запросов на торговый сервер.

   while (true)
   {
      Sleep(1000);      
      RefreshRates();
      if (GetAction(IdCurrent,Bid,Ask, action))
      {
         switch (action[0])
         {
            case 1 :
            {
               ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,0,magik);
               if (ticket<0)
               {
                  while (ticket<0)
                  {
                     Print("ERROR buy", GetLastError());
                     Sleep(1000);
                     RefreshRates();                  
                     ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,0,magik);
                  }               
               }
               if (OrderSelect(ticket,SELECT_BY_TICKET)==true)
               {
                  if (!SetRealPrice(IdCurrent,OrderOpenPrice()))
                  Print("Error to data");
               }
               else
                  Print("OrderSelect() вернул ошибку - ",GetLastError());
            break;
            }
                 
            case 2 :
            {
               ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,0,magik);
               if (ticket<0)
               {
                  while (ticket<0)
                  {
                     Print("ERROR sell", GetLastError());
                     Sleep(1000);
                     RefreshRates();
                     ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,0,magik);
                  }               
               }
               if (OrderSelect(ticket,SELECT_BY_TICKET)==true)
               {
                  if (!SetRealPrice(IdCurrent,OrderOpenPrice()))
                  Print("Error to data");
               }
               else
                  Print("OrderSelect() вернул ошибку - ",GetLastError());
               break;  
            }
            
            case 3 :
            {
               if (!CloseOrder(Bid,Ask))
               {
                  while (!closeposition) 
                  {
                     Sleep(2000);
                     closeposition=(CloseOrder(Bid,Ask));
                  } 
               }
               break;
            }                  
         }
      closeposition=false;
      action[0]=0;      
      }
    }

То есть на реальном счете этот кусок кода будет работать?

Тогда возникает вопрос - что есть програмный запрос на торговый сервер брокера?

 
Кайф. Мы все идем по одним и тем же граблям. Вопрос к Rosh (сам виноват - хорошо статьи пишет, и объяснять терпенья хватает): не возникает намерения организовать курсы? именно начальной, базовой подготовки. Самообучением заниматься мы все (похоже, в подавляющем большинстве) не любим. Думаю - пойдем и на платные.
 
favoritefx писал (а):

Но может есть идеи получше?


Есть.

Осмыслить простой порядок вещей: как только котировка из внешнего мира приходит в ДЦ, он пысылает её тиком в клиентский терминал.
Если дёргать ДЦ между тиками, то всё, что ДЦ может ответить, - это последняя известная котировка (ранее пришедшая также в терминал с тиком).

Котировка - это просто цена.
Тик - это явление - автоматическое сообщение сервером последней известной котировки в терминал.

Котировка принадлежит тику так же, как протектор принадлежит колесу, крона дереву, а сообщение форуму.
Вы не сможете прочитать моё сообщение на форуме до те х пор, пока я его не напишу, даже если каждую секунду будете обновлять форум.
Единственное, что можно прочесть - это последнее опубликованное сообщение.

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