← Back

S# 4.2.3.4 ошибки в работе historyemulator

Тиковая история, импортированная из рейтерса, S# 4.2.3.4 - при бэктестинге вылазят вот такие вот баги: http://gyazo.com/1fb882dd0a0df11e31ac31d1eaf4c0dd S# проводит сделки по несуществующим ценам. На версии 4.2.2.16 было все нормально

Также появилось ощущение, что на новой версии сильно возросло проскальзывание - проходит сигнал на вход/выход из позиции, а реальный execution проходит совсем по другим ценам

Comments (44)

Login or Create account, Log in or register to leave a comment

devruss
devruss Author

Также, начиная с версии 4.2.3.xxx на графике PnL постоянно появляются непонятные выбросы (spikes): http://gyazo.com/3bd1a5cf9f1025018d84d8c9f764fcd1

На версиях 4.2.2.xxx такого не было

Mikhail Sukhov
Mikhail Sukhov

SampleHistoryTesting на тиках:

devruss
devruss Author

На истории, записанной Гидрой все ок. Проблемы возникают на истории, импортированной из csv в Гидру через "импорт сделок". Попробуй запустить тот же самый пример, но на данных, скачанных с сайта finam или mfd и импортированных в гидру.

P.S. По поводу твоего скриншота. Насколько я помню sampleSMA стратегию - она покупает при пересечении цены SMA вверх, и продает при пересечении вниз, так? Посмотри на четвертую сделку после 11:50 на графике. Должна была быть продажа сразу после пересечения - посмотри на реальный execution - там slippage пунктов в 10. Теперь если использовать пробойные стратегии - на новый min или max, то возникают картинки как в моем скриншоте.

devruss
devruss Author

devruss: Проблемы возникают на истории, импортированной из csv в Гидру через "импорт сделок". Попробуй запустить тот же самый пример, но на данных, скачанных с сайта finam или mfd и импортированных в гидру.

Михаил, хочу напомнить, что твой продукт называется S#, а не Sample Library. То, что примеры работают нормально, говорит только о том, что примеры работают нормально. Вот реальная живая ситуация, давай ее решать. Переход с ветки 4.2.2.xxx на 4.2.3.xxx привел к этим проблеммам - код идентичный. Напомню, что откатиться назад нельзя, так как база гидры обновилась и старая ветка не видит всю историю, записанную новой гидрой.

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

Mikhail Sukhov
Mikhail Sukhov

devruss: Ты отбиваешься от баг репортов как только можешь, а потом отрицаешь проблемы до последнего,

Странное заявление. А зачем тогда этот форум, если не для баг репортинга?

Вернемся к тебе. Как мне проверять? Логичнее было бы сделать step-by-step проверку тебе. Эмулятор работает в одном потоке, поэтому все детерминированно. Возможно всплекс идет и из-за данных. Может из-за эмулятора. Сейчас это не баг репорт. Это предложение погадать о том, где проблема.

devruss
devruss Author

Михаил Сухов: Логичнее было бы сделать step-by-step проверку тебе.

Ок.

Инструмент - SiM4, данные записаны Гидрой вживую, никаких артефактов нет.


04/04/2014 11:22:32 0 position, 6 PnL, 36039 Price
Avg Entry price 36,037 on -4 volume
04/04/2014 11:22:33 -4 position, -1526 PnL, 36039 Price
04/04/2014 11:22:33 -4 position, -1526 PnL, 36039 Price
....
04/04/2014 11:23:17 -4 position, -1526 PnL, 36038 Price
04/04/2014 11:23:17 -4 position, -1526 PnL, 36038 Price
04/04/2014 11:23:19 -4 position, 2 PnL, 36040 Price
04/04/2014 11:23:19 -4 position, 2 PnL, 36040 Price


Данные тиковые, никаких всплесов не было. Проблема в PnL Manager. Я так понял, он теперь начал делать mark-to-market PnL открытых позиций, но только в определенные моменты он делает это неправильно. Такая картина повторяется при каждом прогоне стратегии.

Заметь: произошло изменение позиции, при этом цена не поменялась. Если я продал 4 контракта по цене 36039 и цена осталась той же, то мой PnL не изменился (ну совсем по честному, то изменился, так как short маркировать надо по offer, но если маркировать по тикам, то не изменился).

Глубже, чем данный report я посмотреть уже не могу. Проблема внутри PnL Manager

Mikhail Sukhov
Mikhail Sukhov

devruss: Я так понял, он теперь начал делать mark-to-market PnL открытых позиций, но только в определенные моменты он делает это неправильно.

Значит на рынке в какой-то момент есть неправильная цена. Можно вывесли в лог текущие цены инструмента?

devruss
devruss Author

Михаил Сухов:

devruss: Я так понял, он теперь начал делать mark-to-market PnL открытых позиций, но только в определенные моменты он делает это неправильно.

Значит на рынке в какой-то момент есть неправильная цена. Можно вывесли в лог текущие цены инструмента?

Так я и вывел потиковое изменение цены с момента открытия позиции. Там цена не менялась вообще! Более того, чтобы была неправильная цена на USD/RUB фьючерсе в 1500 пунктов? Еще раз повторю - я препроверил все 5 раз: на 4.2.2.xxx тот же самые код, на тех же самых данных все правильно показывает, а на 4.2.3.xxx уже нет.

И еще один момент - если посмотришь на последние значения перед тем как PnL выправился, там как раз цена изменилась, а вот PnL нет. Короче что-то не так с тем, как реализован метод mark-to-market PnL.

Mikhail Sukhov
Mikhail Sukhov

devruss: Так я и вывел потиковое изменение цены с момента открытия позиции.

Не тики, а значения в стакане (лучшая пара). И еще неплохо бы вывести стоимость пункта.

devruss
devruss Author

По поводу спайков - они возникают в момент открытия позиций. В некоторых случаях S# при открытии позиций маркикует ее по каким-то случайным ценам и получается очень большой мгновенный позицивный или негативный pnl - естественно, при закрытии позиций, все выравнивается - отсюда и спайк.

Мне кажется, что трейды по несуществующим ценам, спайки в PnL при открытии позиций и т.д. - все это части одного большого бага, который закрался с версии 4.2.3.xxx

Пример: http://gyazo.com/c089e4108b5719798fbcadc8f8b88810 Чтобы не палить стратегии, сорри за очень маленьких скриншот:

  • верхний график это цена актива и стрелки показывают execution
  • второй снизу график (синий) - это график PnL.

Видно, как возникает большой спайк - при продаже, потом при закрытии (покупке) PnL выравнивается. Так как PnL данного трейда по отношени к PnL всей стратегии не такой большой, то и реальный realized pnl не дает такого уж большого прироста. Но при этом спайк реально огромный. Данных спайк повотяется на каждом прогоне в одном и том же месте

Mikhail Sukhov
Mikhail Sukhov

devruss: По поводу спайков

SampleHistoryTesting - работает нормально.

devruss
devruss Author

Я конечно могу еще раз запустить бэктестинг на этот пример, но ты реально думаешь, что на фьючерсе на USD/RUB у тебя может быть bid/ask spread в стакане на 1500 пунктов?! Стоимость пункта = 1. Если бы стоимость была неправильная, то такая ситуация повторялась бы каждый раз, а не иногда.

devruss
devruss Author

Вот лог с нового прогона стратегии - прогон новый, но временные сигнатуры совпадают вплоть до секунд


04/04/2014 11:22:32 0 position, -3 PnL, 36039 Price, Бид 36037 42 Bid, Оффер 36042 27 Ask 
Avg Entry price 36,037 on -4 volume
04/04/2014 11:22:33 -4 position, -1535 PnL, 36039 Price, Бид 36037 42 Bid, Оффер 36042 27 Ask 
04/04/2014 11:22:33 -4 position, -1535 PnL, 36039 Price, Бид 36037 38 Bid, Оффер 36042 27 Ask 
04/04/2014 11:22:33 -4 position, -1535 PnL, 36037 Price, Бид 36037 38 Bid, Оффер 36042 27 Ask 
04/04/2014 11:22:33 -4 position, -1535 PnL, 36037 Price, Бид 36037 38 Bid, Оффер 36037 8 Ask 
04/04/2014 11:22:33 -4 position, -1535 PnL, 36039 Price, Бид 36037 38 Bid, Оффер 36037 10 Ask 
....
04/04/2014 11:23:17 -4 position, -1535 PnL, 36040 Price, Бид 36038 5 Bid, Оффер 36041 31 Ask 
04/04/2014 11:23:17 -4 position, -1535 PnL, 36038 Price, Бид 36038 5 Bid, Оффер 36041 31 Ask 
04/04/2014 11:23:17 -4 position, -1535 PnL, 36038 Price, Бид 36038 5 Bid, Оффер 36038 1 Ask 
04/04/2014 11:23:19 -4 position, -7 PnL, 36040 Price, Бид 36038 5 Bid, Оффер 36038 3 Ask 
04/04/2014 11:23:19 -4 position, -7 PnL, 36040 Price, Бид 36038 5 Bid, Оффер 36041 31 Ask 

Обрати внимание, что неправильная оценка PnL возниает сразу же после трейда. При этом ни цена, ни bid/ask не поменялись. Надеюсь, теперь убедил, что проблема в реализации PnL manager?

Mikhail Sukhov
Mikhail Sukhov

Начну с конца - обеждать не нужно. По умолчанию я верю людям до тех пор, пока они не докажут обратное о себе. Но понять где ошибка нужно как-то. Нет ни кода, ни данных. Фактически ошибку невозможно воспроизвести.

По PnLManager. Скачки в PnL могут быть только из-за нереализованной прибыли. Она основывается на рыночных ценах. Пока не могу понять где же ошибка. Можно в лог еще добавить 2 параметра? PnLManager (PnL и RealizedPnL). Чтобы точно удостоверится, что ошибка в PnL расчете.

devruss
devruss Author

04/04/2014 11:22:32 0 position, -3 PnL, 36039 Price, Бид 36037 42, Оффер 36042 27, PnL: -3, Realized PnL: -3
Avg Entry price 36,037 on -4 volume
04/04/2014 11:22:33 -4 position, -1535 PnL, 36039 Price, Бид 36037 42, Оффер 36042 27, PnL: -1535, Realized PnL: -3
04/04/2014 11:22:33 -4 position, -1535 PnL, 36039 Price, Бид 36037 38, Оффер 36042 27, PnL: -1535, Realized PnL: -3
...
04/04/2014 11:23:17 -4 position, -1535 PnL, 36038 Price, Бид 36038 5, Оффер 36038 1, PnL: -1535, Realized PnL: -3
04/04/2014 11:23:19 -4 position, -7 PnL, 36040 Price, Бид 36038 5, Оффер 36038 3, PnL: -7, Realized PnL: -3
04/04/2014 11:23:19 -4 position, -7 PnL, 36040 Price, Бид 36038 5, Оффер 36041 31, PnL: -7, Realized PnL: -3

Mikhail Sukhov
Mikhail Sukhov

devruss: ...

А что происходит между этими строчками?

devruss
devruss Author

абсолютно ничего. Может там внури PnLManager таймер какой-то срабатывает, что он пересчитывает позицию... но точно также себя ведут все спайки без исключения

Mikhail Sukhov
Mikhail Sukhov

devruss: абсолютно ничего.

Тогда надо в момент, когда произошел спайк, как-то вывести в лог состояние объекта Strategy.PnLManager. Он внутри себя имеет поля, и нужно добраться до всех внутренних полей. Проще было бы открыть его в Debug студии, и сделать скрин.

devruss
devruss Author

Это уже выше моих навыков программирования. Давай на неделе в skype спишемся, в реальном времени все сделаем

devruss
devruss Author

Ок, проблема была найдена и локализована. PnL Manager при открытии новой позиции, маркирует ее по последней закрытой сделке, а потом через 1 мин обновляет по текущим ценам.

SelfDeleted
SelfDeleted

devruss: Ок, проблема была найдена и локализована. PnL Manager при открытии новой позиции, маркирует ее по последней закрытой сделке, а потом через 1 мин обновляет по текущим ценам.

Привет! А можно чуть более подробное описание проблемы? И какое решение применили?

devruss
devruss Author

topic959:

devruss: Ок, проблема была найдена и локализована. PnL Manager при открытии новой позиции, маркирует ее по последней закрытой сделке, а потом через 1 мин обновляет по текущим ценам.

Привет! А можно чуть более подробное описание проблемы? И какое решение применили?

Описание проблемы было лучше всего видно на скриншотах: PnL Manager неверно рассчитывал нереализованный PnL - были spikes. Суть проблемы:

devruss: PnL Manager при открытии новой позиции, маркирует ее по последней закрытой сделке

Решение: PnL Manager при открытии новой позиции, маркирует ее по цене открытия сделки

devruss
devruss Author

devruss: Тиковая история, импортированная из рейтерса, S# 4.2.3.4 - при бэктестинге вылазят вот такие вот баги: http://gyazo.com/1fb882dd0a0df11e31ac31d1eaf4c0dd S# проводит сделки по несуществующим ценам. На версии 4.2.2.16 было все нормально

Также появилось ощущение, что на новой версии сильно возросло проскальзывание - проходит сигнал на вход/выход из позиции, а реальный execution проходит совсем по другим ценам

Ошибки с трейдами по несуществующим ценам остались: Тиковая история из рейтерса, заново импортированная http://gyazo.com/3efbdaba16f50d093c75f553437b29d1

devruss
devruss Author

еще скриншоты - объемы проходят по свечкам, но сделки все равно сильно мимо рынка http://gyazo.com/275e265c6aae6a33487ff4421cae1a45

devruss
devruss Author

По просьбе Михаила добавлю: все ордера "по-рынку", т.е. лимитки с далекой от рынка ценой... триггер на срабатываение ордера - какое-то событие, после чего выставляется ордер "по-рынку". Если надо выложить какие-нибудь логи - говорите что, выложу

Mikhail Sukhov
Mikhail Sukhov

Михаил уже в чате сказал - на графике не сделки, а заявки.

Требуется переводчик с русского на русский.

devruss
devruss Author

Михаил Сухов: Михаил уже в чате сказал - на графике не сделки, а заявки.

Требуется переводчик с русского на русский.

Переводчик с русского на русский все-таки уверен, что ранее было написано, что на графике именно сделки. Есть пруф: сверху заявки (выделена исполненная на графике заявка) - внизу реальный execution http://gyazo.com/a2e139b186c91958d62cd76842bb59a6

Mikhail Sukhov
Mikhail Sukhov
  1. Какой ТФ?
  2. Заявки как выставляются? Market Limit?
devruss
devruss Author

Михаил Сухов:

  1. Какой ТФ?
  2. Заявки как выставляются? Market Limit?
  1. ТФ: 1 мин, данные тиковые (пробовал на 1с тоже самое)
  2. this.CreateOrder(Sides.Sell,(decimal)(candle.ClosePrice - 50), tradeVolume); this.CreateOrder(Sides.Buy,(decimal)(candle.ClosePrice + 50), tradeVolume);
Mikhail Sukhov
Mikhail Sukhov

devruss: 2. this.CreateOrder(Sides.Sell,(decimal)(candle.ClosePrice - 50), tradeVolume); this.CreateOrder(Sides.Buy,(decimal)(candle.ClosePrice + 50), tradeVolume);

Тоесть заявки вне рынка? Скорее всего тут рассинхронизация в отрисовке. Тоесть заявка исполняется по цене, когда рынок дойдет и рисуется с запозданием.

Выведи в лог в обработчике NewMyTrades: время сделки, текущее время, цену сделки и цены в стакане (или последнюю тиковую сделку).

devruss
devruss Author

Михаил Сухов:

devruss: 2. this.CreateOrder(Sides.Sell,(decimal)(candle.ClosePrice - 50), tradeVolume); this.CreateOrder(Sides.Buy,(decimal)(candle.ClosePrice + 50), tradeVolume);

Тоесть заявки вне рынка? Скорее всего тут рассинхронизация в отрисовке. Тоесть заявка исполняется по цене, когда рынок дойдет и рисуется с запозданием.

Выведи в лог в обработчике NewMyTrades: время сделки, текущее время, цену сделки и цены в стакане (или последнюю тиковую сделку).

  • Естественно, лимитные заявки с далеким лимитом, эмулирующие заявки "по-рынку", будут вне рынка.
  • Рассинхрона в отрисовке нет, я проверял. Там иногда по ТАКИМ ценам проходит, каких не было и не будет
  • Пруф в виде лога сделаю чуть позже

Как ни странно, но уже на 10 мин свечках все ок, таких диких выбросов нет

Mikhail Sukhov
Mikhail Sukhov

devruss:

  • Естественно, лимитные заявки с далеким лимитом, эмулирующие заявки "по-рынку", будут вне рынка.

Я не знаю что у тебя за рынок, но на известных мне биржах логика устроена не так. Если ты хотел сделать маркет-заявки, то сделал ты их неправильно.

devruss:

  • Рассинхрона в отрисовке нет, я проверял. Там иногда по ТАКИМ ценам проходит, каких не было и не будет

Нужен лог, чтобы дальше анализировать проблему. Нет лога - нет предмета для дискуссий.

devruss
devruss Author

devruss: Если ты хотел сделать маркет-заявки, то сделал ты их неправильно.

  • Ок, расскажи мне тогда пожалуйста как правильно реализовывать заявки "по-рынку".

  • Вот лог. Но вначале картинка: http://gyazo.com/15e7d87fe5f1e5fb11e9a459345dff6b В данном примере робот умудрился купить по цене, которой не было еще 17 минут (!!!) - робот успел уже закрыть позицию раньше, чем рынок дошел до той цены, где был execution 12/18/2013 13:50:13 TEST - 12/18/2013 13:50:13 Actual execution: 3466 last price: 3466.25 TEST - 12/18/2013 13:50:13 Actual execution: 3468 last price: 3466.25 TEST - 12/18/2013 13:50:14 Actual execution: 3466 last price: 3466.25

Заявка была одна - покупка 4 контрактов "по рынку" 18.12.2013 13:50:13 4 3516.25 Buy Limit Done 18.12.2013 13:50:14

Mikhail Sukhov
Mikhail Sukhov
  1. Код вывода в лог.
  2. Почему только одна метка времени?
  3. В лог добавь направление заявки.
devruss
devruss Author

Михаил Сухов:

devruss: Если ты хотел сделать маркет-заявки, то сделал ты их неправильно.

  • Ок, расскажи мне тогда пожалуйста как правильно реализовывать заявки "по-рынку".

Код:


this.WhenNewMyTrades()
                .Do(TradeHandler)
                .Apply();


private void TradeHandler(IEnumerable<MyTrade> trades)
        {
            Debug.WriteLine("TEST - {0} {1} Actual execution: {2} last price: {3} {4} ", trades.Last().Trade.Time, trades.Last().Order.Direction, trades.Last().Trade.Price, lastPrice, lastPriceTime);
}

Последняя цена и время запонимаются в обработчике индикаторов внутри стратегии.

12/18/2013 13:50:13 TEST - 12/18/2013 13:50:13 Buy Actual execution: 3466.25 last price: 3466.25 12/18/2013 13:50:13 TEST - 12/18/2013 13:50:13 Buy Actual execution: 3467.75 last price: 3466.25 12/18/2013 13:50:13 TEST - 12/18/2013 13:50:14 Buy Actual execution: 3466.00 last price: 3466.25 12/18/2013 13:50:13 Avg Entry price 3,467 on 4 volume

TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.25 last price: 3465.75 12/18/2013 13:50:43 TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.00 last price: 3465.75 12/18/2013 13:50:43 TEST - 12/18/2013 13:50:43 Sell Actual execution: 3463.50 last price: 3465.75 12/18/2013 13:50:43Avg Closing price 3,464 on -4 volume

http://gyazo.com/42d05b7097693c9dfb61eac2f8a88fdf

Mikhail Sukhov
Mikhail Sukhov

devruss: ...


private void TradeHandler(IEnumerable<MyTrade> trades)
{
   Debug.WriteLine("TEST - {0} {1} Actual execution: {2} last price: {3} {4} ", trades.Last().Trade.Time, trades.Last().Order.Direction, trades.Last().Trade.Price, Security.LastTrade, CurrentTime);
}

devruss
devruss Author

Все равно execution просто жуть, причеи стабильно хреново исполняет по ценам вне рынка...


TEST - 12/18/2013 13:50:13 Buy Actual execution: 3466.25 last price: 12/18/2013 13:50:13 0 3466.25 1 12/18/2013 03:50:13 
TEST - 12/18/2013 13:50:13 Buy Actual execution: 3467.75 last price: 12/18/2013 13:50:13 0 3466.25 1 12/18/2013 03:50:13 
TEST - 12/18/2013 13:50:14 Buy Actual execution: 3466.25 last price: 12/18/2013 13:50:13 0 3466.25 1 12/18/2013 03:50:14 

TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.25 last price: 12/18/2013 13:50:43 0 3465.75 3 12/18/2013 03:50:43 
TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.00 last price: 12/18/2013 13:50:43 0 3465.75 3 12/18/2013 03:50:43 
TEST - 12/18/2013 13:50:43 Sell Actual execution: 3463.50 last price: 12/18/2013 13:50:43 0 3465.75 3 12/18/2013 03:50:43 

5 бэктестов - цены не меняются. Но таких цен нет ни в прошлом, ни в будущем в пределах 30 минут...

Mikhail Sukhov
Mikhail Sukhov

Это при тестировании на свечках? Если включить тестирование на тиках?

devruss
devruss Author

Михаил Сухов: Это при тестировании на свечках? Если включить тестирование на тиках?

все тоже самое. вот еще пример (уже на тиках):


TEST - 12/19/2013 12:38:22 Sell Actual execution: 3493.00 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
TEST - 12/19/2013 12:38:22 Sell Actual execution: 3492.50 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
TEST - 12/19/2013 12:38:22 Sell Actual execution: 3492.25 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
TEST - 12/19/2013 12:38:22 Sell Actual execution: 3492.00 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 

devruss
devruss Author

Версия 4.2.25, все тот же адский расколбас с трейдами абсолютно вне рынка На этот раз ETF - XLF, из 1сек данных S# делает минутные свечки, объемы там огромные, так что с ликвидностью все ок.

http://gyazo.com/75cc08306defa2d72e50516c97f68b3d

Сделки идут сильно мимо рынка

Mikhail Sukhov
Mikhail Sukhov

Как воспроизвести?

devruss
devruss Author

данные тебе выслал. Воспроизводимость: импортни данные в Гидру и запусти SampleHistoryTesting, либо любую стратегию и посмотри где реально проходит execution. все как 2 месяца назад.

Какая-то засада с импортом csv... R ту же самую стратегию обрабатывает ок, так что данные точно не битые

devruss
devruss Author

Пока делаю пример, решил прогнать на данных IQfeed (с трудом скормил нужный тип биржи, через копирование Nyse и изменения имени - про это соседняя тема):

  • данные 1 мин
  • тестирование тоже на 1 мин

http://gyazo.com/1f1ebcf3dcaa352cf10844053faf34fc

Проблема локализовалась: Если запускать тест на большом объеме, то при исполнении заявки S# смотрит на текущий объем свечи, исполняет объем свечи по цене закрытия, а вот оставшийся (объем заявки - объем свечи) он исполняет по какой-то рандомной цене...

Понятно откуда взялась проблема, вроде как по какой цене исполнить очень большой объем - но метод решения путем исполнения вне рынка - неправильный. На мой взгляд нужно сделать какой-нибудь режим тестирования, при котором будет считаться мгновенное исполнение всего объема по цене закрытия текущей или открытия следующей свечи (если нет стаканов). MatchOnTouch = true проблему не решает, картинка остается той же.

Update: Уменьшил объем до мизерного - практически всё исполнение вне рынка пропало, кроме нескольких мест

Мне кажется, что при тестировании на свечках, сделать исполнение по цене закрытия или открытия следующей - это самый правильный вариант. На сегодняшний день так себя ведут большинсто квантовых пакетов (quantstrat в R) например. Данный подход решил бы все проблемы. А проскальзывания надо либо на тиках + стаканы смотреть, либо просто закладывать дельту.

Mikhail Sukhov
Mikhail Sukhov

На SampleHistory теория воспроизводится? Какие изменения нужно внести?