Ниша все еще пустует — до сих пор никто не сделал толковой программы для построения роботов.
За неимением нормальной программы приходится пользоваться лучшим из худших — 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# с возможностью определения переменных и использования операторов циклов и условий, хотя бы для ограниченного количества вложенных блоков {} ...
Тоже мне лайф хак) Вот если бы раскрыли тайну как им пользоваться на халяву (такая возможность есть) то это был бы лайф хак.
А по поводу кубика с кодом, такая возможность есть, можно писать как внешний скрипт так и свои кубики.
Описание апи того что есть более чем достаточно!
Свои кубики писал, только надо либо всего агента писать в своем кубике (что не так легко) или все писать стандартными кубиками, а если перемешивать, то глюков не избежать.