Избранное трейдера v3Rtex
Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:
8=FIX.4.4;9=78;35=A;49=FG;56=tgFhcfx901U05;34=1;52=20160212-11:42:51.812;98=0;108=3000;141=Y;10=047;
Если быть внимательным, то мы увидим, что кол-во символов в строке у нас 100, а в заголовке сообщения мы передаем, что 78 (9 = 78). По правилам протокола FIX, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:
С длиной сообщения разобрались. Теперь про разделитель. Пока в моем скрине это ";". В документациях западных написано что это символ SOH. Чтобы однозначно ответить на этот вопрос, я запустил прилагаемого клиента биржи и сниффером стал перехватывать сообщения между клиентом и биржей. Кстати, программа ведет логи, и их общение выглядит так (зеленое — передача запроса на биржу, красное — ответ от биржи)://Получаем ip сервера
IPAddress ipAddr = IPAddress.Parse(server);
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
//Создаем заголовк
HeaderMessage msHeader = new HeaderMessage
{
BeginString = «FIX.4.4»,
MsgType = «A», //Тип сообщения на установку сессии
SenderCompID = "",
TargetCompID = «FG»,
MsgSeqNum = 1
};
//Создаем сообщение на подключение onLogon
LogonMessage msLogon = new LogonMessage
{
EncryptMethod = 0,
HeartBtInt = 3000,
ResetSeqNumFlag = true
};//Вычисляем длину сообщения
msHeader.BodyLength = msHeader.GetHeaderSize() + msLogon.GetMessageSize();
//Создаем концовку сообщения
TrailerMessage msTrailer = new TrailerMessage(msHeader.ToString() + msLogon.ToString());//Формируем полное готовое сообщение
string fullMessage = msHeader.ToString() + msLogon.ToString() + msTrailer.ToString();
Console.WriteLine(«Сообщение для отправки {0}»,fullMessage);//Создаем сокет для подключения
sSender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//Подключаемся
sSender.Connect(ipEndPoint);
Console.WriteLine(«Сокет соединился с {0} », sSender.RemoteEndPoint.ToString());
byte[] msg = Encoding.UTF8.GetBytes(fullMessage);
//Отправляем сообщение
int bytesSent = sSender.Send(msg);
Console.WriteLine(«Отправил {0} байт», bytesSent.ToString());
//Получаем ответ от сервера
byte[] bytes = new byte[1024];
int bytesRec = 0;
bytesRec = sSender.Receive(bytes);
Console.WriteLine(«Ответ от сервера: {0}», Encoding.UTF8.GetString(bytes, 0, bytesRec));
Это будет серия статей о том, как сделать подключение к Плаза 2 CGate своими руками.
Первая часть состоит из требований к программисту. И вводных данных.
А также закажем тестовое подключение на бирже. Пригодиться в следующей части.
Погнали!
Окончание. Начало здесь.
В соответствии со смоделированным спредом, мы предполагаем покупать (продавать) пять контрактов по одному активу, одновременно продавая (покупая) количество, равное [β×5], где [x] — целая часть х, по другому активу, так как число контрактов должно быть целым.
Мы моделируем торговлю с 500 000$ и наше гарантийное обеспечение будет примерно равным 20%. Мы не используем какую-либо технику манименеджмента, ГО 20% будет только в начале периода бэктестинга и будет снижаться по мере получения прибыли.
Итоговые результаты анализируются с помощью распространенных индикаторов, применяемых на практике: годовой коэффициент Шарпа, годовая доходность, максимальная просадка, доли дней с положительной и отрицательной доходностью, доля дней без сделок, коэффициент отношения среднего значения (в долларах) дней с положительной доходностью к дням с отрицательной доходностью, корреляция портфеля с индексом S&P500. Во всех случаях мы указываем чистый результат, принимая во внимание 3$ комиссии и один тик проскальзывания на сделку.
Скачиваем со страницы Конкурса «Лучший частный инвестор 2015» требуемый для визуализации файл сделок (пример). Распаковываем архив, файл сделок переименовываем в Lchi2015.csv и копируем его в подкаталог Lchi2015 рабочего Quik.
На график инструмента добавляем индикатор Lchi2015.
Метки сделок нанесены!
Примечания:
1. В каталоге LuaIndicators рабочего Quik должен быть файл Lchi2015.lua.
2. Имя файла со сделками, код инструмента и каталог расположения могут быть перенастроены в параметрах индикатора.
UPD1 (19.09.2015 22.50): Индикатор корректно работает пока только на 1-минутном графике. Исправлю.
UPD2 (20.09.2015 06.40): Показ на бóльших тайм-фреймах подключен. Но способ подключения таков, что выводит только крайнюю сделку из набора этого тайм-фрейма. Продумаю, как исправить.