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

NinjaTrader 8 Ищу простую Delta

Scrittore

New Member
NinjaTrader
Нужна дельта без наворотов, чтобы можно было вставить в роботы. Пробовал Sim22 это ужас, даже вызывая её через другой индикатор получаются разные цифры. Можете что-нибудь посоветовать? Неужели для платформы не существует адекватного стандартного индикатора? Желательно подешевле, а то и бесплатно.
Или может подскажете как считать? Я вижу это как функцию которая возвращает по каждому тику объём с пометкой бид или аск. Далее вычетаем из времени закрытия открытие, за этот промежуток принимаем все тики в массив и сортируем через цикл. Так я на mql делал. Есть ли такая фунеция тут?
 
Здравствуйте. Предлагаю открыть встроенный индикатор BuySellVolume.
Поменять несколько строчек кода, чтобы он показывал только дельту.
Но он при онлайн подсчете пропускает первый тик на открытии бара. Но когда бар закроется - пропущенные тики добавляются, там все норм.
Если это для вас критично, то там нужно будет еще кое что поменять.. Пробуйте.

UPD. Можете в нем еще добавить несколько условий при рассчете дельты. Я условия брал с Sim22 там хорошо они рассмотрены.
 
Последнее редактирование:
Здравствуйте. Предлагаю открыть встроенный индикатор BuySellVolume.
Поменять несколько строчек кода, чтобы он показывал только дельту.
Но он при онлайн подсчете пропускает первый тик на открытии бара. Но когда бар закроется - пропущенные тики добавляются, там все норм.
Если это для вас критично, то там нужно будет еще кое что поменять.. Пробуйте.

UPD. Можете в нем еще добавить несколько условий при рассчете дельты. Я условия брал с Sim22 там хорошо они рассмотрены.
Спасибо, вчера ковырял, это и есть дельта. Только какая-то странная.
А что с первым тиком? Вы разбирались как так выходит что он теряется?
И что вы имеете ввиду про добавление условий с Sim22. О чём эти условия? Кроме первого тика вроде всё нормально.
 
Спасибо, вчера ковырял, это и есть дельта. Только какая-то странная.
А что с первым тиком? Вы разбирались как так выходит что он теряется?
И что вы имеете ввиду про добавление условий с Sim22. О чём эти условия? Кроме первого тика вроде всё нормально.
Она не странная. Просто рисует отдельно продажи и отдельно покупки на одном баре. А Покупки строит так = продажи + покупки = обьем.
Поэтому я написал поменять несколько строчек. Добавьте условия чего больше - то и рисовать.
Ну и если вы рисуете что то одно, то второе нужно ресетить.
Также я писал про условия рассчета дельты.. вот эти if(e.Price >= e.Ask). В этом индикаторе их только два. Но этого недостаточно. Они не описывают все возможные варианты. См. Sim22, вот эти .. if(A > B) { if (L0 >= A) {

Про потерю первого тика понял как описано здесь на рисунках. NinjaTrader 8
В индикаторе вы видите рассчет для нулевого бара и отдельно для предыдущего [1]
Так вот, я передвинул рассчеты нулевого бара с OnBarUpdate в другое место и тики уже не теряются.

PS. А С вас, хотя бы скрин, работы готового индюка :Acute:
 
Последнее редактирование:
Да индикатор я ещё вчера запилил. Но вот с этим тиком так и не понял пока ничего, почему он теряется и как его вернуть.
PS И до понедельника похоже не пойму. Такой косяк нужно в реал тайм смотреть, а тут выходные.
 

Вложения

  • DeltaTest.cs
    4,5 КБ · Просмотры: 21
Последнее редактирование:
Вам нужно почитать мануал по C# про коллекции, а именно про Словари. Где данные хранятся по Ключу и Значению. Ключём будет Цена, а Значением Объем. Дальше в Методе protected override void OnMarketData(MarketDataEventArgs e) проверяете есть ли такой Ключ, если нет создаёте его, и добавляете данные, если есть, то добавляете данные. Если цена Аск +Объем если Бид -Объем. Потом получаете сумму Значений по всем Ключам, и присваеваете ее переменной, вот Вам и Дельта. На первом тике нового бара очищает коллекцию и присваивает переменной Дельты 0.
 
А можете подсказать где у меня может быть ошибка. Я в стратегии сослался на кастомный индикатор, вот эту самую дельту, что я тут выложил. И попробовал принтовать значение дельты. На барах которые уже загружены на графике, он нормально считает и выдаёт правильные значения. А на барах которые формируются онлайн он по всем им выдаёт 0. Такое ощущение что данные куда-то там не сохраняются... ну вобщем вы понимаете.
Сам индикатор работает адекватно, и столбики и в датабоксе потом онлайн бары нормально в истории сохраняют информацию, а вот через стратегию 0 и всё.
 
Вам нужно почитать мануал по C# про коллекции, а именно про Словари. Где данные хранятся по Ключу и Значению. Ключём будет Цена, а Значением Объем. Дальше в Методе protected override void OnMarketData(MarketDataEventArgs e) проверяете есть ли такой Ключ, если нет создаёте его, и добавляете данные, если есть, то добавляете данные. Если цена Аск +Объем если Бид -Объем. Потом получаете сумму Значений по всем Ключам, и присваеваете ее переменной, вот Вам и Дельта. На первом тике нового бара очищает коллекцию и присваивает переменной Дельты 0.
Для меня пока это ещё сложно, я всего неделю как программировать начал. Стратегию ручную разработал, но входы достаточно частые, постоянно у монитора не просидишь, пришлось в программирование лезть. Я совершенно не понимаю как узнать какой мне нужен Ключ чтобы его добавить, если он потерян и как ключом может выступать цена, если она может повторятся.
 
Ок. Дельта готова. Первый тик я вернул. Кто хочет можете поискать косяк. Но прошу помочь с тем почему при вызове через стратегию этого индикатора, для вновь сформированных баров отдаёт нулевое значение?
 

Вложения

  • EasyDelta.cs
    5,1 КБ · Просмотры: 63
А можете подсказать где у меня может быть ошибка. Я в стратегии сослался на кастомный индикатор, вот эту самую дельту, что я тут выложил. И попробовал принтовать значение дельты. На барах которые уже загружены на графике, он нормально считает и выдаёт правильные значения. А на барах которые формируются онлайн он по всем им выдаёт 0. Такое ощущение что данные куда-то там не сохраняются... ну вобщем вы понимаете.
Сам индикатор работает адекватно, и столбики и в датабоксе потом онлайн бары нормально в истории сохраняют информацию, а вот через стратегию 0 и всё.
Для исторических баров нужно создавать историческую базу данных. На каждом первом тике бара записывать в Лист данные прошлого бара, и потом по ID бара вытягивать эти данные.
 
Я совершенно не понимаю как узнать какой мне нужен Ключ чтобы его добавить, если он потерян и как ключом может выступать цена, если она может повторятся.
Она не будет повторяться. Если объяснить образно то Коллекция это как таблица Эксель, в которой два Столбца. Первый Ключ второй Значение. У вас есть цена, вы смотрите в Столбец Ключ, есть там такая цена, если ее нет вы записываете цену а напротив нее в столбец Значение записываете объем. Дальше цена пошла делает тоже, самое. Потом цена вернулась, вы посмотрели Столбец Ключ и увидели что такая цена есть, тогда по ней вы добавили новое Значение к тому что было раньше.
 
Для исторических баров нужно создавать историческую базу данных. На каждом первом тике бара записывать в Лист данные прошлого бара, и потом по ID бара вытягивать эти данные.
Попробую с этим разобраться, но встанет вопрос как мне из листа созданного в другом файле (индикаторе) вытащить данные в стратегию.
И такой вопрос. Данные в датабоксе отображаются корректно все. Только при обращении из робота они нулевые. Т.е. датабокс из какого-то массива ведь берёт эти данные, он существует. Можно как-то получить доступ из робота к этому массиву? Так кажется проще будет.
 
Попробую с этим разобраться, но встанет вопрос как мне из листа созданного в другом файле (индикаторе) вытащить данные в стратегию.
И такой вопрос. Данные в датабоксе отображаются корректно все. Только при обращении из робота они нулевые. Т.е. датабокс из какого-то массива ведь берёт эти данные, он существует. Можно как-то получить доступ из робота к этому массиву? Так кажется проще будет.
Все нужно писать в стратегии. Отдельно часть индикатора с данными отдельно торговый модуль, который будет открывать ордера по сигналам. Но я думаю вы это не потянет, если нет минимальных знаний по С#.
 
Все нужно писать в стратегии. Отдельно часть индикатора с данными отдельно торговый модуль, который будет открывать ордера по сигналам. Но я думаю вы это не потянет, если нет минимальных знаний по С#.
Пробовал. Там вобще третьи цифры индикатор выдаёт. Ну ничего, пока на истории фурычит, для доработки стратегии мне хватит. Дальше буду думать как там изучить C#.
Long.png
Очередной вопрос возник. В ниндзе склеенные фьючерсы есть? По контракту тестировать/оптимизировать как-то не очень.
 
Склеенные есть, но тестировать как раз рекомендуется на отдельных контрактах, так как на них и производится торговля.
 
И склеивать желательно без сдвига, то есть что бы были гепы на роле. Этот сдвиг такая фигня )))
 
Вам нужно почитать мануал по C# про коллекции, а именно про Словари. Где данные хранятся по Ключу и Значению. Ключём будет Цена, а Значением Объем. Дальше в Методе protected override void OnMarketData(MarketDataEventArgs e) проверяете есть ли такой Ключ, если нет создаёте его, и добавляете данные, если есть, то добавляете данные. Если цена Аск +Объем если Бид -Объем. Потом получаете сумму Значений по всем Ключам, и присваеваете ее переменной, вот Вам и Дельта. На первом тике нового бара очищает коллекцию и присваивает переменной Дельты 0.

Здравствуйте. Спасибо вам большое за индикатор Delta_Volume. Там я как раз ознакомился на практике со словарями.
Переделал его под себя, чтобы показывал volume poc баров.
Есть пару вопросов.
Зачем ограничили подсчет обьемов и дельты только для 60 сек ТФ? Вопрос снимается, если вас просто об этом попросили клиенты.
Дальше, если помню правильно, ставил тф на графике 300 сек, 3600 сек, возникала ошибка недостаточного кол-ва баров на графике. условие <= BarsRequiredToPlot тут помогло.

И вопрос касаемо текущей ветки.
словари прекрасно помогают делать вычисления по обьемам на каждой отдельно цене бара.
Но если нас интересует весь бар, вертикальный обьем, дельта. Есть ли смысл высчитывать дельту на каждой конкретно цене и суммировать ее.
Ведь это легко делается, просто суммируя дельту бара, по всем тикам. без словарей.
Спасибо..
 
Последнее редактирование:
Назад
Верх Низ