Здравствуйте. Уважаемые форумчане, необходима ваша помощь. Цель данного кода, найти момент касания определенной линии указанной в таблице t_Lev. Для отслеживания данного момента необходимо применить таблицу t_Sys, которая имеет три значения: 1-коснулись нижней линии; 2- не коснулись ни одной линии; 3-коснулись верхней линии. Нужна именно таблица, что бы знать какая линия была достигнута до перехода в состояние 2, это важно. Условие касание сейчас выставлены заведомо невыполнимые и при этом код не возвращает линии, даже первые значения.
Код
function Init() f_LEVEL= LEVEL()
return #Settings.line
end
function OnCalculate(Index)
local S2Down, S1Down, L1Up, L2Up = f_LEVEL(Index)
return S2Down, S1Down, L1Up, L2Up
end
function LEVEL()
t_Sys={}
t_Sys[1]=3
t_Sys[2]=2
return function (I)
local S2Down, S1Down, L1Up, L2Up = nil, nil, nil, nil
if I>2 then
if t_Sys[#t_Sys]==3 then
S2Down, S1Down, L1Up, L2Up = nil, nil, nil, nil
-- t_Sys[#t_Sys+1]=2
end
if t_Sys[#t_Sys]==2 then --пока касание не произошло
local t_Lev=LINE(I)
S2Down, S1Down, L1Up, L2Up = t_Lev[1], t_Lev[2], t_Lev[3], t_Lev[4]
if H(I)>=t_Lev[#t_Lev] then --произошло касание верхней линии
t_Sys[#t_Sys+1]=3
end
if L(I)<=t_Lev[1] then
t_Sys[#t_Sys+1]=1; --произошло касание нижней линии
end
end
if t_Sys[#t_Sys]==1 then
S2Down, S1Down, L1Up, L2Up = nil, nil, nil, nil
-- t_Sys_W[#t_Sys_W+1]=2
end
end
return S2Down, S1Down, L1Up, L2Up
end
end
function LINE(I)
local t_Lev={}
if I>2 then
if t_Sys[#t_Sys-1]==3 then
for i=1, 2 do
t_Lev[i]=C(I-i)*0.78
t_Lev[i+2]=C(I-i)*1.22
end
end
if t_Sys[#t_Sys-1]==1 then
for i=1, 2 do
t_Lev[i]=C(I-i)*0.78
t_Lev[i+2]=C(I-i)*1.22
end
end
if H(I)>=t_Lev[#t_Lev] then -- здесь сравнение указанно как еще один вариант
-- t_Sys[#t_Sys+1]=3
end
if L(I)<=t_Lev[1] then
-- t_Sys[#t_Sys+1]=1;
end
end
return t_Lev
end
Спасибо Вам, за вашу работу. Полагаю со временем я разберусь в нюансах этого кода. Но я хотел бы уточнить все-таки предыдущие вопросы и наличие простых способов решения работы с таблицами и массивами. У меня возникают сложности не только с анализом фракталов, а так же нахождение предыдущих значений свечей и введение их в отдельную таблицу. Это самый простой пример для наглядности. Если Вы затрудняетесь ответить, то подскажите, где можно посмотреть, помимо учебника Lua Р. Иерузалимски. За ранее благодарю
Здравствуйте Сергей. Я не много изменил Ваш код. Прошу прощения, только начинаю программировать. И по всей видимости не понимаю логики процесса. Задумывалось следующее, что по мере нахождения фрактала он будет помещаться в последнею строчку таблицы определенную для него Frac_H_tmp, а так же индекс свечи Frac_HInd-tmp. Но программа возвращает значение High последней свечи фрактала в терминале. Значит ли это, что при выполнении функции SetValue, таблицы Frac_H_tmp и Frac_HInd-tmp полностью сформированы? В них все значения фрактальных свечей или только одно значение последнего фрактала? Возможно ли найти в таблице 2 фрактала, последний меньше предыдущего и между ними более 10 свечей, не прибегая к обратному циклу for?
Код
function FRACTALS() --Fractals ("FRACTALS")
local H_tmp={}
local L_tmp={}
local Frac_H_tmp={} --запоминаем значения High свечи
local Frac_HInd-tmp={} --запоминаем индекс свечи
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
H_tmp[I]=Value(I,"High",ds)
L_tmp[I]=Value(I,"Low",ds)
if I>=5 then
local S = I-2
local val_h=math.max(unpack(H_tmp,I-4,I))
local val_l=math.min(unpack(L_tmp,I-4,I))
local L = Value(S,"Low",ds)
local H = Value(S,"High",ds)
if (val_h == H) and (val_h >0) then
if ds then return S,S else
Frac_H_tmp[#Frac_H_tmp]=val_h
Frac_HIn-tmp[#Frac_HInd-tmp]=S
SetValue(S, 2, Frac_H_tmp[#Frac_H_tmp])
end
end
end
Простите меня, но я ни чего писать не буду. Все что я хотел уже описано ранее, уважаемыми форумчанами. Все что я хочу от Вас, так это дать возможность на основе, хотя бы, минутного графика, самим отображать свечи любой формы, цвета и тайм-фрейма.
Человеческая мысль безгранична и дает совершенно неожиданные результаты. Вы создали мощнейший инструмент для технического анализа, но все еще встречающимися недоработками и это понятно, Рим не за один день строился. Знаю энтузиаста, который уже сейчас, на основе 10 минутного графика котировок Финама, отображает свечи вышестоящих графиков в режиме реального времени. Предполагаю, что он не один такой и во что это выльется не известно. Не упустите возможность быть лучшими.
Теперь что касается высказываний. Уважаемый Андрей, по существу, от Вас ничего не услышал и по высказанному смею предположить, что про синхронизацию серверов я знаю по больше Вас. И если Вы не являетесь как минимум кандидатом хоть каких-нибудь наук или просто хорошим специалистом в любой сопутствующей области, то как говорится "наш звонок очень ценен для нас, дождитесь ответа оператора"
Уважаемый Новичок, поймите меня неправильно. Реагировать как Вам кажется на недостойные высказывания не по существу (читать личное мнение) человека в интернете (читать анонимно) полагаю глупо. А оскорблять анонимно, считаю подло.
PS. Прошу прощения за длину комментария. Что-то накипело.
Обновленная версия НЕ устранила: 1. Проблему изменения объема задним числом 2. Не совпадения цены открытия на 10 мин и дневном графике. 3. По поводу фильтрации по времени. Вы простите, но не вижу сложности при включенном фильтре просто брать значения из нижестоящего графика и помещать в текущий.
Хотелось бы конечно просто взять и начать пользоваться вашим продуктом, но постоянно натыкаюсь на какие то мелкие недоработки. И ведь они не первый год. Лично меня не интересуют внебиржевые свечи, так как они не отражают мнения большинства участников рынка и не могут показывать объективного согласия между продавцами и покупателями. Вы безусловно проделали колоссальную работу, но позвольте нам, вашим клиентам самим отображать информацию так как нам удобней. Полагаю, что от подобных изменений, выиграем мы все.
Два нижних и один верхний (слева) один и тот же день и терминал. Разница лишь в том что два нижних, это открытие и закрытия 10 мин графика с включенным фильтром (09:59:59-18:39:59). Верхний слева это дневной график. Котировки Финама, дневного графика показали значения открытия свечи вашего 10 мин. графика: 20190208,000000,209.9900000,211.9300000,208.7000000,210.4300000,51480680 Возможно удалить из дневного графика значения последних 10 минут вне биржевой торговли? Значение объемов в пятницу вечером одно, в понедельник утром значения предыдущей свечи уже другое.
Как объяснить разницу показаний свечи между показаниями дневного и 10 минутного графика внутри самого терминала (фильтр по времени установлен везде одинаковый или же был полностью выключен). Какой информации верить? Так же разница наблюдается и при скачивании котировок (в данном случае котировки совпадают с показаниями терминала 10 мин графика). По разному действует фильтр по времени. Если на 10 минутном он отсекает последнюю, внебиржевую свечу, то на дневном он ни как не реагирует. По какой причине изменяется объем, задним числом и возможно это устранить?[img]file:///C:/Users/ATolkushkin/Desktop/Lua/123.jpg[/img]