Избранное трейдера aka
Однажды попали в яму, вырытую охотниками Волк, Медведь и Олень. Пробовали, пытались – не выбраться никак. Сидели, сидели – никто не приходит их вытаскивать. Проголодались. Волк говорит: — Надо кого-то съесть. Медведь спросил: — А кого? Решили голосовать. Большинством голосов приняли решение съесть Оленя. Олень опечалился и говорит: — Братцы! У меня есть последняя просьба. Отец мне говорил, что у меня на задней ноге от рождения надпись есть. Я, как ни вертелся, сам прочитать не могу. А попросить кого-то стеснялся всё время. Хотелось бы хоть перед смертью узнать, что же там написано. Волк и Медведь пошли посмотреть, исполнить последнюю просьбу. Как только они зашли сзади, Олень ударил их двумя задними копытами, оттолкнулся от них и выпрыгнул из ямы. Волка убило насмерть, а Медведю проломило грудь. Лежит Медведь весь в крови чуть живой. Вот-вот умрет. И говорит: — Я-то куда полез?! Я и читать-то не умею!!!
Для закрепления в собственной памяти составил анализ по колл-ратио спреду по СИ с экспирацией 16-11-2017
Профиль исходный:
При формировании
с 19-10-17 22:57:08
по 20-10-17 10:10:39
Цена Си 57890 на закрытии 19-10-2017.
Куплено: Колл-58000 11 шт по 615
Продано: Колл-60250 1 шт по 107
Колл-60500 103 шт по 95
мин. доход 3,1 тыс
макс.доход 30,3 тыс (при закрытии на 60500)
График Си за последние дни
Settings= { Name = "Piton", N = 100, legend = "price2", line = { { Name = "Sint", Color = RGB(0, 132, 0), Type = TYPE_LINE, Width = 1 } } } function Init() return 1 end Candles = {}; function OnCalculate(index) local numCandles = getNumCandles(Settings.legend); if index <= Settings.N or numCandles <= Settings.N then return nil; end Candles, n, _ = getCandlesByIndex(Settings.legend, 0, index - Settings.N, Settings.N); if n ~= Settings.N then return nil; end -- Предварительный расчет sum1, sum2, sum3 = advancePaynemt(index); -- расчет коэффициента корреляции Пирсона r = sum3/math.sqrt(sum1*sum2); return r; end -- Предварительный расчет ---------------------------------------- function advancePaynemt(index) local sum1 = 0; local sum2 = 0; local sum3 = 0; local j = 0; -- Вычислить среднее арифметическое for i=index - Settings.N + 1, index, 1 do sum1 = sum1 + C(i); sum2 = sum2 + Candles[j].close; j = j + 1; end aver1 = sum1/Settings.N; aver2 = sum2/Settings.N; -- Вычислить сумму квадратов отклонений sum1 = 0; sum2 = 0; j = 0; for i=index - Settings.N+1, index, 1 do sum1 = sum1 + math.pow(C(i) - aver1, 2); sum2 = sum2 + math.pow(Candles[j].close - aver2, 2); j = j + 1; end -- Вычислить сумму произведений разности j=0; for i=index - Settings.N+1, index, 1 do sum3 = sum3 + (aver1 - C(i))*(aver2 - Candles[j].close); j = j + 1; end return sum1, sum2, sum3; endКак запустить и настроить:
В этой статье мы рассмотрим, как правильно работать с историей цен в связке PostgreSQL и Python. Разберём, как хранить цены и ускорить их получение в Python.
Дополнительно приложен блокнот на IPython с исходным кодом и измерениями.
При переходе на Python я был вдохновлен удобством языка и огромным количеством готовых пакетов. Писать было легко и удобно, а работало все быстро. Но всё омрачало катастрофически медленное получение большого массива цен из базы данных (БД) в Python.
В статье показаны примеры для PostgreSQL, но материал будет полезен для любой БД, включая MySQL, при работе в связке с Python.
Мы будем работать с пакетами psycopg2 и numpy.
– Привет! В предыдущий раз, ты рассказывал про дата-сервис, про отдельный слой доступа к данным. Расскажи теперь про сами сущности и репозитории. При помощь чего ты вытягиваешь данные из таблиц?
– Ок. Если необходимо сохранять сделки и статистику, или откуда-то брать исторические котировки для тестов, то неплохо использовать БД. Но, как с ней общаться? Есть несколько способов. В C#, есть например традиционный ADO.NET, но речь пойдёт не о нём. В прошлый раз мы отделили работу с БД от бизнес-логики, это уже очень здорово, но можно пойти дальше! Есть способ общаться с самой БД на достаточно абстрактном уровне, инкапсулируя детали формирования самих запросов. Такой способ лучше вписывается в концепцию объектно-ориентированного проектирования, и называется он ORM (object relation mapping).
– Хм, я что-то слышал про ORM. У меня сложилось неоднозначное ощущение, вроде, есть целое сообщество, кто против них (OrmHate), и считает это антипаттерном. Все эти дополнительные уровни абстракции, и вообще, они наверно дико тормозные?