• Тинькофф Банк-лучшие банковские продукты еще выгоднее
    Выбирайте продукт от банка Тинькофф
  • Уважаемые форумчане, друзья и посетители!
    Поступило предложение ( ссылка на обсуждение ) на сбор средств поддержания форума в рабочем состоянии с 1 июня ( оплата хостинга, бэкап ежедневный на другой хостинг и тд), отчетность будет предоставляться ежемесячно. Пока на ЮMoney ( яндекс деньги), доступно картой перевод, далее добавлю другие способы. Сумму перевода указывайте на ваш выбор исходя из своих возможностей.
    Форум продолжает свою работу благодаря Вашим пожертвованиям.

Программирование EnterLongLimit в Strategy Analyzer

thinarthrill

Well-Known Member
NinjaTrader
Что называется избил руки в кровь. Накидал простого робота с выставлением отложенного лимитника (вызываю метод EnterLongLimit/EnterSortLimit при определенном сигнале). Но не могу нормально протестировать результат в Strategy Analyzer. Если после прогонки стратеги посмотреть на график, то видно, что бэктест как-то некорректно обрабатывает лимитник. А именно, не на уровне цены, на которой лимитмник был установлен, а на цене открытия следующего бара. Для наглядности скрин: https://cloud.mail.ru/public/6SX6/uMBbkna2L. Перепробовал все настройки тестера стратегий, в скрипте пробовал добавить еще один тиковый график, чтобы точно скрипт на каждом тике срабатывал. Не помогает. Если прогнать робота в маркет реплее, то все корректно отрабатывает. Но там результаты за пару недель можно проанализировать. Хотелось бы за более длительный период прогнать. У кого-нибудь есть опыт построения стратегий с использованием лимитников? Как тестируете? Может я чего-то недогоняю. Или в скрипте надо отключать автоматическое управление ордерами и самому ими управлять?
 
помочь пока не знаю чем, но если найдете решение, выложите тут, вдруг пригодится кому.
 
Таки через дополнительную дата серию с тиковым графиком... просто до ума не довел. Лимитник надо выставлять не в текущей дата серии, а в тиковой
Код:
protected override void OnStateChange()
{
  if (State == State.Configure)
  {
     AddDataSeries(BarsPeriodType.Tick, 1);
  }
}


protected override void OnBarUpdate()
{
   // Check if the main data series triggered an bar update event
   if (BarsInProgress == 0)
   {
       // Submit an order on the more granular series in the context of our main bar
             EnterLongLimit(1, true, 1, SomePrice, "Long trade");
   }
}
 
Назад
Верх Низ