Функция фракталы

Страницы: Пред. 1 2
RSS
Функция фракталы
 
Цитата
Sergey Gorokhov написал:
 t2 ,n2,i2 = getCandlesByIndex(CODE_FRAC, 0, 0, N2-1);
  if ( t [num].high) > 0 then
message("Up="..t[num].datetime.hour..":"..t[num].datetime.min,1)

 if ( t [num].low) > 0 then

   message("Down="..t[num].datetime.hour ..":"..  t [num].datetime.min,1)
Спасибо! n на n2 исправил до вашего сообщения, а  t2 пропустил)) Заработало! Спасибо!
 
Можно ли таким способом найти ещё 2 предыдущих верхних и 2 предыдущих нижних фрактала?
Или нужно все фракталы сохранять в массив?
 
sav 312,
Можно, для этого достаточно переделать условие "if Up and Down then" так чтобы оно срабатывало в нужный для Ваших целей момент.
например добавить счетчик, который при нужном количестве 2 вызовет break
 
Цитата
Sergey Gorokhov написал:
sav 312  ,
Можно, для этого достаточно переделать условие "if Up and Down then" так чтобы оно срабатывало в нужный для Ваших целей момент.
например добавить счетчик, который при нужном количестве 2 вызовет break
Примерно понял, сейчас попробую. Спасибо.
 
Цитата
sav 312 написал:
Цитата
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  ,
Прошу понять что написание кода на заказ не является нашей задачей.
Если есть проблема, готовы помочь ее решить. Но если проблемы нет, а надо написать код то увы.
Что именно не получается?
Сергей, Вы правы. Не буду отвлекать.
 
Добрый вечер.
Скажите, а можно в индикаторе Fractals, как-нибудь установить количество периодов не 5, а 3 ?
 
Alex Green,
Да, установить Period не 3 а 5.
 
Цитата
Sergey Gorokhov написал:
Alex Green  ,
Да, установить Period не 3 а 5.
т.е. на оборот.
 
А как его установить. В большую сторону от 5 установить можно.
А вот в меньшую не переключается. 5 это минимум ?
 
Alex Green,
В данной теме обсуждается Lua индикатор фракталов, там такая возможность есть.
Во встроенном индикаторе такой возможности не предусмотренно.
 
Подскажите, пожалуйста, где взять готовый Lua индикатор ?
 
Alex Green,
тут
https://forum.quik.ru/forum17/topic1157/
 
Спасибо, Вам огромное. Все установил и сделал период 3 !!!!
 
Здравствуйте.Есть вопрос по индикатору фрактал который есть в доступе в файловом архиве с индикаторами.Конкретно по этому куску кода

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
Вы говорите очевидные вещи.
Другой вопрос зачем нужен этот массив.
Как можно заметить по коду в него попадают номера свечек, из которых потом ищется нужная свечка где и рисуется фрактал.
 
Sergey Gorokhov , спасибо за  хороший ответ

return function (I, Fsettings, ds)  - поясните пожалуйста вот эту строку из вашего кода
 
Aidar,

функция возвращает функцию. В lua это нормальное явление.
 
    if CandleExist(I,ds) then
       if I~=it[Squeeze(it.l,P)] then -- если I не равно
           it.l = it.l + 1
           it[Squeeze(it.l,P)] = I
       end

Поясните вот эту строчку пожалуйста

it[Squeeze(it.l,P)] = I

И для чего  вы используете эту переменную в коде индикатора  it.l ?
Squeeze - что это ?
 
Цитата
Aidar написал:
Squeeze - что это ?

это функция которая есть в том же примере ниже
Код
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 бара на котором "рисуется" фрактал?
 
Aidar,

Если треугольник рисуется на цене 100, что мешает прибавить 5 и тогда он нарисуется на 105, таким образом получите нужный эффект.
Т.е. банально прибавить/отнять (в зависимости от стрелки) цифру к цене на которой рисуется фрактал.
Код
   
SetValue(Out1, 2, ConvertValue(Settings,H(Out1)+100))
SetValue(Out2, 3, ConvertValue(Settings,L(Out2)-100))


если не нравится цифра 100 напишите другую
 
Для одного инструмента (типа 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 Р. Иерузалимски. За ранее благодарю
Страницы: Пред. 1 2
Читают тему
Наверх