Как правильно открыть ордер по рынку? - страница 7

 
prostotrader:

Кстати, странно, что Вы вызываете Sleep() из индикатора, т.к. это запрещено:

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.

 
 
Alexey Kozitsyn:

Кстати, странно, что Вы вызываете Sleep() из индикатора, т.к. это запрещено:

 
Я вообще не знаю что такое Sleep()
 
prostotrader:

Алексей!

Достаточно ликвидный инструмент :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Дело не в инструменте (ликвидности), а в задержке, которая может быть на ЛЮБОМ инструменте.
 

Я активно торгую с помощью советников почти 4 года.

Ни в одном моём советнике нет никаких пауз (Кроме паузы ожидания подкачки данных с сервера в ИНДИКАТОРАХ ),

если Вы вводите паузу - это ВЕРНЫЙ признак того, что Вы не првильно создали алгоритм работы Ващего советника :( 

Я тоже торгую довольно таки давно и только с помощью советников. Правда в основном на МТ4. На МТ5 до этого момента роботами работал только с помощью лимитников и вопросов не возникало. Лично я тоже противник дополнительных пауз в советниках, тем более если это скальпер или пипсовщик, можно банально просто пропустить вход.
 
prostotrader:
Я вообще не знаю что такое Sleep()
Тогда странно, что мы с Вами сейчас рассуждаем про паузы...
 
Alexey Kozitsyn:
Тогда странно, что мы с Вами сейчас рассуждаем про паузы...
Не в смысле того что Sleep() делает , а в смысле применения его в моём коде.
 
prostotrader:
Не в смысле того что Sleep() делает , а в смысле применения его в моём коде.
Каким же образом у Вас реализована пауза в индикаторе?
 
Alexey Kozitsyn:
Каким же образом у Вас реализована пауза в индикаторе?
//+------------------------------------------------------------------+
// 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() 

 
Gennady Mazur:
В принципе так и делаю, но на Фортс часто ордер принят успешно...но на след тике еще позиции нет...
Вот тут и может проскочить доп открытие.... частично решаю вопрос так, если ордер принят, то увеличиваю инт переменную, а после увеличения уже немного другие условия для открытия, поэтому нового открытия не происходит, но....если ордер не принят переменная не увеличивается, а вот тут то и прикол... не правильно определил состояние и полезли лишние ордера.
Вот вы сами ответили на свой вопрос. Надо последить за ордером.
 
prostotrader:

Алексей!

Достаточно ликвидный инструмент :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Дело не в инструменте (ликвидности), а в задержке, которая может быть на ЛЮБОМ инструменте.
 

Я активно торгую с помощью советников почти 4 года.

Ни в одном моём советнике нет никаких пауз (Кроме паузы ожидания подкачки данных с сервера в ИНДИКАТОРАХ ),

если Вы вводите паузу - это ВЕРНЫЙ признак того, что Вы не првильно создали алгоритм работы Ващего советника :( 

Ну и что с того, что у вас нет? Может там алгоритм такой, что не требуется.
 
Gennady Mazur:
Я тоже торгую довольно таки давно и только с помощью советников. Правда в основном на МТ4. На МТ5 до этого момента роботами работал только с помощью лимитников и вопросов не возникало. Лично я тоже противник дополнительных пауз в советниках, тем более если это скальпер или пипсовщик, можно банально просто пропустить вход.
У вас не тот случай когда нужна пауза.