Евгений, вот кусок кода на LUA для подключения к серверу.
Код
socket=require("socket.core")
tcp = socket.tcp()
tcp:settimeout(1)
local host, port = "127.0.0.1", 1020
if tcp:connect(host, port) then
print("connect OK "..host..":"..port)
else
print("connect Error")
end
...
tcp:close()
Задал этот вопрос в техподдержку московской биоржи. Пполучил ответ. "Заявки будут удовлетворены в хронологической последовательности: первыми уйдут те, что раньше попали в торговую систему."
Делал свою реализацию RSI так что бы она в точности совпадала с реализацией в quik.
Скачал последний файл с примерами реализаций индикаторов.
Посмотрел.
Очень сложный, не читабельный код! Разбираться в алгоритме индикатора по такому коду чрезвычайно сложно.
Комментарии в тексте кода очень бы помогли, а комментариев в коде нет.
Разобрался в вашем коде. Написал свою реализацию RSI намного проще.
Проверил. Результаты RSI она выдает такие же как у вас.
Вот моя реализация RSI.
Код
Settings = {
Name = "rsi",
line = {{
Name = "Horizontal line (top)",
Type = TYPE_LINE,
Color = RGB(140, 140, 140)
},
{Name = "Horizontal line (bottom)",
Type = TYPE_LINE,
Color = RGB(140, 140, 140)
},
{Name = "RSI2",
Type = TYPE_LINE,
Color = RGB(221, 44, 44)
}
},
Horizontal_line="20"
}
function Init()
smoothUp={} --в этом массиве храним сглаженные значения периодов роста
smoothDown={}--в этом массиве храним сглаженные значения периодов падения
return #Settings.line
end
-----------------------------------------------------------
function OnCalculate(Index)
local Out =RSI(Index)
local HL = tonumber(Settings.Horizontal_line)
if HL then
return 50+HL,50-HL,Out
else
return nil,nil,Out
end
end
-----------------------------------------------------------
function RSI(I)-- функция выдает значение RSI для свечи номер I
local valUp,valDown
if I==1 then --Для 1-й свечи результата нет
return
end
local Val=C(I) --Цена закрытия в эту минуту
local ValPrev=C(I-1) --Цена закрытия в предыдущую минуту
if Val>=ValPrev then --Если цена закрытия уувеличилась
valUp=Val-ValPrev
valDown = 0
else
valUp=0
valDown=ValPrev-Val
end
if I==2 then --для 2-й свечи устанавливает сглаженное значение
smoothUp[I]=valUp
smoothDown[I]=valDown
else --Для свечи начиная с 2-й
smoothUp[I]=(smoothUp[I-1]*13+valUp)/14 --Вычисляем сглаженное значение этой свечи для периодов роста
smoothDown[I]=(smoothDown[I-1]*13+valDown)/14 --Вычисляем сглаженное значение этой свечи для периодов падения
end
return 100*smoothUp[I]/(smoothUp[I]+smoothDown[I]) --получаем результирущее значение RSI
end
Как сделать индикатор в LULA, который строит данные на основе цен нескольких источников данных? Сделал простой индикатор, работает
Код
Settings=
{
Name = "obratn", --имя индикатора, с которым он будет отображаться в диалоге:
line = {
{
Name = "obratn",
Color = RGB(200,200,200),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
return 1 -- количество линий индикатора
end
---------------
function OnCalculate(index)
local v=C(index);
if (v>1) then
return 1/v;
else
return nil;
end
end
Хочу что бы индиктор мог брать исходные данные о ценах на другие биржевые товары. Например, что бы индикатор на графике курса рубль/доллар учитывал в формуле стоимость фьючерса по нефти BR-4.16 [Price] в этот же отрезок времени. С помощью каких функций в теле индикатора можно обратиться к стоимости другого товара в этот же отрезок времени?