Блог им. Replikant_mih

Математические способности и алгоритмическая торговля.

 Для одной из стратегий понадобилось рисовать прямые линии на графике. Вспомнил формулу прямой, а вот над тем, как по координатам двух точек эту формулу воссоздать – пришлось основательно повозиться. Сначала гуглил – но там как-то всё сложно – слишком много формул для простой задачи)), пришлось самому на листке в клетку рисовать и выводить формулу. Как вы поняли – я не на «ты» с математикой. После этой части текста какая-то часть алго-трейдеров подумает «чувак, даже не пытайся зарабатывать в алго-трейдинге, даже нам зубрам математики, статистики, теории вероятностей, машинного обучения это делать не легко» (интересно, какова доля алго-трейдеров, которые так подумали?).

На самом деле мне самому интересно, насколько далеко я смогу зайти по результатам с таким знания в математике. Есть мысли проапгрейдить знания, но это не приоритетная задача, тем более очень далеко в этой области я зайти не смогу. А пока пользуюсь универсальным аппаратом логического мышления. Как это ни странно, этого вполне хватает в той профессиональной области, в которой я на данном этапе работаю full-time и которая по уровню дохода для меня пока является основной, и которая так же связана в т.ч. с анализом данных и прочей аналитикой.

И хотя я практически стабильно испытываю той или иной степени тяжести ощущение неполноценности, читая написанные математическим языком посты и комментарии, тем не менее имеющийся опыт решения различного рода аналитических задач имеющимся инструментарием говорит о том, что и с данной предметной областью всё будет ок. тем более у меня повышенная мотивация на результат имеется, а она делает из меня буквально другого человека. Ну и кстати в ряде ситуаций когда ты как ребёнок слушаешь с открытым ртом кажущиеся умными рассуждения с использованием сложных непонятных терминов, когда ты открываешь рот с непроизвольным «вау!» — в ряде таких ситуаций, когда ты начинаешь вникать, начинаешь спрашивать а что тот или иной термин значит — практически всегда ты понимаешь, что эффект «вау!» был в большей степени из-за непонятного языка, и когда ты врубился в терминологию — ты понимаешь, что тут нет ничего сложного, более того часто ты сразу же можешь поддержать беседу и даже аргументированно поспорить по теме.

В общем это дополнительный челлендж для меня, а подобные вызовы меня только раззадривают).

И да, это очередной «теоретический» пост, сорри, чем богаты на данном этапе).

★5
40 комментариев
Вполне практический пост:)
avatar
Sergey Pavlov, Видимо, расту над собой))
avatar
Sergey Pavlov, сорри, от поста пользы ноль.
avatar
vito2000, Но хотя бы как теоретический прокатит?)))
avatar
vito2000, для читателя ноль, да, но тут на смартлабе  99% постов приносят пользу лишь их авторам:) так что это из другой оперы немного:)
avatar
Sergey Pavlov, Аа, я понял)) — практический не в плане, что от него какой-то смысл для читателя, а в плане, что я уже перешел от теоретизирования к написанию стратегий)))
avatar
Replikant_mih, смысл для читателя это дело читателя) а пост вполне практичный, хоть и не по трейдингу. Правда тут по трейдингу постов днем с огнем…
avatar
Я не понял, что у Вас там за формула прямой, по идее, прямую можно представлять как линию, проведенную через две точки, больше ничего не надо, что же касается Ваших шансов, то, думаю, что они более чем реальны. Вопреки распространенному стереотипу, математика программисту нужна только в чисто прикладном аспекте, математика к программированию(к умению программировать) имеет отношение не больше чем лингвистика. Программирование — это инженерная отрасль.
Да и вообще, основная сложность в программировании обычно проявляется в вопросах проектирования, вопросах преодоления растущей сложности системы, и ее дальнейшей поддержки и расширяемости, вот тут наступает реальный абзац:) А «формулы» нахер никому не вперлись, они в книжках есть, всегда можно посмотреть:) 
avatar

sortarray sortarray, По поводу прямой: ну формула вида y = kx + b. Ну вот по двум точкам эти k и b и нужно вывести, чтобы иметь возможность и третью точку и десятую нарисовать и определить конкретная точка она выше или ниже этой линии и т.д.

По поводу математики — нужность математики в алго-трейдинге больше ценится не в привязке к кодингу, а в привязке к рисёчу, к выявлению законмоерностей, построению моделей и т.д.

 

avatar
Replikant_mih, 
По поводу прямой: ну формула вида y = kx + b. Ну вот по двум точкам эти k и b и нужно вывести, чтобы иметь возможность и третью точку и десятую нарисовать и определить конкретная точка она выше или ниже этой линии и т.д.

Возможно там что-то у вас специфическое, но подозреваю, что Вам надо отделить данные от графического представления этих данных. Местоположение точки должно определяться по данным, а отрисовкой должен заниматься объект, который ответственен за отрисовку. Вы должны выбрать такое представление данных, такие структуры, по которым Вам удобно будет это все вычислять(независимо от графического представления). Как то так.
avatar
sortarray sortarray, Спасибо. Да вроде отделяю), нет ничего специфичного, ладно, прорвёмся)
avatar
Replikant_mih, В общем, я бы на Вашем месте сделал матрицу, где каждая координата вида [x y] является точкой, как бы ссылкой на абстрактный объект точки, и набор операций над этой матрицей, вида: get/setSomeProperty([10, 20], [30, 40]), где числа — координаты x и y. В данном случае, каждый из аргументов представляет точку на плоскости.
При любом изменении матрицы график перерисовывать, считать и изменять отдельно,
avatar
sortarray sortarray, Спасибо, попробую подумать в этом направлении :)
avatar
Replikant_mih, 
По поводу математики — нужность математики в алго-трейдинге больше ценится не в привязке к кодингу, а в привязке к рисёчу, к выявлению законмоерностей, построению моделей и т.д.

Возможно, но на практике этой пользы не видно. Например, вероятности я всегда вычисляю программно, никогда не заглянул в теорвер. Это проще и надежней, как минимум.
avatar
sortarray sortarray, Я из тервера, запомнил не много больше чем простую формулу отношения успешных событий к общему числу, ну и формулу вероятности наструпления хотя бы одного из событий и вроде всё. Как-то надо было посчитать вероятность по нескольким факторам — думал-думал — в итоге симулировал данные и по факту прикинул)), согласен, что роль математики преувеличена в этой предметной области, хочется понять границы, за которым без математики ты уж не пройдёшь. Буду на практике это всё познавать.
avatar
Вот что еще тут стоит заметить.

Понятие «алгоритмический», то есть, от слова алгоритм, это понятие общее для математики и программирования, но есть одна тонкость, которая часто упускается из виду: программист занимается не изучением алгоритмов, а их реализацией.

И второе, не менее важное: программирование не сводится к построению и реализации алгоритмов. В сущности, программирование — это построение систем, которые, в том числе(но не только) реализуют какие-то алгоритмы.
avatar
sortarray sortarray, Ну да, алго-трейдер объединяет в себе несколько ролей, если честно, я бы часть из них отдал на сторону)), например, если бы работал в алгоритмической команде, но когда ты делаешь всё в одного — приходится делать и менее приятные вещи и более, и те, которые получаются хорошо и подтягивать те, которые пока не очень.
avatar
параметры k и b формулы y = kx+b вычисляются через систему из двух уравнений (из двух точек).
Можно выразить через систему уравнений k и b легко, это делали еще в школе сто раз!
avatar
Ярик, Я знаю, что делали в школе, и я делал, и наверно 4-5 имел. 
avatar
По опыту, чем «математичнее» человек, тем меньше у него вероятность зарабатывать деньги. Почему так — объяснить никто не может, или по крайней мере, я не встречал достойные публикации на эту тему. Нужна золотая середина, когда ты понимаешь 2+2 и логарифмы, но при этом не понимаешь что такое машинное обучение и ИИ.
avatar
facevalue, Не знаю насчёт статистики, может так и есть в плане статистики). По внутренним ощущениям, мне не сильно мешает отсутствие знаний математики).
avatar
билят
Я думал что один такой
avatar
silentbob, Так, я не понял! Эта ниша что — уже занята!?)
avatar
Replikant_mih, да, ниша малограмотных троечников по жизни уже все. заполнена.
Однако, а зачем уравнение кривой? Вероятно, провести трендовую линию и купить на откате? ага, щас. Благодаря математической точности вычислений, отличной от проведенной на глаз линии, вариантов получается великое множество.
Нормальный алкотрейдер сделает иначе. Он построит мувинги по лоям и хаям (в функцию расчета вместо С надо поставить Х или Л)
А потом легко посчитает уравнение касательной к функции в точке
www.berdov.com/docs/fluxion/tangent/
ну эта касательная в моменте как бы и будет поддержкой или сопротивлением. Помоему так. правда, проверить сил не хватило пока еще. В приведенной ссылке вероятно важен последний абзац
avatar

silentbob, Если честно, мой список идей к проработке не настолько скуден, чтоб я кидался на посторонние идеи. Нет, это я конечно не против, но вот напрочь не помню физический смысл производной.

Мой класс идей в связи с рисованием линий (пока прямых) завязан на классические определения тренда, на линии тренда, всякие каналы, треугольники. По крайней мере как одно из применений. Эти штуку, чё уж там, работают. Другое дело, что не с проста кто-то считает, что они работают, а кто-то нет (видимо, кто-то знает какие-то доп. детали, а кто-то нет) — в этом и есть фишка алго-трединга — формализовал рисование, не понравилось как оно рисует — переформализовал. А дальше смотришь какие факторы влияют на то, что какие-то фигуры в одних случаях работают, в других — нет, в одном случае идёт пробой, в другом ложный — ты все эти факторы можешь проверить. Пока для чего-то подобного планирую рисовать.

avatar
Replikant_mih, каналы-треугольники сильно трудоемко описывать.
Можно попробовать перейти на формат данных ХО
крестики нолики. там попроще будет, так как описать паттерн из 3-5 свечей подряд проще. но свои нюансы тоже есть
avatar

silentbob, У меня небольшая аллергия на индикаторы, крестики-нолики и всякое прочее предустановленное, что не является объемом или OHLC)). Рисовать на графике алгоритмически да, не так просто, но я познал основы ООП)), так что, думаю, веселей пойдёт. Уже были наработки, показавшие, что рисовать в принципе возможно, даже какие-то простенькие стратежки строил, но тогда не было у меня в арсенале ООП и тонул в сложности кода при наворачивании более сложных стратегий на основе рисования.

Я через один пост назад вроде упоминал про то, что фигуру можно найти на 5 свечах или на 100 свечах меньшего ТФ, из которых состоят эти 5 свечей и что на 100 свечах всё намного интересней, но что-то поддержки эта идея не нашла))

avatar
(y-y1)/(x-x1) = (y2-y1)/(x2-x1) 

проходит через точки (x1, y1) и (x2, y2).
avatar
MS, Спасибо), обычно формулы меня пугают, хотя эти, кажется, довольно простые)
avatar
Replikant_mih, (y-y1) = (y2-y1)/(x2-x1)*(x-x1) когда-то вывел в уме. Прямая — значит пропорция должна быть. Подставив по очереди точки, видим 0=0 и y2-y1 = y2-y1. То есть вывод простой.
avatar
MS, Я тоже иногда что-нить вывожу с использованием логического мышления и математического аппарата уровня класса 7-8-го наверно). Если не выходит каменный цветок — забиваю — ищу альтернативные пути.
avatar
Забавно, под математикой люди как правило понимают школьную программу и, приложив некоторые усилия, уверенно решают любые «математические» задачи. При этом с тем, чего они не знают, вообще никаких проблем не испытывают. 
avatar

Cristopher Robin, я уверенно применяю пропорции, дроби, уравнение не сложные, и аналогичное, а вот производные, первообразные, логарифмы и синусы напрочь забыл).

Проблем может не испытывают, просто когда читаешь пост в котором мегаматематичекая терминология уровня такого, что ты не то что щас не там, а даже на пике там не был)) — и при этом человек не утверждает, что это грааль, а только что-то ну как-то там средненько работающее — ты сразу думаешь, ну куда мне с моими дробями и пропорциями))))

avatar
Replikant_mih, Та же фигня, нужно объединяться)
avatar
Knoons, ), и как — это мешает получать результаты алготорговлей?
avatar
Replikant_mih, собственно, с самой алготорговлей-никак)с программированием еще хуже чем у тебя. Но что касается количественных методов, я считаю можно развиваться, если подойти серьезно и основательно.
avatar
Knoons, Согласен, можно)
avatar

Если речь идет про Велс-лаб, то нарисовать линию можно используя встроенный метод:

// рисуем линию для двух известных нам точек на барах №1 и №2
DrawLine(pane, bar1, val1, bar2, val2, Color.Blue, WealthLab.LineStyle.Solid, 2);

Достаточно задать координаты точек.

Велс будет рисовать правее, а может левее, или только «от и до».

Изучайте мат.часть.

:)

 

Аналогично и в других программах алгоритмической торговли (например, Тслаб).

avatar
 

Как: нарисовать линию тренда и продлить ее вправо по шкале времени.
Чтобы нарисовать расширяющуюся линию тренда нужно проделать следующие шаги:
Первым делом нарисуйте линию между двумя известными точками, использовав для этого метод
DrawLine().
Следующим шагом найдите значение координаты Y на том баре, до которого Вы хотите расширить линию
тренда.
Используйте найденную точку, подставив ее в качестве второго аргумента в метод DrawLine().

 

(из инструкции к Велсу)

avatar
IgorMushtriev, Нарисовать по 2-м точкам-то не проблема и метод рисования линии знаю, сложность была как раз найти 3-ю точку на линии по 2-м точкам линии. Уже разобрался с формулой. Вот если бы, например, линия была объектом и был встроенный метод, который по объекту этого ласса давал возможность по x вычислить y — было бы совсем просто)).
avatar

теги блога Replikant_mih

....все тэги



UPDONW
Новый дизайн