Все индикаторы на Lua

Страницы: Пред. 1 2
RSS
Все индикаторы на Lua
 
Не нашел ни одного скрипта отслеживающего такой параметр, как количество сделок, на ммвб он доступен.   :what:
 
Здравствуйте, Kander.

Если речь идёт о параметре "Количество сделок за сегодня", можно написать такой скрипт, которые будет работать с этим параметром, при условии, что сервер брокера получает этот параметр из торговой системы МБ.
Проверить это можно по списку доступных параметров для рассматриваемого класса в окне настройки фильтра списка заказываемых классов и инструментов и параметров ( в терминалах 8.12 и новее - это пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/Котировки).

Если параметр недоступен - можно обратиться к брокеру и уточнить у него, возможно ли обеспечить трансляцию этого параметра.
Если параметр доступен - Вы можете заказать его терминалом, например, явным образом отметив параметр для заказа, или используя умный заказ данных. Название параметра для заказа данных по нему с использованием функций QLUA - "NUMTRADES".
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, Kander.

Если речь идёт о параметре "Количество сделок за сегодня", можно написать такой скрипт, которые будет работать с этим параметром, при условии, что сервер брокера получает этот параметр из торговой системы МБ.
Проверить это можно по списку доступных параметров для рассматриваемого класса в окне настройки фильтра списка заказываемых классов и инструментов и параметров ( в терминалах 8.12 и новее - это пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/Котировки).

Если параметр недоступен - можно обратиться к брокеру и уточнить у него, возможно ли обеспечить трансляцию этого параметра.
Если параметр доступен - Вы можете заказать его терминалом, например, явным образом отметив параметр для заказа, или используя умный заказ данных. Название параметра для заказа данных по нему с использованием функций QLUA - "NUMTRADES".
Хотелось бы индикатор, показывающий среднюю величину сделки, только не за сегодня, а "общее количество", только без всяких сглаживаний. Аналогично индикатору объема, с возможностью вывода в виде линии, гистограммы и т.д. Раз его не существует, значит и согласовывать не надо не с кем по поводу авторских прав. Если есть возможность добавьте его в quik или хотя бы в архив
 
Kander,

Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.

Пожелания по написанию и добавлению скриптов в рабочее место QUIK мы не принимаем, т.к. эта задача может быть решена пользователем самостоятельно.
Вы можете найти готовое решение, заказать его у какого-либо разработчика, либо создать его самостоятельно.

Документация по функциям QLUA и примеры доступны для скачивания с нашего сайта по ссылке:
Документация по языку LUA в QUIK и примеры
Примеры функций расчета индикаторов терминала QUIK на языке Lua.
 
Цитата
Andrey Bezrukov написал:
Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.
Странно, в справке к приложению написано совсем другое: Контрактов во всех сделках - Общее количество - Объем совершенных в текущей сессии сделок, штук. Вот такой параметр доступен для построения графика. Где неправда?
 
Kander,

Противоречия нет. Ваш первый вопрос:
Цитата
Kander написал:
Не нашел ни одного скрипта отслеживающего такой параметр, как количество сделок, на ммвб он доступен.  
Мы Вам отвечаем, что да, параметр, отражающий количество сделок за сегодня есть,  доступен обращения при помощи функций QLUA по строке "NUMTRADES".

Далее, Вы уточняете, что Вас интересуют данные не только за текущую сессию, а за весь период торгов, что мы поняли как, условно - "несколько сессий, много прошедших сессий".
Цитата
Kander написал:
Хотелось бы индикатор, показывающий среднюю величину сделки, только не за сегодня, а "общее количество"

На что мы ответили, что такого параметра ТС не транслирует, и в QUIK такого параметра нет. Вы можете только самостоятельно как-то выполнять накопление и учёт этих данных из сессии в сессию. Или построить график истории изменения параметра без использования lua-индикаторов. Возможно, если брокер ведёт накопление данных истории изменения этого параметра - Вы также получите и график за прошлые торговые сессии. Но этот момент лучше уточнить непосредственно у брокера. Для этого при добавлении графика измените источник данных с обезличенных сделок на изменения этого параметра

То, что Вы приводите в последнем сообщении - это другой параметр, но он тоже отображает данные только за текущую торговую сессию, и да, его можно использовать в скриптах на LUA и функциях QLUA. Чтобы узнать его текстовый идентификатор - Вы можете добавить его в таблицу текущих торгов и выполнить по DDE в Excel с формальными заголовками. Заголовок, указанный для этого столбца и будет его строковым идентификатором. Этот же подход можете применять и для других параметров. И по нему также можно построить график истории изменения параметра без использования LUA-индикатаров


Если же Вы имеете что-то другое и с нашей стороны имеет место недопонимание Вашей задачи - просьба подробно описать что именно Вам нужно.
 
Цитата
Andrey Bezrukov написал:
На что мы ответили, что такого параметра ТС не транслирует, и в QUIK такого параметра нет. Вы можете только самостоятельно как-то выполнять накопление и учёт этих данных из сессии в сессию.
Несколько раз перечитал, ваш ответ и нахожусь в недоумении. Что бы не припираться, я покажу скрин, а вы ответьте, что показывает параметр на графике "общее количество". Это разрешит обсуждаемый вопрос.

Скрытый текст


В справке к приложению написано, что он показывает - Объем совершенных в текущей сессии сделок, штук
Если это не количество сделок за каждую сессию, как написано в справке, то что?
 
Kander,

Контрактов во всех сделках - Общее количество - Объем совершенных в текущей сессии сделок, штук.
 
Цитата
Andrey Bezrukov написал:
Контрактов во всех сделках - Общее количество - Объем совершенных в текущей сессии сделок, штук.
Контракт и переводится как сделка. Вы можете дать вменяемый ответ, можно ссылкой на статью. Почему из вас надо сутками ответ выбивать?

О каких контрактах идет речь на скрине выше(акции Five)?
 
Цитата
Kander написал:
Цитата
Andrey Bezrukov написал:
Контрактов во всех сделках - Общее количество - Объем совершенных в текущей сессии сделок, штук.
Контракт и переводится как сделка. Вы можете дать вменяемый ответ, можно ссылкой на статью. Почему из вас надо сутками ответ выбивать?

О каких контрактах идет речь на скрине выше(акции Five)?
контракт - это обязательство, которое возникает вследствие сделки по определённым активам. Например, на акциях Газпрома возникает позиция по акциям, на фьючерсах Газпрома возникает позиция по контрактам. Контракт есть обязательство выполнить определенные действия к какому то сроку (например купить или продать акции)

не нужно наезжать, сначала имеет смысл определиться в терминологии.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
не нужно наезжать, сначала имеет смысл определиться в терминологии.
Я не наезжаю, а как раз пытаюсь разобраться, если бы вы нормально, так что бы не возникало вопросов, заполнили справочную информацию, мы бы не тратили свое время на выяснение.

Мы сейчас не говорим о срочном рынке(деривативах), фьючерсах или опционах, мы говорим о фондовом рынке, о рынке акций. Конкретно о акциях компании "Пятерочка", график которых на скрине выше. Где есть сделки, лоты и акции, ну и их денежное выражение в валюте(лента сделок)

Откуда взялись контракты? Откуда берется информация о этих контрактах? В общей ленте сделок нет никаких контрактов. В чем измеряются эти контракты и как они соотносятся со сделками?
 
Кто-нибудь может поделиться индикатором скользящей средней Laguerre?
Я бы и сам мог написать, но формулу не до конца понял. Может, кто-нибудь может подсказать?

L0 = (1 – gamma)*Price + gamma*L0[1]
Price = ((H+L)/2)

H и L это максимум и минимум свечи? L0[1] это значение для предыдущей свечи?
 
Цитата
Dobrota написал:
Кто-нибудь может поделиться индикатором скользящей средней Laguerre?
Я бы и сам мог написать, но формулу не до конца понял. Может, кто-нибудь может подсказать?

L0 = (1 – gamma)*Price + gamma*L0[1]
Price = ((H+L)/2)

H и L это максимум и минимум свечи? L0[1] это значение для предыдущей свечи?
Судя по всему, приведённая вами формула есть разновидность скользящей средней по средним ценам свечи.

Laguerre(0) = (1-gamma) * (High+Low)/2 + gamma * Laguerre(-1)
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
   i=CountBars-1;
  while(i>=0)
  {
     L0A = L0;
     L1A = L1;
     L2A = L2;
     L3A = L3;
     L0 = (1 - gamma)*Close[i] + gamma*L0A;
     L1 = - gamma *L0 + L0A + gamma *L1A;
     L2 = - gamma *L1 + L1A + gamma *L2A;
     L3 = - gamma *L2 + L2A + gamma *L3A;

     CU = 0;
     CD = 0;
     
     if (L0 >= L1) CU = L0 - L1; else CD = L1 - L0;
     if (L1 >= L2) CU = CU + L1 - L2; else CD = CD + L2 - L1;
     if (L2 >= L3) CU = CU + L2 - L3; else CD = CD + L3 - L2;

     if (CU + CD != 0) LRSI = CU / (CU + CD);
     val1[i] = LRSI;
 i--;
}
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Вернулся к попыткам написать скользящую среднюю LaguerreMA. Не могу найти ошибку в коде(в программировании полный новичок) - индикатор постепенно улетает куда-то в космос после нескольких первых значений. По аналогичной схеме написал уже код для других 5-6 индикаторов, там все четко отображает.
Часть кода:

function Init()
local index_1 = 0
myEMA = cached_LMA()
return 1
end

function OnCalculate(index)
if index == 0 then
return nil
end
if index ~= index_1 then
index_1 = index
return myLMA(index, Settings.value_type, Settings.gamma)
end
end

function cached_LMA()
local cache={}
local L0 = {}
local L1 = {}
local L2 = {}
local L3 = {}

return function(ind, v_t, kk)

local v_type = v_t
local index = ind
local k = kk

if index == 1 then
L0[index] = dValue(index, v_type)
L1[index] = dValue(index, v_type)
L2[index] = dValue(index, v_type)
L3[index] = dValue(index, v_type)
cache[index] = dValue(index, v_type)
else
L0[index] = (1 - k)* dValue(index-1, v_type) + L0[index-1]
L1[index] = L0[index-1] + k * L1[index-1] - k * L0[index]
L2[index] = L1[index-1] + k * L2[index-1] - k * L1[index]
L3[index] = L2[index-1] + k * L3[index-1] - k * L2[index]
cache[index] = (L0[index]+2*L1[index]+2*L2[index]+L3[index])/6

end

return cache[index]
end
end

Функция dValue просто определяет значение цены в зависимости от индекса и типа цены. Можете подсказать, в чем ошибка?
 
В начале myLMA = cached_LMA()  конечно
 
Возникла проблема, что не подгружаются вообще никакие индикаторы. Может быть я что-то делаю не так?
QUIK 8.13.3.1 предлагает на выбор запуск Lua 5.4.1 или Lua 5.3.5
Например, копирую код с этого форума от 24.05.2019 16:47:09 в файл с расширением .lua
Сервис-Луа скрипты-добавить. Жму на любом графике Добавить график (индикатор) и в списке нет нового имени...
 
Разобрался. QLUA.chm в помощь. ...расположены в папке LuaIndicators в каталоге терминала. Если папка отсутствует в
каталоге, необходимо создать ее вручную. Список скриптов не доступен из
диалога Сервисы / LUA скрипты....  
 
Индикатор RSI вылетает с ошибкой


эта строка выглядит так
Код
local val_Up = RSI_MA_U(it.l, {Period=P, Metod = M, VType=ANY}, {[it.l] = Up})

Вот код индикатора, уж не знаю какая это редакция, может не свежая.
https://disk.yandex.ru/d/jW-6QI-KglPbjw

Вызывается следующим блоком:
Код
func = RSI() ; 
local rsi_count={}                     
nk=ds[real]:Size()

for i=1,nk do rsi_count[i]=func(i, {Period=rsi_period, VType="Typical"}, ds[real]) end
   
 if rsi_count[nk]~=nil then      
  rsi0=rsi_count[nk]
  rsi1=rsi_count[nk-1]
  rsi2=rsi_count[nk-2]
  rsi3=rsi_count[nk-3]
  rsi4=rsi_count[nk-4]
  max_rsi=math.max(rsi0,rsi1,rsi2,rsi3,rsi4)
  in_rsi=math.min(rsi0,rsi1,rsi2,rsi3,rsi4)
 else
  mm (real.." "..nk.." rsi_count[num_candles]=nil") ; sleep (100)
 end

Подскажите пожалуйста, в чём может быть дело.
 
P.S. скрипт работает и всё считает нормально, но в какой-то момент вылетает с этой ошибкой.
 
Добрый день!


Может быть есть готовый индикатор пропущенных данных  для графиков ?  https://forum.quik.ru/forum13/topic7059/
Если нет,  возможно его размещение средствами LUA в заголовке окна или только в области графика?
[img]data:image/jpeg;base64,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[/img][img]data:image/jpeg;base64,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[/img]
 
Добрый день!

Может быть есть готовый индикатор пропущенных данных  для графиков ?  https://forum.quik.ru/forum13/topic7059/
Если нет,  возможно его размещение средствами LUA в заголовке окна или только в области графика?

https://ie.wampi.ru/2022/01/08/_LOST-DAT-IND1_.jpg
https://ie.wampi.ru/2022/01/08/_LOST-DAT-IND2_.jpg
 
Цитата
Andrey Bezrukov написал:
Kander,

Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.

Пожелания по написанию и добавлению скриптов в рабочее место QUIK мы не принимаем, т.к. эта задача может быть решена пользователем самостоятельно.
Вы можете найти готовое решение, заказать его у какого-либо разработчика, либо создать его самостоятельно.

Документация по функциям QLUA и примеры доступны для скачивания с нашего сайта по ссылке:
Документация по языку LUA в QUIK и примеры
Примеры функций расчета индикаторов терминала QUIK на языке Lua .
Добрый день!
Скачал папку LuaIndicators, вставил в QUIK. Но при открытии программы, новые индикаторы не появляются. Меня интересует только  индикатор Зигзаг. Вопрос, как мне его добавить в программу?
 
валерий дзюбенко, здравствуйте.

Предлагаем ознакомиться с информацией, описанной в документации QLUA.chm в разделе "Индикаторы технического анализа" в пункте "Общие сведения".
 
Цитата
валерий дзюбенко написал:
Цитата
Andrey Bezrukov написал:
Kander ,

Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.

Пожелания по написанию и добавлению скриптов в рабочее место QUIK мы не принимаем, т.к. эта задача может быть решена пользователем самостоятельно.
Вы можете найти готовое решение, заказать его у какого-либо разработчика, либо создать его самостоятельно.

Документация по функциям QLUA и примеры доступны для скачивания с нашего сайта по ссылке:
 Документация по языку LUA в QUIK и примеры  
 Примеры функций расчета индикаторов терминала QUIK на языке Lua  .
Добрый день!
Скачал папку LuaIndicators, вставил в QUIK. Но при открытии программы, новые индикаторы не появляются. Меня интересует только  индикатор Зигзаг. Вопрос, как мне его добавить в программу?
откройте в текстовом редакторе исходники индикаторов.
уберите лишние.
сохраните под именем индикатора.
поместите его в папку
...QUIK\LuaIndicators
 
Всем добрый день!

Скажите, пожалуйста, встречал ли кто-нибудь индикатор, который может отобразить график зеркально - цена в реальности идёт вверх, а на графике - вниз?
Такие индикаторы есть - например, для MetaTrader - ReverseSymbol https://www.mql5.com/ru/code/9390
Для другой программы он называется Mirror bars.

Заранее спасибо!
 
Добрый день, понадобился для Quik индикатор WMA, скопировал всю папку с индикаторами в Quik, при выборе MA индикатора программа подвисает на некоторое время с ошибкой.

...\LuaIndicators\MA.lua:234: attempt to index a nil value (global 'arg')

в чем может быть дело? Штатные индикаторы MA нормально работают.

Quik версия 8.13.1.16

Спасибо.
 
Денис, добрый день.

В настройках Рабочего места QUIK (Основные настройки (F9) / Lua скрипты) выберите версию Lua для скриптов-индикаторов 5.3.5.
 
Цитата
Anton Belonogov написал:
Денис, добрый день.

В настройках Рабочего места QUIK ( Основные настройки (F9) / Lua скрипты ) выберите версию Lua для скриптов-индикаторов 5.3.5.
Спасибо за ответ, но у меня так и стоит в настройках 5.3.5.. Решил поменять на 5.4.1 - та же ошибка.
 
Денис,

Верно понимаем, что скрипты индикаторов были загружены с нашего сайта (https://arqatech.com/upload/iblock/398/INDICATORS.zip)?
Выберите версию Lua 5.3.5 для скриптов-индикаторов, удалите из окна графика ранее добавленные Lua-индикаторы, затем добавьте нужный индикатор повторно.
 
Цитата
Anton Belonogov написал:
Денис,

Верно понимаем, что скрипты индикаторов были загружены с нашего сайта ( https://arqatech.com/upload/iblock/398/INDICATORS.zip )?
Выберите версию Lua 5.3.5 для  скриптов-индикаторов , удалите из окна графика ранее добавленные Lua-индикаторы, затем добавьте нужный индикатор повторно.
Нет, я ваши не нашел, скачал такую же папку с гитхаба, они там ссылались на эту ветку форума.
Поставил вашу папку - все завелось сразу.
Сравнил файлы MA.lua, есть различие примерно в 400 байт, ваш файл больше по размеру и работает.
Спасибо за помощь.
 
добрый день помгите пожалуйста, делаю индикатор для quik Хай лоу пред дня + ATR , вот как мне прибавить значение atr к линии хая и лоя? что совсем не пойму

Settings =
{   Name = "1-HLDAY+ATR",
  line =
  {   {   Name = "HIGH",
        Color = RGB(0,200,0),
        Type = TYPE_DASH,
        Width = 2
     },
     {   Name = "LOW",
        Color = RGB(200,0,0),
        Type = TYPE_DASH,
        Width = 2
     }
  }
}

function Init()
func = ATR()
return #Settings.line
end

function OnCalculate(Index)
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
if Out then
local prev = GetValue(Index-1, 2) or GetValue(Index-1, 3) or 0
if Out > prev then
return HL,Out,nil
else
return HL,nil,Out
end
else
return HL,nil,nil
end
end

function ATR() --Average True Range ("ATR")
local f_TR = TR()
local tmp = {pp=nil, p=nil}
local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 14)
if (P > 0) then
if I == 1 then
tmp = {pp=nil, p=nil}
it = {p=0, l=0}
end
local tr = f_TR(I,ds)
if CandleExist(I,ds) then
if I~=it.p then
it = {p=I, l=it.l+1}
tmp.pp = tmp.p
end
if it.l < P then
tmp.p = (tmp.pp or 0) + tr
elseif it.l == P then
tmp.p = ((tmp.pp or 0) + tr) / P
return tmp.p
elseif it.l > P then
tmp.p = ((tmp.pp or 0) * (P-1) + tr) / P
return tmp.p
end
end
end
return nil
end
end

function TR() --True Range ("TR")
local it = {pp=0, p=0, l=0}
return function (I, ds)
if I == 1 then
it = {pp=0, p=0, l=0}
end
if CandleExist(I,ds) then
if I~=it.p then it={pp=it.p, p=I, l=it.l+1} end
if it.l == 1 then
return math.abs(GetValueEX(it.p,DIFFERENCE, ds))
else
return math.max(math.abs(GetValueEX(it.p,DIFFERENCE, ds)),
math.abs(GetValueEX(it.p,HIGH,ds) - GetValueEX(it.pp,CLOSE,ds)),
math.abs(GetValueEX(it.pp,CLOSE,ds)-GetValueEX(it.p,LOW,ds)))
end
end
return nil
end
end


SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

function CandleExist(I,ds)
return (type©=="function" and C(I)~=nil) or
(type(ds)=="table" and (ds[I]~=nil or (type(ds.Size)=="function" and (I>0) and (I<=ds:Size()))))
end

function Squeeze(I,P)
return math.fmod(I-1,P+1)
end

function ConvertValue(T,...)
local function r(V, R)
if R and string.upper®== "ON" then R=0 end
if V and tonumber® then
if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R
else return math.ceil(V * 10^R - 0.5) / 10^R end
else return V end
end
local arg = {...}
arg.n = select('#', ...)
if arg.n > 0 then
for i = 1, arg.n do
arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off")
end
return unpack(arg)
else return nil end
end


function GetValueEX(I,VT,ds)
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
if VT == OPEN then --Open
return (O and O(I)) or (ds and ds:O(I))
elseif VT == HIGH then --High
return (H and H(I)) or (ds and ds:H(I))
elseif VT == LOW then --Low
return (L and L(I)) or (ds and ds:L(I))
elseif VT == CLOSE then --Close
return (C and C(I)) or (ds and ds:C(I))
elseif VT == VOLUME then --Volume
return (V and V(I)) or (ds and ds:V(I))
elseif VT == MEDIAN then --Median
return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
elseif VT == TYPICAL then --Typical
return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
elseif VT == WEIGHTED then --Weighted
return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4)
elseif VT == DIFFERENCE then --Difference
return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
else --Any
return (ds and ds[I])
end
return nil
end
function Init()
   return #Settings.line
end
local atr = tonumber(function ATR())
local hl =
{   -- year
  -- month
  -- day
  -- high
  -- low
}


function OnCalculate(index)

  local dt = T(index)
     if not C(index) then
     return
  end
   local trdt = getTradeDate()  
 
  if dt.day ~= trdt.day or dt.month ~= trdt.month or dt.year ~= trdt.year then
 
     if dt.day ~= hl.day or dt.month ~= hl.month or dt.year ~= hl.year then
           hl.year = dt.year
         hl.day = dt.day
         hl.month = dt.month
         hl.high = H(index)
         hl.low = L(index)
     else
         hl.high = (math.max(hl.high,H(index))) + atr
         hl.low = math.min(hl.low,L(index))
     end
 
  else
     return hl.high,hl.low
 
  end
 
end
 
Добрый день!
Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.
 
Цитата
написал:
Добрый день!
Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.
indicators.zip  Это какой-то архив?
Вы где его взяли?
Вы думаете, что все должны знать, что у Вас в этом архиве?
 
Цитата
Цитата
Смнаписал:
Цитата
написал:
Добрый день!
Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.
indicators.zip  Это какой-то архив?
Вы где его взяли?
Вы думаете, что все должны знать, что у Вас в этом архиве?
Смотрите пост 80.Там есть ссылка, но там только lua 5.3, который не работает вместе с 5.4. Один индикатор psar я починил заменой  unpack(arg) на  table.unpack(arg), но не все можно так просто починить, нужно к автору этих индикаторов обращаться. И было бы здорово переделать их под 5.4, а не чтобы каждый сам их прилаживал под себя. Хотя и так тоже наверное можно. Вот переделанный мной Psar под lua 5.4
Код
Settings = {
Name = "*PSAR (Parabolic SAR)", 
Step = 0.02,
MaxStep = 0.2, 
line = {{
      Name = "Horizontal line",
      Type = TYPE_LINE, 
      Color = RGB(140, 140, 140)
      },
      {
      Width = 3,
      Name = "PSAR_Up", 
      Type = TYPE_POINT, 
      Color = RGB(221, 44, 44)
      },
      {
      Width = 3,
      Name = "PSAR_Down", 
      Type = TYPE_POINT, 
      Color = RGB(0, 206, 0)
      }
      },
Round = "off",
Multiply = 1,
Horizontal_line="off"
}

function Init()
   func = PSAR()
   return #Settings.line
end

function OnCalculate(Index) 
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
   if Out then
      if Out > ((H(Index)-L(Index))/2)+L(Index) then
         return HL,Out,nil
      else
         return HL,nil,Out
      end
   else
      return HL,nil,nil
   end
end

function PSAR() --Parabolic SAR ("PSAR")
   local tmp = {pp=nil, p=nil}
   local it = {ppp=0, pp=0, p=0, l=0}
return function (I, Fsettings, ds)
local Out = nil
local Fsettings=(Fsettings or {})
local Step = (Fsettings.Step or 0.02)
local MaxStep = (Fsettings.MaxStep or 0.2)
   if I == 1 then
      tmp = {pp=nil, p=nil}
      it = {ppp=0, pp=0, p=0, l=0}
   end
   if CandleExist(I,ds) then
      if I~=it.p then 
         it={ppp=it.pp, pp=it.p, p=I, l=it.l+1}
         tmp.pp = tmp.p
      end
      local cand = {ppp=nil, pp=nil, p=nil}
      tmp.p = {Val = nil, Step = 0, Ext = 0, Long = true}
      cand.p = {H = GetValueEX(it.p,HIGH,ds), L = GetValueEX(it.p,LOW,ds)}
      if it.l==2 then
         tmp.p = {Val = GetValueEX(it.p,HIGH,ds), Step = Step, Ext = cand.p.H, Long = true}
      end
      if it.l > 2 then
         local Revers = false
         tmp.p.Val = tmp.pp.Val + tmp.pp.Step * (tmp.pp.Ext - tmp.pp.Val)
         tmp.p.Long = tmp.pp.Long
         tmp.p.Ext = tmp.pp.Ext
         tmp.p.Step = tmp.pp.Step
         if tmp.pp.Long then
            if cand.p.L < tmp.p.Val then
               tmp.p = {Val = tmp.pp.Ext, Step = Step, Ext = cand.p.L, Long = false}
               Revers = true
            end
         else
            if cand.p.H > tmp.p.Val then
               tmp.p = {Val = tmp.pp.Ext, Step = Step, Ext = cand.p.H, Long = true}
               Revers = true
            end
         end
         if not Revers then
            cand.pp = {H = GetValueEX(it.pp,HIGH,ds), L = GetValueEX(it.pp,LOW,ds)}
            cand.ppp = {H = GetValueEX(it.ppp,HIGH,ds), L = GetValueEX(it.ppp,LOW,ds)}
            if tmp.pp.Long then
               if cand.p.H > tmp.pp.Ext then
                  tmp.p.Ext = cand.p.H
                  tmp.p.Step = tmp.pp.Step + Step
                  if tmp.p.Step > MaxStep then tmp.p.Step = MaxStep end
               end
               if cand.pp.L < tmp.p.Val then tmp.p.Val = cand.pp.L end
               if cand.ppp.L < tmp.p.Val then tmp.p.Val = cand.ppp.L end
            else
               if cand.p.L < tmp.pp.Ext then
                  tmp.p.Ext = cand.p.L
                  tmp.p.Step = tmp.pp.Step + Step
                  if tmp.p.Step > MaxStep then tmp.p.Step = MaxStep end
               end
               if cand.pp.H > tmp.p.Val then tmp.p.Val = cand.pp.H end
               if cand.ppp.H > tmp.p.Val then tmp.p.Val = cand.ppp.H end
            end
         end
      end
      return tmp.p.Val
   end
return nil
end
end

SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

function CandleExist(I,ds)
return (type(C)=="function" and C(I)~=nil) or
   (type(ds)=="table" and (ds[I]~=nil or (type(ds.Size)=="function" and (I>0) and (I<=ds:Size()))))
end

function Squeeze(I,P)
   return math.fmod(I-1,P+1)
end

function ConvertValue(T,...)
local function r(V, R) 
   if R and string.upper(R)== "ON" then R=0 end
   if V and tonumber(R) then
      if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R
      else return math.ceil(V * 10^R - 0.5) / 10^R end
   else return V end
end
local arg = {...}
arg.n = select('#', ...)
   if arg.n > 0 then
      for i = 1, arg.n do
         arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off")
      end
      return table.unpack(arg)
   else return nil end
end


function GetValueEX(I,VT,ds) 
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
   if VT == OPEN then         --Open
      return (O and O(I)) or (ds and ds:O(I))
   elseif VT == HIGH then       --High
      return (H and H(I)) or (ds and ds:H(I))
   elseif VT == LOW then      --Low
      return (L and L(I)) or (ds and ds:L(I))
   elseif VT == CLOSE then      --Close
      return (C and C(I)) or (ds and ds:C(I))
   elseif VT == VOLUME then      --Volume
      return (V and V(I)) or (ds and ds:V(I)) 
   elseif VT == MEDIAN then      --Median
      return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
   elseif VT == TYPICAL then   --Typical
      return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
   elseif VT == WEIGHTED then   --Weighted
      return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) 
   elseif VT == DIFFERENCE then   --Difference
      return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
   else                     --Any
      return (ds and ds[I])
   end
return nil
end
 
Артем,  добрый день.

Наши примеры Lua-индикаторов, доступные сейчас на сайте, действительно работают только с Lua версии 5.3.

Мы зарегистрировали Ваше пожелание на добавление индикаторов, совместимых с Lua 5.4. Мы постараемся рассмотреть его и сообщить Вам результаты анализа.
Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
У вас какая-то странная формула у скользящей средней SMMA. Не могли бы вы её расшифровать, а то я запутался в её смысле.
 
Constantin,  добрый день.

Формула SMMA:
SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n,
где Pi - значение цены в i-ом периоде,
SMMAi-1 - значение SMMA в предыдущем периоде,
n - установленное в параметрах индикатора количество периодов.

Если необходимо рассмотреть что-то более подробно, просим Вас уточнить вопрос.
Страницы: Пред. 1 2
Читают тему
Наверх