#43913 - Sun Jul 08 2012 10:19 AM
Как вызывается Execute()?
|
stranger
Registered: Wed Jul 04 2012
Записи: 7
|
Эта функция есть и в блоках и в скриптах. Она вызывается программой как-то по расписанию, по событиям или один раз? Например, если пишется скрипт-алгоритм, то эта функция вроде бы должна выполняться в цикле до срабатывания условия остановки работы скрипта, а если строится график по историческим данным, пропущенным через индикатор, то достаточного одного вызова Execute() в индикаторе.
|
|
Наверх
|
|
|
|
#44040 - Mon Jul 09 2012 09:33 PM
Re: Как вызывается Execute()?
[Re: Nektodron]
|
stranger
Registered: Wed Jul 04 2012
Записи: 7
|
Теперь, вроде понятнее, спасибо. Я в выходные писал просто и не мог посмотреть на данные "в движении".
|
|
Наверх
|
|
|
|
#74584 - Sat Nov 07 2015 04:49 PM
Re: Как вызывается Execute()?
[Re: Nektodron]
|
newbie
Registered: Mon Sep 21 2015
Записи: 35
|
Здравствуйте, вижу что тема старая, но чтобы не плодить... ...Скрипт пересчитывается при поступлении новых данных свечей. Соответственно, тогда и вызывается Execute. - так происходит при реальной торговле (при соединении с биржей). Вопрос - как Execute должен запускаться в случае локальных тестов на исторических данных? Вижу что у меня на локальных тестах Execute запускается один раз и в параметр security передается сразу вся история. Получается что если есть желание локально потестить стратегию, то каким-то чудесным образом Execute() надо реализовывать учитывая разницу в запусках (локально и на реале). Я как-то не правильно тестирую, может быть есть заветный чекбокс в настройках?
Отредактировано user5 (Sat Nov 07 2015 05:03 PM)
|
|
Наверх
|
|
|
|
#74585 - Sat Nov 07 2015 05:19 PM
Re: Как вызывается Execute()?
[Re: user5]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
вас не должен заботить метод данный. Озаботиться нужно наполнением данного метода. Вызов его за вас сделает программа.
_________________________
__
|
|
Наверх
|
|
|
|
#74593 - Sat Nov 07 2015 11:30 PM
Re: Как вызывается Execute()?
[Re: ra81]
|
newbie
Registered: Mon Sep 21 2015
Записи: 35
|
вас не должен заботить метод данный. Озаботиться нужно наполнением данного метода. Вызов его за вас сделает программа. совершенно верно, согласен полностью с вами я. Вызов Execute() происходит успешно, о чем и написал. Но забота о его наполнении, как ни странно, началась с вопроса о том как же этот метод будет использоваться, какие события будут инициировать запуск этого метода. Запус Execute() на каждом тике (на реале) и один раз (во время тестов), создает проблемы с наполнением если хочется и потестировать и в бою применить. Вопрос в этом. Например, 1) вот этот код вижу в каждом примере на форуме
public void Execute(IContext ctx, ISecurity sec)
{
int barsCount = source.Bars.Count;
for (int i = 0; (i < source.Bars.Count); i++)
{
...
}
}
но если запуск происходит на каждом тике и по стратегии нужнен анализ последних N баров, то зачем же все бары перебирать? А если заменить на ...
for (int i = source.Bars.Count -N; (i < source.Bars.Count); i++)
...
то на тестах будут проблемы. Случай не безисходный, но извращатсья не хочется. Так же знаю что есть некая настройка в ТСлаб, указывающая сколько последних баров передавать в security, но она же константа 2) Во время локальных тестов, Execute запускается один раз и все переменные, объекты созданные в Execute сушествуют во время всего процесса тестирования. На реальной торговле Execute запускается много раз и соответственно состояние параметров будет потеряно, поэтому используем кэш, файл... и т.д. Понимаю что проблемы эти, впринципе, решаемы, но была надежда на возможность одинакового запуска Execute на реале и локально.
Отредактировано user5 (Sat Nov 07 2015 11:30 PM)
|
|
Наверх
|
|
|
|
#74594 - Sun Nov 08 2015 06:49 AM
Re: Как вызывается Execute()?
[Re: user5]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
если вы поставили пересчет по сделке - тогда вы должны очень хорошо понимать что вы делаете. А вы еще не настолько хорошо понимаете. поэтому оставляйте пересчет Интервал и тогда проблема с тем сколько баров в цикле перебирать отпадает. Перебирайте ВСЕ. Ну если уж хочется создать себе проблем, тогда делайте два скрипта. Для теста и для торговли.
_________________________
__
|
|
Наверх
|
|
|
|
#74598 - Sun Nov 08 2015 03:53 PM
Re: Как вызывается Execute()?
[Re: ra81]
|
newbie
Registered: Mon Sep 21 2015
Записи: 35
|
Похоже я знаю еще меньше чем вы предполагает. Про настройку пересчета не знал. Оставляю интервал, конечно.
Но, настройка эта для режима реальной торговли. Как бы такой же режим пересчета выставить для тестового режима??
В справке читаю ...Интервал - пересчет происходит только по закрытию бара. Этот режим расчета максимально приближен к расчетам в лаборатории...
и не понимаю, как же он приближен к лаборатории, когда на тестах пересчет происходит один раз. Может это как-то настраивается?
Отредактировано user5 (Sun Nov 08 2015 03:59 PM)
|
|
Наверх
|
|
|
|
#74601 - Sun Nov 08 2015 11:25 PM
Re: Как вызывается Execute()?
[Re: user5]
|
newbie
Registered: Mon Sep 21 2015
Записи: 35
|
Практически все ответы нашел тут. Рад что за возможность потестить, скрипт не должен уметь блины печь и на балалайке играть. ra81, спасибо за помощь
Отредактировано user5 (Sun Nov 08 2015 11:41 PM)
|
|
Наверх
|
|
|
|
#74603 - Mon Nov 09 2015 06:01 AM
Re: Как вызывается Execute()?
[Re: user5]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
Похоже я знаю еще меньше чем вы предполагает. Про настройку пересчета не знал. Оставляю интервал, конечно.
Но, настройка эта для режима реальной торговли. Как бы такой же режим пересчета выставить для тестового режима??
В справке читаю ...Интервал - пересчет происходит только по закрытию бара. Этот режим расчета максимально приближен к расчетам в лаборатории...
и не понимаю, как же он приближен к лаборатории, когда на тестах пересчет происходит один раз. Может это как-то настраивается? вся суть в торговом цикле. если его сделать правильно то даже при однократном запуске метода работать будет как взаправду. В общем - изучайте пока основы на базе простых скриптов с торговым циклом и так далее. Не стоит сразу забуриваться в дебри в которые вы почти забурились, там свои детали и нюансы.
_________________________
__
|
|
Наверх
|
|
|
|
#75297 - Sat Dec 05 2015 02:12 PM
Re: Как вызывается Execute()?
[Re: ra81]
|
journeyman
Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
|
на исторических данных execute вызывается один раз. И в теле этого метода вы сразу можете обратиться к любому бару истории. sec.Bars[1].Close - хоть к первому, sec.Bars[777].Close - хоть 777-му. Но чаще всего на истории делается в цикле: for (int i = 1; i < ctx.BarsCount; i++) {} что представляет собой эмуляцию реальной торговли. т.е. i - внутри тела цикла это как бы текущий бар. В реальной торговле execute выполняется каждый раз при поступлении нового бара (зависит от режима пересчета) и нет необходимости делать цикл. В реале делается так: var bar = ctx.BarsCount - 1; // длина текущей загруженной истории, что представляет собой последний загруженный бар. и далее к примеру sec.Bars[bar-5].Close - минус 5 баров назад загруженной истории. т.е. грубо говоря в реале цикл for заменяется методом execute.
|
|
Наверх
|
|
|
|
#76270 - Tue Feb 09 2016 08:55 AM
Re: Как вызывается Execute()?
[Re: crn]
|
stranger
Registered: Tue Oct 16 2012
Записи: 23
Loc: Vidnoe
|
user5 молодец, что задал этот вопрос. Я мучился аналогичным вопросом. Получается, что если запускать execute() на каждом баре, то для примера из хелпа for (int i = 0; (i < barsCount); i++) { ... source.Positions.BuyIfGreater(i + 1, 1, high[i], "LE"); ... } в реале получится, что на каждом пересчете может выставляться серия заявок на барах из прошлого. Либо это в реале отслеживается менеджером заявок TsLab, либо скрипт из хелпа написан исключительно для режима лаборатории
|
|
Наверх
|
|
|
|
#76274 - Tue Feb 09 2016 09:57 AM
Re: Как вызывается Execute()?
[Re: Vadim]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
тслаб отслеживает и не выставляет заявки которые были в прошлом. Все просто. запустите скрипт любой и увидите как он работает.
_________________________
__
|
|
Наверх
|
|
|
|
#76484 - Wed Feb 17 2016 10:43 AM
Re: Как вызывается Execute()?
[Re: ra81]
|
journeyman
Registered: Fri Sep 28 2012
Записи: 98
|
Три вопроса. 1.вызываю несколько методов: var atr1 = new TrAtr1 { Coef = StopCoef, Period = StopdPer }.Execute(sec); var atr2 = new TrAtr { Coef = StopCoef, Period = Stopd}.Execute(sec); и т.д. вопрос: инструмент подается сразу на все обьекты или поочереди отрабатывает. т.е. - паралельный расчет обьектов или последовательный?
2.Как создать кубик с несколькоми выходами?: var wwww = atr1.Sell; var ffff = atr1.Stop; и т.д.
3. Как прописать в скрипте возможность из окна сойства инструмента задавать какие- то значения в скрипт. Сейчас делаю через OptimProperty - коряво и некрасиво, и неинформативно.
Отредактировано komissar (Wed Feb 17 2016 11:13 AM)
_________________________
Физик-лирик
|
|
Наверх
|
|
|
|
#76488 - Wed Feb 17 2016 02:22 PM
Re: Как вызывается Execute()?
[Re: komissar]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
1 = это вопрос по программированию. выполнение идет последовательно. Это азы.
2 = никак. если вам в АПИ работать то зачем такой кубик нужен? Но обойти проблему можно через кэш скриптов. Читайте статьи на нашем сайте.
3 = только так и можно. Через вкладку оптимизации тоже самое настраивается вообще то. Поинформативнее.
_________________________
__
|
|
Наверх
|
|
|
|
#76491 - Wed Feb 17 2016 05:45 PM
Re: Как вызывается Execute()?
[Re: ra81]
|
journeyman
Registered: Fri Sep 28 2012
Записи: 98
|
Спасибо Родион. С кэшем я на ты. Кубиком я назвал свой Хандлер индикатор. Дело в том, что есть код из 400 строк, который в каждом из трех связанном через кэш скрипте нужно повторить 4 раза с небольшими изменениями параметров-а на выходе у него 4 значения- вот я и хотел его засунуть в индикатор. Блин, пока писал это придумал красивое решение!Даже два.
_________________________
Физик-лирик
|
|
Наверх
|
|
|
|
|
|