Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Поговорили с саппортом, вопрос решён. Суммирую ответ саппорта и Slawa: несмотря на то что хендл создаётся сразу, доступ к данным будет на следующем тике (через некоторое время).
Рекомендуют создавать хендлы в ините, что логично.
Почему я не создаю в данном примере хендлы в ините :
Передо мной стоит задача провести в советнике некоторые расчёты по всему рынку. Часть расчётов полностью совпадает с результатами индикатора макд, поэтому я и решил вызвать его а не писать логику самому.
А теперь займёмся расчётами, для примера обратимся на демосервер метаквотов. Валюта+сфд даёт мне 96 доступных для торговли инструментов.
мне нужно проверить результаты макд в следующем диапазоне: fastEma 5-20, slowEma 20-100, sigbalMA 3-9. Итого 7200 вариантов по каждому символу, в общем 7200х96=691200 хендлов.
Эти расчёты мне нужно проводить 1 раз в день, вполне логично создать эти хендлы в онтике, посчитать всё что надо и релизнуть их до следующей необходимости.
Теперь, учитывая все новые знания наверное создам массив всех хендлов и вызову их в ините, пусть болтаются в памяти, благо места занимают не много, менее 3 МБ (691200 *4/1024/1024)
Ок, но вопрос остался открытым - почему это происходит только при дебаге на ист. данных? Что-то с отладчиком значит не так.
но как говорится это уже другая история. Саппорт с проблемой ознакомлен, дальше будут действовать как считают нужным. Я свой вопрос тоже решил.
Хочется конечно съязвить вот таким товарищам:
Если Вы такой умник, то для чего открыли эту тему ?
Поговорили с саппортом, вопрос решён. Суммирую ответ саппорта и Slawa: несмотря на то что хендл создаётся сразу, доступ к данным будет на следующем тике (через некоторое время).
Рекомендуют создавать хендлы в ините, что логично.
Почему я не создаю в данном примере хендлы в ините :
Передо мной стоит задача провести в советнике некоторые расчёты по всему рынку. Часть расчётов полностью совпадает с результатами индикатора макд, поэтому я и решил вызвать его а не писать логику самому.
А теперь займёмся расчётами, для примера обратимся на демосервер метаквотов. Валюта+сфд даёт мне 96 доступных для торговли инструментов.
мне нужно проверить результаты макд в следующем диапазоне: fastEma 5-20, slowEma 20-100, sigbalMA 3-9. Итого 7200 вариантов по каждому символу, в общем 7200х96=691200 хендлов.
Эти расчёты мне нужно проводить 1 раз в день, вполне логично создать эти хендлы в онтике, посчитать всё что надо и релизнуть их до следующей необходимости.
Теперь, учитывая все новые знания наверное создам массив всех хендлов и вызову их в ините, пусть болтаются в памяти, благо места занимают не много, менее 3 МБ (691200 *4/1024/1024)
Сначала надо поэкспериментировать с памятью.
Возможно, наилучшим вариантом будет написание некоего диспетчера индикаторов. На предыдущем тике говоришь диспетчеру создать индикатор, на следующем тике взять значение индикатора и освободить его.
Всё таки 700 тысяч хэндлов это слишком круто и я сильно сомневаюсь в расчёте на 3 мега. Вы не учитываете размер индикаторных буферов для каждого хендла, которые живут, пока живёт хендл
Ок, но вопрос остался открытым - почему это происходит только при дебаге на ист. данных? Что-то с отладчиком значит не так.
Всё просто. При дебаге на исторических данных никаких хендлов изначально нет, так как тестер только-только стартовал.
При дебаге на реальных данных используется не тестер, а терминал, в котором после разных экспериментов ещё живут как раз нужные хендлы индикаторов
Всё просто. При дебаге на исторических данных никаких хендлов изначально нет, так как тестер только-только стартовал.
При дебаге на реальных данных используется не тестер, а терминал, в котором после разных экспериментов ещё живут как раз нужные хендлы индикаторов
1. Удалил все индикаторы из терминала, перезапустил его. Без отладки данные идут на первом тике. С пошаговой отладкой на истории - со второго тика.
2. Утверждение, что при создании индикатора с разными входными параметрами создается отдельный экземпляр и он сохраняется - верное, хендлы выдаются, как на предыдущем тике.
2016.06.29 14:49:08.291 TestHandle (EURUSD,M1) TickCount=1 handle=14 x=100 0
2016.06.29 14:49:08.291 TestHandle (EURUSD,M1) TickCount=1 handle=13 x=100 0
2016.06.29 14:49:08.291 TestHandle (EURUSD,M1) TickCount=1 handle=12 x=100 0
2016.06.29 14:49:08.291 TestHandle (EURUSD,M1) TickCount=1 handle=11 x=100 0
2016.06.29 14:49:08.291 TestHandle (EURUSD,M1) TickCount=1 handle=10 x=100 0
2016.06.29 14:49:08.099 TestHandle (EURUSD,M1) TickCount=0 handle=14 x=100 0
2016.06.29 14:49:07.997 TestHandle (EURUSD,M1) TickCount=0 handle=13 x=100 0
2016.06.29 14:49:07.895 TestHandle (EURUSD,M1) TickCount=0 handle=12 x=100 0
2016.06.29 14:49:07.795 TestHandle (EURUSD,M1) TickCount=0 handle=11 x=100 0
2016.06.29 14:49:07.682 TestHandle (EURUSD,M1) TickCount=0 handle=10 x=100 0
-----------
Вывод: все же что что-то с отладчиком на истории не так.
Сначала надо поэкспериментировать с памятью.
Возможно, наилучшим вариантом будет написание некоего диспетчера индикаторов. На предыдущем тике говоришь диспетчеру создать индикатор, на следующем тике взять значение индикатора и освободить его.
Всё таки 700 тысяч хэндлов это слишком круто и я сильно сомневаюсь в расчёте на 3 мега. Вы не учитываете размер индикаторных буферов для каждого хендла, которые живут, пока живёт хендл
кстати да. Это размер только самих хендлов. Далее если мы возьмём разрешённые по умолчанию 100000 баров, то получится следующий расчёт:
100000*8 это столько памяти скушает каждый буфер каждого индикатора. Буферов 3, индикаторов 691200, итого получим
100000*8*3*691200/1024/1024/1024 это есть 1544 гигабайта :) и + 3 метра хендлов ещё.
Вообщем изначально действовал правильно - индикаторы надо создавать в онтике, просто оценивать эти данные на следующем тике+на всякий пожарный проверку готовности расчётов.
Но тогда возникает проблема вот с этим ответом саппорта:
Фактически при освобождении хендла он только помечается, что больше не нужен. Но не удаляется.
то есть память будет всё равно занята ?Повторяю. Отладка на истории сильно отличается от отладки на реальных данных
В первом случае запускается визуальный тестер. В визуальном тестере все доступы к данным чётко синхронные. И индикаторы пересчитываются чётко между тиками
Во втором случае в текущем клиентском терминале открывается новое окно чарта. В терминале все доступы к данным асинхронные. А так как отладчик работает медленно, то индикатор вполне успевает пересчитаться в другом потоке
кстати да. Это размер только самих хендлов. Далее если мы возьмём разрешённые по умолчанию 100000 баров, то получится следующий расчёт:
100000*8 это столько памяти скушает каждый буфер каждого индикатора. Буферов 3, индикаторов 691200, итого получим
100000*8*3*691200/1024/1024/1024 это есть 1544 гигабайта :) и + 3 метра хендлов ещё.
Вообщем изначально действовал правильно - индикаторы надо создавать в онтике, просто оценивать эти данные на следующем тике+на всякий пожарный проверку готовности расчётов.
Но тогда возникает проблема вот с этим ответом саппорта:
Фактически при освобождении хендла он только помечается, что больше не нужен. Но не удаляется.
то есть память будет всё равно занята ?Пока хендл не удалится, да. Память будет занята.
Но хендл долго не живёт. Как правило, до следующего пересчёта индикаторов
Пока хендл не удалится, да. Память будет занята.
Но хендл долго не живёт. Как правило, до следующего пересчёта индикаторов
Поговорили с саппортом, вопрос решён. Суммирую ответ саппорта и Slawa: несмотря на то что хендл создаётся сразу, доступ к данным будет на следующем тике (через некоторое время).
Рекомендуют создавать хендлы в ините, что логично.
Почему я не создаю в данном примере хендлы в ините :
Передо мной стоит задача провести в советнике некоторые расчёты по всему рынку. Часть расчётов полностью совпадает с результатами индикатора макд, поэтому я и решил вызвать его а не писать логику самому.
А теперь займёмся расчётами, для примера обратимся на демосервер метаквотов. Валюта+сфд даёт мне 96 доступных для торговли инструментов.
мне нужно проверить результаты макд в следующем диапазоне: fastEma 5-20, slowEma 20-100, sigbalMA 3-9. Итого 7200 вариантов по каждому символу, в общем 7200х96=691200 хендлов.
Эти расчёты мне нужно проводить 1 раз в день, вполне логично создать эти хендлы в онтике, посчитать всё что надо и релизнуть их до следующей необходимости.
Теперь, учитывая все новые знания наверное создам массив всех хендлов и вызову их в ините, пусть болтаются в памяти, благо места занимают не много, менее 3 МБ (691200 *4/1024/1024)
Главное, чтобы памяти на все индюки хватило. Иначе придется релизить их в процессе и, возможно, ждать, пока освободится память (это не мгновенный процесс).