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

NTDirect.dll bid, ask и last

Orinoko

New Member
NinjaTrader
Всем привет. Кто-нибудь может объяснить, как работает механизм передачи данных в ниндзю 8 через соединение external data feed посредством NTDirect.dll?

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

код примерно такой (весь не выкладываю)

namespace NT7ExternalDataFeed

{

class Program

{

// real-time data import

[DllImport("NTDirect.dll")]

public static extern int Bid(string instrument, double price, int size);

[DllImport("NTDirect.dll")]

public static extern int Last(string instrument, double price, int size);

[DllImport("NTDirect.dll")]

public static extern int Ask(string instrument, double price, int size);

public static string instrument = "TEST";


while (true)

{
var pr = 50.0;
var direction = 1;

if (direction == 1)
direction = -1;
else
direction = 1;

Random rnd = new Random();


var r = rnd.Next(1, 10);

var prSummer = rnd.NextDouble() * direction + pr;

var b = Bid(instrument, prSummer, r);

Console.WriteLine($"{b} Bid({instrument}, {prSummer}, {r}");


r = rnd.Next(1, 10);

prSummer = rnd.NextDouble() * direction + pr;

var b1 = Bid(instrument, prSummer, r);

Console.WriteLine($"{b1} Bid({instrument}, {prSummer}, {r}");


r = rnd.Next(1, 10);

prSummer = rnd.NextDouble() * direction + pr;

var b3 = Bid(instrument, prSummer, r);

Console.WriteLine($"{b3} Bid({instrument}, {prSummer}, {r}");


r = rnd.Next(1, 10);

prSummer = rnd.NextDouble() * direction + pr;

var l = Last(instrument, prSummer, r);

Console.WriteLine($"{l} Last({instrument}, {prSummer}, {r}");


r = rnd.Next(1, 10);

prSummer = rnd.NextDouble() * direction + pr;

var a = Ask(instrument, prSummer, r);

Console.WriteLine($"{a} Ask({instrument}, {prSummer}, {r}");


r = rnd.Next(1, 10);

prSummer = rnd.NextDouble() * direction + pr;

a = Ask(instrument, prSummer, r);

Console.WriteLine($"{a} Ask({instrument}, {prSummer}, {r}");


r = rnd.Next(1, 10);

prSummer = rnd.NextDouble() * direction + pr;

l = Last(instrument, prSummer, r);

Console.WriteLine($"{l} Last({instrument}, {prSummer}, {r}");


Thread.Sleep(500);

}

}

}

Nindja прекрасно все это понимает и рисует график с бидами, асками (кластеры)

Но! если я передаю данные из квика примерно вот так (данные идут смешанно - биды, аски, ласт):

Ask(TEST, 51,26, 1)
Last(TEST, 51,26, 1)
Bid(TEST, 51,27, 1)
Last(TEST, 51,26, 1)
Ask(TEST, 51,26, 39)
Last(TEST, 51,27, 39)
Bid (TEST, 51,27, 5)
Last(TEST, 51,26, 5)
Bid (TEST, 51,27, 1)
Last(TEST, 51,27, 1)
Bid(TEST, 51,27, 4)
Bid(TEST, 51,28, 11)
Bid(TEST, 51,28, 2)
Ask(TEST, 51,26, 1)

То ниндзя рисует цену бары правильно, цена меняется корректно. но суммируются только биды - аски все по 0. В примере с рандомными данными все было хорошо - и бид и аск корректно воспринимался и суммировался.

Как работает механизм передачи котировок в Ниндзю? Я что-то не понимаю, но что - непонимаю :)
Пытался и суммировать в last объемы bid и ask, и просто volume передавать из квика и что только не пробовал - все равно Ниндзя ловит только бид
 
Назад
Верх Низ