finstrateg
finstrateg личный блог
23 февраля 2017, 11:43

Лайфхак для TSLab

Ниша все еще пустует — до сих пор никто не сделал толковой программы для построения роботов.
За неимением нормальной программы приходится пользоваться лучшим из худших — TSLab-ом.

Речь пойдет о кубиках на сильно упрощенном примере!

Итак, при пользовании TSLab-ом периодически требуется обратиться к предыдущим значениям баров, что, можно сделать с помощью указания индекса i, под которым подразумевается номер текущего бара, например open[i-5] — обратились к цене открытия пятого бара от текущего.

Вроде все удобно, но если в кубике с формулой использовать подобную запись, то на начальном участке истории кубик выдает ноль (когда еще нету пяти баров и отсчитать пять баров назад не получится). И если это значение выводится на график, допустим фьючерса на индекс ртс, то на начальном участке истории получается одновременный вывод нулей и значений цены в районе 114000 — можно представить как это все отображается — в виде тонких линий, где ничего не рассмотришь, а только матом выругаешься )))

В кубике есть настройка — где можно указать с какого номера бара начинать вычисления, но это абсолютно не поможет в указанном случае, потому что TSLab все равно выдает нули, да и по другому никак..., кроме того, указывать номер бара в настройках кубика — достаточно идиотская затея, так как потом при каждом случае придется туда лезть и менять этот номер или вообще можно забыть про него и что-нибудь не так вычислить...

Если в самом кубике предусмотреть обработку описанного случая — чтобы TSLab не лез в отсутствующую историю, можно написать условие (i<5? open[i] : open[i-5]) — то есть при недостатке баров будет использоваться текущее значение open[i]. Но TSLab настолько «умен», что если в формуле идет обращение в прошлое и этого прошлого не достаточно, то он просто игнорирует все что написал «тупой» пользователь и все равно выдает ноль.

Ну и решение проблемы заключается в использовании двух кубиков подряд, в первом пишем то, что нам требуется (open[i-5]) — пусть этот кубик называется «formula», а во втором кубике записываем условие, которое исправляет то, что нам не требуется (formula==0? open[i] : formula). Данное условие вместо нуля выдаст цену open[i], а когда появится возможность, то выдаст open[i-5], что нам и требуется. И график будет выглядеть нормально и никакие индексы в настройках кубика указывать не надо...

Давно бы уже следовало сделать кубик, в котором можно написать программный код на C# с возможностью определения переменных и использования операторов циклов и условий, хотя бы для ограниченного количества вложенных блоков {} ...

24 Комментария
  • Сергей Гаврилов
    23 февраля 2017, 12:37
    «Давно бы уже следовало сделать кубик, в котором можно написать программный код на C#» — зачем козе баян?
  • Сергей Кузьминов
    23 февраля 2017, 13:01
    Может я не понял, но такая возможность давно есть. У TSLab'a замечательное открытое API. В Visual Studio пишешь код и потом подключаешь его как внешний скрипт.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн