Разъясните пожалуйста что в этой функции может быть не так? - страница 5

 
Karputov Vladimir:
Лучше озвучьте, что Вам посоветовали в сервисдеске - Вы ведь продолжили там общение?
Я почему-то больше трёх раз не стучу в закрытую дверь. На три моих комментария ни одного ответа... И зачем кричать в пустоту?
 
Alexey Viktorov:
Я почему-то больше трёх раз не стучу в закрытую дверь. На три моих комментария ни одного ответа... И зачем кричать в пустоту?

CopyRates() в каждом тике, запущенная на М15 будет поддерживать кеш истории по не родному периоду (timeframe) (H1 и D1).

 

А также можно вместо копирования серий через CopyRates() просто запрашивать 

SYMBOL_TIME

Время последней котировки

datetime

 

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

 
Karputov Vladimir:

CopyRates() в каждом тике, запущенная на М15 будет поддерживать кеш истории по не родному периоду (timeframe) (H1 и D1).

 

А также можно вместо копирования серий через CopyRates() просто запрашивать 

SYMBOL_TIME

Время последней котировки

datetime

 

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

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

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

Я сейчас с другого компа пишу, нет кода, но можете сами проверить... Как Вы думаете сколько дневных баров между временем 27.06.2016 00:00:00 и 27.06.2016 00:00:00???

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

 
Alexey Viktorov:

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

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

Я сейчас с другого компа пишу, нет кода, но можете сами проверить... Как Вы думаете сколько дневных баров между временем 27.06.2016 00:00:00 и 27.06.2016 00:00:00???

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

Не нужно выдумывать - Вы предоставили советника БЕЗ CopyRates().
 
Karputov Vladimir:
Не нужно выдумывать - Вы предоставили советника БЕЗ CopyRates().
Я давал код когда небыло разговора о подёргивании. Я повторяю, пишу с компа где у меня нет кода и установленного МТ5, поэтому прошу Вас, внесите изменения самостоятельно, не в функции определения нового бара, а перед её вызовом в основном коде OnTick(). и повторите эксперимент.
 
Alexey Viktorov:
Я давал код когда небыло разговора о подёргивании. Я повторяю, пишу с компа где у меня нет кода и установленного МТ5, поэтому прошу Вас, внесите изменения самостоятельно, не в функции определения нового бара, а перед её вызовом в основном коде OnTick(). и повторите эксперимент.

 Есть код - есть осуждение. Нет кода - тогда всё переходит в режим гадание на кофейной гуще. Будете у компа - составьте код с моими рекомендация

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Разъясните пожалуйста что в этой функции может быть не так?

Karputov Vladimir, 2016.06.27 13:36

***

А также можно вместо копирования серий через CopyRates() просто запрашивать 

SYMBOL_TIME

Время последней котировки

datetime

 

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


и проверете у себя.

 

Примерно так

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
MqlRates    mqlRates;
/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  bool newDay, newHour;
   TimeToStruct(TimeCurrent(), mqlDateTime);
   CopyRates(_Symbol, PERIOD_H1, 0, 1 mqlRates);
    if((int)mqlDateTime.hour == 0)
     {
      newDay = IsNewBar(_Symbol, PERIOD_D1, oldDay);
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar(_Symbol, PERIOD_H1, oldHour); // А это совсем другая переменная
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          Print("Ордер должен откыться. ");
         }
     }
}/*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
 Comment("");
}/*******************************************************************/
 
Alexey Viktorov:

Примерно так

А где проверки на ответ от CopyRates()?
 
Karputov Vladimir:

 Есть код - есть осуждение. Нет кода - тогда всё переходит в режим гадание на кофейной гуще. Будете у компа - составьте код с моими рекомендация

 


и проверете у себя.

Ну, да... Презумпция невиновности в действии...

А мне оно надо??? В программе MQ ошибки. Я могу их обойти самостоятельно или с Вашими советами, но ошибки и глупости в программе MQ так и останутся ошибками и глупостями.

У компа я буду только в следующую пятницу. А подёргивание кота уже проверено. И никакой разницы, правой рукой дёргать или левой... Ошибки остаются ошибками, глупости остаются глупостями.

 
Karputov Vladimir:
А где проверки на ответ от CopyRates()?
Я понимаю что Ваша заинтересованность в подтверждении ошибки равна нулю. А потому Вы самостоятельно ничего не сделаете... Да и не очень надо, не буду я Вам доказывать... Мне-то от этого какой прок??? Никакого...