O
Orinoko
New Member
NinjaTrader
- #1
Всем привет. Кто-нибудь может объяснить, как работает механизм передачи данных в ниндзю 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 передавать из квика и что только не пробовал - все равно Ниндзя ловит только бид
Я нашел пример, как можно отправлять данные в 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 передавать из квика и что только не пробовал - все равно Ниндзя ловит только бид