Избранное трейдера dimaz07
Анализ TWIME против PLAZA2
Все использованные далее замеры проведены 7 июня 2016 года.
Рис 1.
На рисунке 1 раунд трип заявки на выставление (микросекунды): серым — TWIME, желтым – PLAZA2, синим – фикс срочного рынка.
Видно, что клиенты подключены к одному и тому же пром-серверу, т.к. графики сильно коррелируют.
Средний раунд трип в этот день: фикс 989 мкс, PLAZA2 842 мкс, TWIME 841 мкс
В данной ситуации TWIME на одну-две заявки опережает PLAZA2 по скорости выставления, а PLAZA2 опережает фикс. Видно так же, что TWIME менее стабилен, чем фикс и PLAZA2. Из-за этого среднее время раунд трипа у TWIME и PLAZA2 почти одинаковое.
Такими же обнадеживающими были наши замеры TWIME в первые две недели его работы, на основе которых мы стали рекомендовать его клиентам.
Но, как выяснилось теперь, не всегда графики коррелируют. Посмотрите на следующий рисунок.
Прошу дать ссылку на адекватный форум или другой ресурс по программированию на QLUA.
Интересуют вопросы передачи данных через стек и многопоточность в QLUA.
Как оказалось, есть много подводных камней.
Кто в теме, пожалуйста, укажите на возможные ошибки в коде, а главное — ПОЧЕМУ НЕ РАБОТАЕТ File.WriteAllLines(@«File.txt», array);
Буду очень благодарен.
-------------------------------------------
Скрипт QLUA:
require («InQuikDll»);
-----------------------------------------------------
Код на C#
using System.IO;
[DllExport(«luaopen_InQuikDll», CallingConvention = CallingConvention.Cdecl)]
public static int InQuikDllStartUp(IntPtr L)
{
Lua.lua_pushinteger(L, 0);
Lua.lua_setfield(L, -10002, "_runServer");
//Вставляет новый экземпляр функции C в стек
Lua.lua_pushcclosure(L, forLua_OnInit, 0);
Lua.lua_setfield(L, -10002, «OnInit»);
Lua.lua_pushcclosure(L, forLua_OnStop, 0);
Lua.lua_setfield(L, -10002, «OnStop»);
Lua.lua_pushcclosure(L, forLua_OnClose, 0);
Lua.lua_setfield(L, -10002, «OnClose»);
Lua.lua_pushcclosure(L, forLua_OnQuote, 0);
Lua.lua_setfield(L, -10002, «OnQuote»);
Lua.lua_pushcclosure(L, forLua_OnConnected, 0);
Lua.lua_setfield(L, -10002, «OnConnected»);
Lua.lua_pushcclosure(L, forLua_Main, 0);
Lua.lua_setfield(L, -10002, «main»);
Здесь приведен перевод статьи www.quantinsti.com/blog/algorithmic-trading-system-architecture/
Алгоритмическая автоматизированная торговля или алгоритмическая торговля в течение нескольких последних лет находится в центре внимания торгового мира. Доля объемов, относящихся к этой форме торговли, растет все это время. В результате, она стала высоко конкурентным рынком, в значительной степени зависящим от технологий. Далее, базовая архитектура претерпела значительные изменения за последнее десятилетие и этот процесс продолжается. Сегодня необходимо внедрять технологические новшества для того, чтобы конкурировать в мире алгоритмической торговли, что делает его местом большой концентрации достижений в области компьютерных и сетевых технологий.
Традиционная архитектура
Любая торговая система — концептуально — это не более, чем вычислительный блок, который взаимодействует с
Для сравнения языков MQL5 и QLUA мы написали несколько тестов, которые замеряют скорость выполнения базовых операций.
В тестах использовался компьютер с Windows 7 Professional 64 bit, MetaTrader 5 build 1340 и QUIK версии 7.2.0.45.
Результаты представлены в таблице, где все значения представлены в миллисекундах (чем меньше время, тем лучше):
Название MQL5 QLUA Преимущество MQL5 TestFloat 3 969 273 391 69 раз TestArrays 375 230 768 615 раз TestFibo 1 125 61 110 55 раз TestPiCalculated 2 328 183 812 79 раз TestQuickSort 2 031 211 279 104 раза TestAckermann 828 64 541 78 раз
Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python.
Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между временными сериями (в данном случае возьмем в качестве сигнала взаимный фонд XLF из финансового сектора, сдвинутый по времени на 1 день назад), а нашей целью будет фьючерс S&P500 в форме CFD. Будем входить в длинную позицию по этой бумаге при нулевой вероятности приращения. Логически нулевая вероятность ни о чем не говорит, другими словами, будем покупать возврат к среднему.
1. Получение данных
Y = read_mongo(dbase, "S&P5001440") X = read_mongo(dbase, syms[s]).shift() #готовим набор данных res = pd.concat([X.CLOSE, Y.CLOSE], axis=1, join_axes=[X.index]).pct_change().dropna() res.columns = ['X', 'Y']