Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кстати, странно, что Вы вызываете Sleep() из индикатора, т.к. это запрещено:
Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.
Кстати, странно, что Вы вызываете Sleep() из индикатора, т.к. это запрещено:
Алексей!
Достаточно ликвидный инструмент :)
Дело не в инструменте (ликвидности), а в задержке, которая может быть на ЛЮБОМ инструменте.
Я активно торгую с помощью советников почти 4 года.
Ни в одном моём советнике нет никаких пауз (Кроме паузы ожидания подкачки данных с сервера в ИНДИКАТОРАХ ),
если Вы вводите паузу - это ВЕРНЫЙ признак того, что Вы не првильно создали алгоритм работы Ващего советника :(
Я вообще не знаю что такое Sleep()
Тогда странно, что мы с Вами сейчас рассуждаем про паузы...
Не в смысле того что Sleep() делает , а в смысле применения его в моём коде.
Каким же образом у Вас реализована пауза в индикаторе?
// Custom indicator Check timer function |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
uint end_value = GetTickCount();
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 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))
{
// Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
return(GetLocalData(a_symbol, period));
}
}
else
{
uint start_tick = GetTickCount();
//---
while(!CheckTimer(start_tick, 10))
{
fail_cnt--;
fail_cnt++;
}
}
fail_cnt++;
}
// Print( "LoadServerData: Первой даты на сервере нет!" );
return(0);
}
Это старый пример.
Т.к погрешность GetTickCount достаточно большая (до 16 мс), сейчас я использую GetMicrosecondCount()
В принципе так и делаю, но на Фортс часто ордер принят успешно...но на след тике еще позиции нет...
Вот тут и может проскочить доп открытие.... частично решаю вопрос так, если ордер принят, то увеличиваю инт переменную, а после увеличения уже немного другие условия для открытия, поэтому нового открытия не происходит, но....если ордер не принят переменная не увеличивается, а вот тут то и прикол... не правильно определил состояние и полезли лишние ордера.
Алексей!
Достаточно ликвидный инструмент :)
Дело не в инструменте (ликвидности), а в задержке, которая может быть на ЛЮБОМ инструменте.
Я активно торгую с помощью советников почти 4 года.
Ни в одном моём советнике нет никаких пауз (Кроме паузы ожидания подкачки данных с сервера в ИНДИКАТОРАХ ),
если Вы вводите паузу - это ВЕРНЫЙ признак того, что Вы не првильно создали алгоритм работы Ващего советника :(
Я тоже торгую довольно таки давно и только с помощью советников. Правда в основном на МТ4. На МТ5 до этого момента роботами работал только с помощью лимитников и вопросов не возникало. Лично я тоже противник дополнительных пауз в советниках, тем более если это скальпер или пипсовщик, можно банально просто пропустить вход.