sav 312, Можно, для этого достаточно переделать условие "if Up and Down then" так чтобы оно срабатывало в нужный для Ваших целей момент. например добавить счетчик, который при нужном количестве 2 вызовет break
Sergey Gorokhov написал: sav 312 , Можно, для этого достаточно переделать условие "if Up and Down then" так чтобы оно срабатывало в нужный для Ваших целей момент. например добавить счетчик, который при нужном количестве 2 вызовет break
Sergey Gorokhov написал: sav 312 , Можно, для этого достаточно переделать условие "if Up and Down then" так чтобы оно срабатывало в нужный для Ваших целей момент. например добавить счетчик, который при нужном количестве 2 вызовет break
Примерно понял, сейчас попробую. Спасибо.
Понять понял, а сделать не могу)) Может пример подкинете? В настоящий момент нахожу FRAC_UP и FRAC_DOWN. А надо ещё FRAC_UP_2, FRAC_DOWN_2, FRAC_UP_3 и FRAC_DOWN_3.
sav 312, Прошу понять что написание кода на заказ не является нашей задачей. Если есть проблема, готовы помочь ее решить. Но если проблемы нет, а надо написать код то увы. Что именно не получается?
Sergey Gorokhov написал: sav 312 , Прошу понять что написание кода на заказ не является нашей задачей. Если есть проблема, готовы помочь ее решить. Но если проблемы нет, а надо написать код то увы. Что именно не получается?
Alex Green, В данной теме обсуждается Lua индикатор фракталов, там такая возможность есть. Во встроенном индикаторе такой возможности не предусмотренно.
Здравствуйте.Есть вопрос по индикатору фрактал который есть в доступе в файловом архиве с индикаторами.Конкретно по этому куску кода
function FRACTALS() --Fractals ("FRACTALS") local H_tmp={} local L_tmp={} local it = {[1]=0, l=0}
Правильно ли я понимаю что local H_tmp={} -- объявление массива под значения High local L_tmp={} -- объявление массива под значения Low local it = {[1]=0, l=0} -- объявление массива it где 1-му элементу массива присваиваем значение 0, элементу с индексом l присваиваем значение 0
Aidar написал: local H_tmp={} -- объявление массива под значения High local L_tmp={} -- объявление массива под значения Low
Да верно.
Цитата
Aidar написал: local it = {[1]=0, l=0} -- объявление массива it где 1-му элементу массива присваиваем значение 0, элементу с индексом l присваиваем значение 0
Вы говорите очевидные вещи. Другой вопрос зачем нужен этот массив. Как можно заметить по коду в него попадают номера свечек, из которых потом ищется нужная свечка где и рисуется фрактал.
function Squeeze(I,P)
return math.fmod(I-1,P+1)
end
Конкретно в приведенной части кода она нужна для того чтобы сжать массив it. нет смысла хранить в массиве все свечки, если для расчета индикатора нужны только свечки за указанный период (переменная P).
function OnCalculate(Index) local Out1,Out2 = func(Index, Settings) SetValue(Out1, 2, ConvertValue(Settings,H(Out1))) SetValue(Out2, 3, ConvertValue(Settings,L(Out2))) return tonumber(Settings.Horizontal_line),nil,nil end
Я так понимаю что Out 1,2 это индекс свечи на которой будет отображено TYPE_TRIANGLE_UP или TYPE_TRIANGLE_DOWN из Settings.line ? Мне не совсем понятно про ConvertValue(Settings,H(Out1)) и return tonumber(Settings.Horizontal_line),nil,nil
Aidar написал: Я так понимаю что Out 1,2 это индекс свечи на которой будет отображено TYPE_TRIANGLE_UP или TYPE_TRIANGLE_DOWN из Settings.line ?
Да верно Out1 и Out2 это номера свечек.
Цитата
Aidar написал: Мне не совсем понятно про ConvertValue(Settings,H(Out1))
ConvertValue преобразует данные согласно настройкам в Settings. Например там есть параметр Multiply в которой можно указать коэффициент на который умножаются значения индикатора. Или Round в котором можно указать округление.
Цитата
Aidar написал: и return tonumber(Settings.Horizontal_line),nil,nil
Индикатор FRACTALS ставит значения на прошлых свечках а не на текущих. в связи с чем, что-либо возвращать в return нельзя. Первый параметр, просто рисует горизонтальную линию. За это отвечает Horizontal_line.
if it.l >= nP then 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
Здесь у вас производится непосредственно расчет фрактала, т.е. на основании значения переменной S квик поймет на какой свече выводить фрактал, или я не правильно понимаю?
Aidar написал: Здесь у вас производится непосредственно расчет фрактала, т.е. на основании значения переменной S квик поймет на какой свече выводить фрактал, или я не правильно понимаю?
Как можно указать чтобы треугольники в индикаторе фрактал располагались не так близко к барам.Т.е. чтобы можно было задавать смещение(отступ) треугольников от HIGH или LOW бара на котором "рисуется" фрактал?
Если треугольник рисуется на цене 100, что мешает прибавить 5 и тогда он нарисуется на 105, таким образом получите нужный эффект. Т.е. банально прибавить/отнять (в зависимости от стрелки) цифру к цене на которой рисуется фрактал.
Для одного инструмента (типа VTBR, где цена болтается близ 0.05) 100 может оказаться невозможно большим, для другого - слишком мало. Вместо H(Out1)+100 и L(Out2)-100 лучше использовать H(Out1)*1.0007 и L(Out2)*0.9993 (процентный перелет-недолет, подберете по вкусу), автоматом сработает на любой размер цены.
Здравствуйте Сергей. Я не много изменил Ваш код. Прошу прощения, только начинаю программировать. И по всей видимости не понимаю логики процесса. Задумывалось следующее, что по мере нахождения фрактала он будет помещаться в последнею строчку таблицы определенную для него 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
Александр, У Вас код старый, скачайте свежий INDICATORS.zip там код функции был переделан так что функция возвращает только номер свечки с фракталом. а значение High и Low можно уже выяснить по номеру свечки.
Спасибо Вам, за вашу работу. Полагаю со временем я разберусь в нюансах этого кода. Но я хотел бы уточнить все-таки предыдущие вопросы и наличие простых способов решения работы с таблицами и массивами. У меня возникают сложности не только с анализом фракталов, а так же нахождение предыдущих значений свечей и введение их в отдельную таблицу. Это самый простой пример для наглядности. Если Вы затрудняетесь ответить, то подскажите, где можно посмотреть, помимо учебника Lua Р. Иерузалимски. За ранее благодарю