Аватар для ASvag
2 / 2 / 0
Регистрация: 18.12.2015
Сообщений: 19

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

01.08.2019, 12:46. Показов 12674. Ответов 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
5165 / 3527 / 536
Регистрация: 01.06.2013
Сообщений: 7,676
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru