Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/55: Рейтинг темы: голосов - 55, средняя оценка - 4.51
 Аватар для ASvag
2 / 2 / 0
Регистрация: 18.12.2015
Сообщений: 19

Переделать lua луа индикатор

01.08.2019, 12:46. Показов 12625. Ответов 22

Студворк — интернет-сервис помощи студентам
Помогите переделать луа индикатор. Слишком он сложно написан. А моих знаний хватает на работу с простыми функциями и таблицами. Надо получить последние два значение по которым рисуется линия. И как то добавить еще одно, чтобы линия рисовалась дальше. Сейчас она заканчивается на последнем значении. Может еще одну линию добавить. Но как получить данные! Жду вопросов и помощи, спасибо!


Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Settings = {
Name = "AREND2k", 
Period = 5,
line = {{
        Name = "Horizontal line",
        Type = TYPE_LINE, 
        Color = RGB(144,144,255)
        },
        {
        Name = "FRACTALS - Up", 
        Type = TYPE_LINE, 
        Color = RGB(0, 206, 0)
        },
        {
        Name = "FRACTALS - Down", 
        Type = TYPE_LINE_DOWN, 
        Color = RGB(221, 44, 44)
        }
        },
Round = "off",
Multiply = 1,
Horizontal_line="on"
}
            
            
            
            
            
            
function Init()--количество линий
    func = FRACTALS()--вызов функции
    
    return  #Settings.line--настройка линии
end
 
function OnCalculate(Index)-- функция вызывается при изменении данных индекс
     
     Last_Index=Index
     Last_Size=Size()
    
      --значение линий
    
local Out1,Out2 = func(Index, Settings)--вызов функции фрактал
    --Out 1,2 это индекс свечи на которой будет отображено TYPE_TRIANGLE_UP или   TYPE_TRIANGLE_DOWN из Settings.line
    --message('Hi:'..tostring(ConvertValue(Settings,H(Out1)))
    SetValue(Out1, 2, ConvertValue(Settings,H(Out1)))--Задает значение свойства для указанного объектас дополнительными значениями 
    --индекса для индексированных свойств/преобразует данные согласно настройкам в Settings
          --индекс,номер линии, значение устанавливает на график
    SetValue(Out2, 3, ConvertValue(Settings,L(Out2)))--Задает значение свойства для указанного объекта сохраняет на график
    return tonumber(Settings.Horizontal_line),nil,nil--возвращает линию Индикатор FRACTALS ставит значения на прошлых свечках 
    --а не на текущих в связи с чем, что-либо возвращать в return нельзя.
    --Первый параметр, просто рисует горизонтальную линию. За это отвечает Horizontal_line
end
 
function FRACTALS() --Fractals ("FRACTALS")
    
    local H_tmp={}--локальные переменные запоминаем значения High свечи
    local L_tmp={} -- объявление массива под значения Low
    local it = {[1]=0, l=0}--бъявление массива it где 1-му элементу массива присваиваем значение 0, 
    --элементу с индексом l присваиваем значение 0 в него попадают номера свечек, из которых потом 
    --ищется нужная свечка где и рисуется фрактал
    --message(tostring(Index))
return function (I, Fsettings, ds)--возврат функции от
local Fsettings=(Fsettings or {})--настройки
local P = (Fsettings.Period or 13)--ЛОКАЛЬНАЯ Р
local Size = Size()
if (P>0) and Last_Index>=Last_Size-30 then  --период больше нуля
    if I == 1 then
        
        H_tmp={}
        L_tmp={}
        it = {[1]=0, l= 0 } 
        
    end
    if CandleExist(I,ds) then
    
        if I~=it[Squeeze(it.l,P)] then
            it.l = it.l + 1
            it[Squeeze(it.l,P)] = I--чтобы сжать массив it. 
                                   --нет смысла хранить в массиве все свечки, если для расчета индикатора нужны только свечки за 
                                   --указанный период (переменная P)
        end
        local Ip,Ipppp = Squeeze(it.l,P),Squeeze(it.l,P-1)+1
        local nP = math.floor(P/2)*2+1
        H_tmp[Ipppp] = GetValueEX(it[Ip],HIGH,ds)
        L_tmp[Ipppp] = GetValueEX(it[Ip],LOW,ds)
        if it.l >= nP then --Здесь  производится непосредственно расчет фрактала, т.е. на основании значения переменной S квик
                            --поймет на какой свече выводить фрактал
            local S = it[Squeeze(it.l-nP+1+math.floor(nP/2),P)]
            local val_h=math.max(unpack(H_tmp))
            local val_l=math.min(unpack(L_tmp))
            local L = GetValueEX(S,LOW,ds)
            local H = GetValueEX(S,HIGH,ds)
            if (val_h == H) and (val_h >0) 
                and (val_l == L) and (val_l > 0) then
                    return S,S
            else
                if (val_h == H) and (val_h > 0) then
                    return S,nil
                end
                if (val_l == L) and (val_l > 0) then
                    return nil,S
                end
            end
        end
    end
end
return nil,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
    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
Миниатюры
Переделать lua луа индикатор  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2019, 12:46
Ответы с готовыми решениями:

Работа с вебсокетами в луа в windows
Всех приветствую, ребята помогите по вопросу: Вообщем встала необходимость получать для своего скрипта с некоторых сайтов инфу по wss:// ...

Lua наследование, lua ооп
Подскажите пожалуйста, как наследовать класс? Не получается выдаёт ошибку local car = {} -- Прежде чем создавать экземпляры объекта,...

луа скрипты
подскажите пожалуйста, как выполнить луа скрипт на с++ (в ВС 2012), какие библиотеки нужно подключать и т.д. прошу привести,пример...

22
 Аватар для ASvag
2 / 2 / 0
Регистрация: 18.12.2015
Сообщений: 19
11.08.2019, 17:15  [ТС]
Студворк — интернет-сервис помощи студентам
Curry, Всё, сделал как хотел. А понимать сложно, потому что я неправильно думаю как надо решать задачу. Плюс вот когда я пишу, я вроде знаю про что и как-то пропускаю подробности. Сам когда перечитываю, понимаю что не понятно что спрашивал. Потом когда разберусь в вопросе.Еще раз спасибо.
Миниатюры
Переделать lua луа индикатор  
0
Модератор
 Аватар для Curry
5164 / 3519 / 536
Регистрация: 01.06.2013
Сообщений: 7,646
Записей в блоге: 9
11.08.2019, 17:27
Цитата Сообщение от ASvag Посмотреть сообщение
А понимать сложно, потому что я неправильно думаю как надо решать задачу.
И ещё потому что путаетесь в терминах.
1
 Аватар для ASvag
2 / 2 / 0
Регистрация: 18.12.2015
Сообщений: 19
14.08.2019, 13:12  [ТС]
Вот код для получения точек и расчет.

Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function OnCalculate(Index)-- функция вызывается при изменении данных 
       ITsv=Size()    
      --значение         
 local Out1,Out2 = func(Index, Settings)--вызов функции фрактал
 if  Out1~=nil and IH1==0 and IH2==0
 then IH1=Out1; Hi1=H(Out1) end  
 if Out1~=nil and IH1~=0 and  IH2==0 
 then IH2=Out1; Hi2=H(Out1) end 
 if Out1~=nil and IH2~=0 and IH1~=0 and Out1>IH2
 then IH1=IH2; Hi1=Hi2; IH2=Out1;Hi2=H(Out1)
 end  
   if  IH1~=0 and --Индекс точки первой
       Hi1~=0 and -- Цена фрактала первой точки 
       Hi2~=0 and --Цена фрактала второй точки(последней)
       IH2~=0       --Индекс точки второй
  then
     PrHi=math_round((((ITsv-IH1)*((Hi1-Hi2)/(IH1-IH2)))+Hi1),2)
 end
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2019, 13:12

Как можно использовать функции написанные на луа
Попробовал подключить - получилось, но использовать функции почему то не получается (скорее всего не могу догадатся как это сделать),...

Как передать из кода луа в программу на с++ массив чисел
Здравствуйте! Может немного не в тему, но решил написать здесь. В общем, передо мною стоит задача передать из кода луа в программу на с++...

При запуске МФУ epson l210 поочередно маргает индикатор кнопки включения и индикатор чернил
при запуске МФУ epson l210 поочередно маргает индикатор кнопки включения и индикатор чернил при этом головка постоянно передвигается...

Ремонт ПММ Miele G1023 U, Световой индикатор Код = мойка, сушка и индикатор конца мигают одновре
Здравствуйте ! Кто не будь сталкивался с такой проблемой. Пять секунд после старта высвечивается : Световой индикатор Код = мойка,...

надо переделать задачу она уже решена ну ее нужно переделать
вот задача const n=4; var a:array of integer; i,s:integer; begin for i:=1 to n do begin write('Введите ',i,'-й элемент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru