CreateDataSource: ограничить число полученных свечек

Страницы: 1
RSS
CreateDataSource: ограничить число полученных свечек
 
Пробую реализовать в скрипте то что я делаю визуально
использую CreateDataSource, далее мне нужны результаты индикаторов для несколько последних свечек
Этот код работает прекрасно, но очень долго, т.к. получается более 2 тысяч свечей:
Скрытый текст
хочу допустим 3 последних значения:
Скрытый текст
но этот код не работает, в случае с MA ошибка: LuaIndicators\MA.lua:83: attempt to perform arithmetic on field '?' (a nil value)

повторяется не только для MA, пробовал разные индикаторы, везде не работает если не с первого значения брать расчет
можно править код индикаторов, но может есть решение более правильное, и в data source можно взять последние n значений?...
 
МА же учитывает предыдущие значения для расчетов, а вы их отбрасываете
 
Цитата
tdm написал:
везде не работает если не с первого значения брать расчет

Тип "EMA" требует для расчета свои предыдущие значения.
По этому нужно делать расчет начиная с первого значения.
 
понятно, что требует. Но если этого значения нет, то скрипт не стесняется выдавать nil и это правильно. Т.е. если период равен 22, а брать первые 30 значений, то он сначала выведет 22 раза nil, а для остальных 8 посчитает значение.
Скрытый текст
почему аналогично нельзя сделать для последних 30 значений? сначала будет "ничего", а для последних свечек получу значение, этого вполне достаточно
 
Цитата
tdm написал:
почему аналогично нельзя сделать для последних 30 значений? сначала будет "ничего", а для последних свечек получу значение, этого вполне достаточно

Сделайте.
Те функции которые Вы используете не более чем пример. А значит Вы вольны их переписывать как угодно.
 
ok
значит нельзя ограничить количество получаемых свечей(
тогда, может быть есть способы распараллеливания вычислений в lua чтобы ускорить вычисления? многопоточность поддерживается?
 
Цитата
tdm написал:
значит нельзя ограничить количество получаемых свечей(

Почему нельзя? Конечно можно. Другой вопрос что мы это за Вас делать не будем. Примеры предоставляются "как есть" и каждый может их переписать на свое усмотрение.

Цитата
tdm написал:
может быть есть способы распараллеливания вычислений в lua чтобы ускорить вычисления? многопоточность поддерживается?
"многопоточность" есть только в виде функции main.
Другие варианты, можно посмотреть в документации на язык lua.
 
Цитата
tdm написал:
Пробую реализовать в скрипте то что я делаю визуально
использую CreateDataSource, далее мне нужны результаты индикаторов для несколько последних свечек
Этот код работает прекрасно, но очень долго, т.к. получается более 2 тысяч свечей:     Скрытый текст       for i=1,ds:Size() do
ma_out=func(i, {Period=22, Metod = "EMA", VType="Close", round=2}, ds)
message(tostring(ma_out))
endхочу допустим 3 последних значения:     Скрытый текст       for i=ds:Size()-3 ,ds:Size() do
ma_out=func(i, {Period=22, Metod = "EMA", VType="Close", round=2}, ds)
message(tostring(ma_out))
endно этот код не работает, в случае с MA ошибка: LuaIndicators\MA.lua:83: attempt to perform arithmetic on field '?' (a nil value)

повторяется не только для MA, пробовал разные индикаторы, везде не работает если не с первого значения брать расчет
можно править код индикаторов, но может есть решение более правильное, и в data source можно взять последние n значений?...
Что-то похоже ты смешиваешь теплое с мяхким.
>>использую CreateDataSource, далее мне нужны результаты индикаторов для несколько последних свечек
Эта функция просто открывает поток данных. И заказывает массив всех свечек. Один раз.
После этого нужно просто на вызов коллбека (а он вызвается на поступление новых данных) считать свою МАшку.

>>Этот код работает прекрасно, но очень долго, т.к. получается более 2 тысяч свечей:     Скрытый текст       for i=1,ds:Size() do
>> ma_out=func(i, {Period=22, Metod = "EMA", VType="Close", round=2}, ds)
Конечно долго.
Ты пересчитываешь МАшку по 22 свечам, в цикле ПО ВСЕМ доступным свечкам.
Хотя, для расчета последних трех значений МА(22) тебе нужно не более 22+3 свечей.

Почему неработает этот код:
>> for i=ds:Size()-3 ,ds:Size() do
>> ma_out=func(i, {Period=22, Metod = "EMA", VType="Close", round=2}, ds)
Я тебе с лету сказать не могу, но вероятно ошибка где-то внутри =func(...)

Используй коллбеки, Люк!
В мануале на луа есть функция
BOOLEAN res SetUpdateCallback (FUNCTION callback_function)
Думаю, это решит твой вопрос :)
 
действительно, какая-то каша.
На самом деле,
скорость вычисление скользящих не зависит от числа свечей ,
фактически для этого надо знать лишь две свечи в MA и одну в EMA.
Просто надо изучить цифровую обработку сигналов.
 
Цитата
Николай Камынин написал:
надо знать лишь две свечи в MA и одну в EMA.
Это если есть результаты предыдущих вычислений.
А если они ==0, то не получится.
 
Цитата
Imersio Arrigo написал:
Цитата
Николай  Камынин   написал:
надо знать лишь две свечи в MA и одну в EMA.
Это если есть результаты предыдущих вычислений.
А если они ==0, то не получится.
Это лишь в начале т е при запуске. но в это время данные поступают с сервера и они рассчитываются в реальном времени. И условия остаются теже  - не более двух свечей.
 
вопрос у меня отпал сам собой
я в дебажных целях писал все значения в мессаджи
когда убрал это, расчеты стали на два порядка быстрее, и проблема больше не актуальна (т.е., время отнимали не расчеты как я думал, а мессаджи)
 
Цитата
tdm написал:
вопрос у меня отпал сам собой
я в дебажных целях писал все значения в мессаджи
когда убрал это, расчеты стали на два порядка быстрее, и проблема больше не актуальна (т.е., время отнимали не расчеты как я думал, а мессаджи)
Об этом уже говорилось и здесь и на quik2dde.ru ("немного о message")
Да, дествительно. Эта функция - изрядно тормозная. Но, такова её реализация.
 
Инвестиционные услуги, связанные с торговлей бинарными опционами. Станьте трейдером, партнером или вкладчиком и зарабатывайте вне зависимости от выбранной роли https://my.robooption.com/?a=xtz
Страницы: 1
Читают тему
Наверх