Автор |
Сообщение |
Garry$on
Зарегистрирован: 05.12.2009
Сообщения: 35
|
Добрый день, возник вопрос, как можно запустить цикл на другом таймфрейме? Есть базовый таймфрейм, пусть будет минутка, мне надо сжать массив mass до дневок, в цикле посчитать другой массив и использовать его на минутке. Думал использовать
TimeFrameSet(inDaily);
for( i = 1; i < BarCount; i++ )
{
mass[i]=....
Но судя по всему TimeFrameSet(inDaily); работает только для встроенных функций, а для циклов нет, индекс цикла все равно прогоняет все бары минутки. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Угу.
Длинна массива BarCount не измениться если переключиться на дневки. Проблемма только в этом. Массив дневок должен быть короче чем внутридневной.
Может напишешь что именно хотел посчитать на дневках? Попробуем без цикла. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Garry$on
Зарегистрирован: 05.12.2009
Сообщения: 35
|
Не без у цикла не обойтись, на дневках сигналы лонг шорт формируются на основе данного массива, массив тоже дневной, т.е. на минутках он постоянен в течении дня. Дневные сигналы лонг шорт будут фильтрами на минутке, грубо говоря 2 системы хочу совместить(на дневках и на минутке). Но стратегию на дневках без цикла не написать. Чувствую придется тяжелую артилерию подключать в виде .Net для ами, хотя там тоже пока не понятно как. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
Garry$on писал(а): |
на минутках он постоянен в течении дня. |
Если постоянен в течении дня, ну, как пивот уровни прошлого дня, то расчитай вечером( ночью) по истории, далее, сохрани в файл, утром Ами прочитает и вперёд. Или
Код: |
inter=1440*60;
IntervalH = TimeFrameGetPrice("H", inter, -1);// yesterdays high
IntervalL = TimeFrameGetPrice("L", inter, -1);// low
IntervalC = TimeFrameGetPrice("C", inter, -1);// close
IntervalO = TimeFrameGetPrice("O", inter,0); // current day open
/*Example time intervals in seconds:
tick bars = 0
5 sec bars = 5
1 Min bars = 60 (inMinute constant)
hourly bars = 3600
daily bars = 86400 (inDaily constant)
weekly bars = 432001 (inWeekly constant)
monthly bars = 2160001 (inMonthly constant)
*/
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Garry$on
Зарегистрирован: 05.12.2009
Сообщения: 35
|
Понятно , что можно отдельно системы посчитать, скинуть в файл массив сигналов или другие данные и потом подкачать. Но еще не протестировал, как они в связке работать будут, параметры надо оптимизировать и т.д. Т.е. надо цельно как то сделать, чтоб бэктесты проводить и оптимизацию, в ручную не очень хочется. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тогда такое предложение. Переключаемся на дневки, берем там нужные массивы цен, переключаемся обратно, потом экспандим цены, потом пишем цикл на внутридевках, но берем значения дневок только в момент начала нового дня и таким макаром считаем стратегию на дневках...
Надеюсь понятно объяснил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Garry$on
Зарегистрирован: 05.12.2009
Сообщения: 35
|
Спасибо за ответы, все оказалось просто, вопрос решил так, TimeframeCompress inDaily выдает итоговый массив из того же количество элементов что и на текущем таймфрейме, но заполненных там будет столько сколько всего дней, эти заполненные элементы будут в самом конце итогового массива и идут подряд, соответственно первый заполненный элемент и будет началом для индекса нужного цикла, конец цикла как обычно Barcount - 1, затем считаю нужные данные, массивы сигналов и т.д. и использую TimeframeExpand. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Уважаемые коллеги!
Тоже сейчас озадачился подобной конструкцией. Если не сложно выложите код для внутридневного цикла, где используются значения вчерашнего дня (OHLC). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну вот смотри этот код
Код: |
Plot(C, "", colorBlack, styleCandle);
qqq = TimeFrameGetPrice("C", inDaily, -1);
Plot(qqq, "", colorRed);
|
Тут qqq это вчерашнее закрытие. Можешь спокойно использовать его в цикле. Аналогично можно получить и OHL |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Спасибо, Олег!
Хочу уточнить... у меня не получается внутри тела цикла брать данные с других фреймов с помощью TimeFrameGetPrice. За пределами цикла всё работает, - так и делал ранее, но вот как только переношу в тело цикла, то ami падает и конец всем начинаниям, приходится править код в Program Files\ иначе не запускается ami.
Я не сильно волоку в программировании, но стараюсь. Мне нужно сделать структуру файла - алгоритм робота, который автоматом бы брал данные с других фреймов и использовал бы их внутри фильтра. Может я не до конца понимаю еще работу цикла в ами при реальной торговле, но мне кажется, что если запущен код и в коде появился цикл, в котором идет перебор баров (значения последнего бара меняются каждую секунду, у меня рабочий фрейм 5 мин), то цикл будет крутится до тех пор, пока я не отключу робота и соответственно данные с другого фрейма не поменяются до отключения робота, если TimeFrameGetPrice будет не в теле цикла .... или это не так??? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не так.
Вл первых не надо функции работы с временными интервалами пихать внутрь цикла. Сначала получай нужные цены за пределами цикла а потом работай с ними в цикле.
Код AFL прогоняется один раз (в случае с роботом с заданной переодичностью) и изменение последней цены никак на его работу не влияют. Он просто берет текущую цену которая актуальна в тот момент когда AFL добрался до конца цикла. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Получается что если рабочий фрейм 5 мин., то робот будет проходить код не чаще, чем один раз в 5 минут и ничего с этим поделать нельзя если я буду делать связку с помощью, например, плагина AS_QuikTrade или продукта с этого ресурса http://www.traderassistant.ru?
Еще вопрос - при тестировании в бэктестере нужно придерживаться того же подхода (выносить работу с др. фреймами за приделы тела цикла), что и при торговле роботом? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если робот работает в АА, то он запускается так часто, как установишь в настройках Run Every. Минимальное время 1 секунда. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|