Мои правила написания кода торговых систем

Мои правила написания кода торговых систем

Как только вы напишите свою первую торговую систему, возникнет резонный вопрос. Как сделать так, чтобы этот код вы быстро поняли, скажем, через год? За это время вы не только забудете как вы реализовали свою идею, но и саму идею. Давайте я расскажу вам, как борюсь с этой напастью.
[spoiler]
Итак, первое, что вы используете в коде ваших торговых систем, это синтаксис языка программирования. Как объявлять переменные, как присваивать им значения, как записывать условия, как работать с циклами - про это расскажет вам любой учебник по языку программирования. Если вы забыли что-то из основ языка, откройте учебник, сразу вспомните.

Более сложный вопрос описания логики и формул. Хорошо, если всю логику можно описать конструкцией если - то - иначе. А если логика сложна и нелинейна?

Дополнительную нагрузку на восприятие создают переменные. В процессе написания кода их становится катастрофически много. Как потом разобрать, чем переменная a1 отличается от переменной a2?

Я понимаю, что многие трейдеры не искушены в программировании, поэтому, лучше всего следовать старому доброму правилу KISS. Keep It Simple Stupid. Мягкий перевод звучит так: Делать как можно проще, или, другими словами, не усложнять. Чтобы вы смогли объяснить свой код ребенку или тетушке, далекой от программирования.

Начнем с того, что определимся с именами переменных. Например, в коде вашей идеальной торговой системы есть переменная isSignalBuy. Очень хороший вариант для разбора.

Переменные внутри любого блока я начинаю со строчной буквы. Каждое новое слово начинаю с заглавной буквы. Разделителей между словами не делаю.

Давайте сравним с другими распространенными правилами именования:
isSignalBuy - так я называю переменную
issignalbuy - все буквы строчные, мозгу сложнее разделить слова
is_signal_buy - разделители в виде нижнего подчеркивания делают переменную более громоздкой

Отдельно хочу сказать про аббревиатуры в названиях переменных. Например, название биржи ММВБ. У нее есть устойчивое английское название MOEX. Если бы его не было, то написал бы латиницей MMVB. Не рекомендую делать дословный перевод локальных аббревиатур. Аббревиатуры в переменных пишу большими буквами.

Например, время открытия биржи ММВБ я запишу так:
MOEXOpenTime - если работаю со временем в контексте биржи
openTimeOfMOEX - если работаю в контексте времени открытия разных бирж.

Главная сущность в имени идет первой. Правило достаточно заумное, поэтому отношусь к нему как к рекомендации.

Со временем вы увидите, что лучше написать код один раз, а затем его использовать в ваших торговых системах. Поэтому, вы будете группировать код по смыслам. Каждый смысл будете оформлять в виде класса.

Название класса я всегда пишу с заглавной буквы. Например, class Indicators.

Внутри класса как раз и будут содержаться ваши готовые кусочки кода. В разных языках это может называться методами или функциями.

Например, для класса Indicators можно сделать функции SMA, EMA, RSI, Stochastic.

Чтобы получить результаты на выходе функции, нужно что-то подать на ее вход. Например: RSI(Series Close, int Period).

Обратите внимание, что переменные на вход также пишутся с заглавной буквы. Если же я захочу посчитать какой-то период внутри функции, то объявлю его, например, вот так: int period = 3.

Здесь мы красиво подходим к сложному коду. Как его написать так, чтобы потом быстро разобрать?

Разбиваете сложную задачу на элементарные. Каждая из них не должна у вас вызывать трудностей. Для уверенности, пишите комментарии на каждой строке кода. Я для вас именно так и делаю. Каждая элементарная задача - это функция с результатом и переменными на вход. В точке входа в функцию вы просто последовательно вызовите элементарные задачи.

Надеюсь, что эти несложные правила именования переменных и написания кода помогут вам в нелегком деле написания торговых систем!