Ошибки, баги, вопросы - страница 1802
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы предлагаете это на каждом тике делать?
Я поддерживаю синхронизацию на каждом срабатывании OnBookEvent() :(
Тут без вопросов, вопрос в том, что помимо этого, предлагается еще и вызывать каждый раз функцию CopyRates().... это, как мне кажется, жесть какая-то...
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
Так меня научили в СД
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
Вы если хотите что-то сказать, или показать - показывайте, пожалуйста, нормально... гадать, что тут у Вас за функция и что она делает не охота.
Добавлено:
Научили? А реализацию не предоставили?
Вы если хотите что-то сказать, или показать - показывайте, пожалуйста, нормально... гадать, что тут у Вас за функция и что она делает не охота.
Добавлено:
Научили? А реализацию не предоставили?
Что нормально?
Сказали, что через две минуты выгружаются данные и чтобы поддержать синхронизацию
посоветовали вызывать Bars
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Вот
// Custom indicator Check timer function |
//+------------------------------------------------------------------+
bool CheckTimer(const ulong start_value, const ulong per_value)
{
ulong end_value = GetMicrosecondCount();
if(end_value < start_value)
{
if((start_value - end_value) >= per_value) return(true);
}
else
{
if((end_value - start_value) >= per_value) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get local data function |
//+------------------------------------------------------------------+
int GetLocalData(const string a_symbol, ENUM_TIMEFRAMES a_period)
{
long first_date;
int fail_cnt = 0;
while((fail_cnt < 3) && !IsStopped())
{
first_date = long( SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE));
if(first_date > 0)
{
int f_cnt = 0;
datetime times[1];
long a_bars = 0;
while((f_cnt < 5) && !IsStopped())
{
if(bool(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_BARS_COUNT, a_bars)))
{
if ( a_bars > 0 )
{
if( bool(SeriesInfoInteger(a_symbol, a_period, SERIES_BARS_COUNT, a_bars)))
if(a_bars > 0) return(int(a_bars));
}
}
else
{
//--- force timeseries build
CopyTime(a_symbol, a_period, 0, 1, times);
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 5000))
{
f_cnt--;
f_cnt++;
}
}
f_cnt++;
}
}
else
{
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 5000))
{
fail_cnt--;
fail_cnt++;
}
}
//---
fail_cnt++;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
int fail_cnt = 0;
while((fail_cnt < 5) && !IsStopped())
{
long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
if(first_date > 0)
{
if(SymbolIsSynchronized(a_symbol))
{
return(GetLocalData(a_symbol, period));
}
}
else
{
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 20000))
{
fail_cnt--;
fail_cnt++;
}
}
fail_cnt++;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Вызывая GetBars, мы подддерживаем синхронизацию или пытаемся получить данные
Что нормально?
Сказали, что через две минуты выгружаются данные и чтобы поддержать синхронизацию
посоветовали вызывать Bars
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Разве это не аналоги:
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
Да, мне казалось, что Bars() возвращает 0, если нет синхронизации... Надо будет провести тест...
Вы предлагаете это на каждом тике делать?
И пока символ выбран в обзоре рынка и история по символу удерживается экспертом, то она поддерживается в синхронизированном состоянии. Удержание экспертом означает не реже 1 раза в 2 минуты обращаться к этой истории, например копированием одного бара. Если история синхронизирована, то на копирование одного бара время не тратится - всего несколько тактов процессора. Либо, как тут только что сказали, спрашивать количество баров, тоже несколько тактов
Зачем? Достаточно однократного действия.
И пока символ выбран в обзоре рынка и история по символу удерживается экспертом, то она поддерживается в синхронизированном состоянии. Удержание экспертом означает не реже 1 раза в 2 минуты обращаться к этой истории, например копированием одного бара. Если история синхронизирована, то на копирование одного бара время не тратится - всего несколько тактов процессора.
К индикаторам относится интервал в 2 минуты?
Да, а проверкой факта синхронизации синхронизация также будет удерживаться?
К индикаторам относится интервал в 2 минуты?
Да, а проверкой факта синхронизации синхронизация также будет удерживаться?
Проверкой факта синхронизированности синхронизация не удерживается.