VPM (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 23 След.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Судя по откликам и  комментариям были "индусы"  :smile: , но это уже не важно, а проверять видимо нужно все! Понятие Веры не из финансов. Быстрый поиск на просторах не дал нужного эффекта, друг у друга копируют перерисовывают и публикуют. Обратился к источнику, хотя моя версия электронной книги не очень удобна, но оно того стоило! 190 страниц без всякой "воды", одни выкладки и миллиметровка!
"Да, были люди в наше время, Не то, что нынешнее племя: Богатыри — не вы!"

Сработал и принцип монады (взаимно дополнительные двойственные отношения) "нет худа, без добра", заприметил несколько интересных идей.

Сама ошибка банальна, но принципиальна, кто знаком с до историческими (до ПВМ) работами трейдеров (Ганн, Вайкофф вот и Уайлдер приверженец старой школы) по определению трендов, знает что кроме баров трендовых, есть бары поглощения и внутренние, собственно которые и не учтены при определениях направленных движений.

Еще одно что смущает, так это в каком варианте использовать истинный диапазон (TR), для нормализации данных, сглаживать или нет?  В своем варианте я пока предпочитаю сглаживать, так как использование простого TR приводит к значительным выбросам.

На помню для чего так подробно разбираюсь с ADX? Интересуют инвестиционная алгоритмическая стратегия (ну или средний срок), а на этих временных интервалах, где дневной график выступает как 1 минутный, индикатор уже и в этой реализации дает отличные результаты. Когда ADX входит в резонанс с одним из направлений движений, это означает что у противоположной стороны заберут всю ликвидность, именно про эти ситуации говорят и пишут, "не стой на пути у паровоза"! За дело взялись большие деньги (Крупный игрок, а Маркет Мейкер за частую вынужден участвовать в противофазе), здесь входят инвестиционые фонды, банки и поддерживают свои позиции.
Про эти ситуации говорят, дай прибыли течь!

Пару слов про индекс относительной силы (RSI), ранее как то я его не до оценивал, предпочитая стохастик как более очевидный. Но RSI с ADX, это дополнительная мощность в принятии решений, автор его спроектировал так что он является центростремительным в отличии от стохастика который гуляет по локальным минимумам / максимумам. Что бы сдвинут RSI в зоны 70 или 30 нужно очень сильно постараться! А выход из этих зон говорит об однозначно слабости стороны.

Вот и судите сами стоит такая стратегия и Уайлдер, чтоб  пели про них "дифирамбы"?  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Все сдаюсь :sad: , 25 вариант модификации скрипта ADX не соответствует встроенному в QUIK не по нормировке не по сглаживанию?
Нет,  я конечно еще тот программист :smile: , но читать то умею, заглянул в Руководство пользователя QUIK © ARQA Technologies / www.arqatech.com/ru/products/quik/,
и о чудеса:
Код
ADX («Индекс направления движения усредненной цены»)
Индикатор ADX (Average Directional Movement Index) предназначен для определения направления движения среднего значения цены на основе сравнения двух индикаторов направленности 
* +DI (положительного изменения цены) и 
* -DI (отрицательного изменения цены), 
построенных по 14 периодам. 
По рекомендации автора индикатора Уэллса Уайлдера преобладание линии +DI над -DI является сигналом «покупать», и «продавать» если значение -DI поднимается выше значения +DI.

Вычисление:
ADXj = EMA (DXj , N), Где DXj вычисляется следующим образом: 

DXj = |(+DIj - -DIj)| / (+DIj + -DIj) * 100

+DIj = EMA (+SDIj , N)
-DIj = EMA (-SDIj , N)

+SDIj = +DMj / TRj * 100 если TRj <> 0, иначе +SDIj = 0
-SDIj = -DMj / TRj * 100 если TRj <> 0, иначе -SDIj = 0

TRj = max(|HIGHj - LOWj|, |HIGHj - CLOSEj-1|, |LOWj - CLOSE j-1|)

+DMj = |HIGHj - HIGHj-1| если HIGHj > HIGHj-1, иначе +DMj = 0
-DMj = |LOWj-1 - LOWj| если LOWj < LOWj-1, иначе -DMj = 0

если +DMj > -DMj, то -DMj = 0
если -DMj > +DMj, то +DMj =0
если +DMj = -DMj, то +DMj =0, -DMj =0

где:
CLOSE — цена закрытия; 
LOW — минимальная цена интервала; 
HIGH — максимальная цена интервала.
Значения индикаторов +DI и –DI учитываются с двумя знаками после запятой. 
Параметры настройки: 
«Кол-во периодов» - количество периодов N для расчета MA. 
«Метод» - метод расчета МА (Simple, Exponential, Vol.Adjusted, Smoothed), по умолчанию используется метод «Exponential». 
«Цвет +DI» - выбор цвета линии +DI. 
«Цвет -DI» - выбор цвета линии -DI.
Мало того что в вычислениях ошибка, так еще и "к верху тормашками"  :shock: , видимо кто английскую школу окончил или индусов наняли. Но от этого нелегче. Не ужели все перепроверять нужно за  ARQA Technologies?
Вообще в приличных домах принято, если оригинальный алгоритм подвергается изменениям, хотя бы "пометочку" делать!

Самое главное, встроенный индикатор отлично располагается в нормированном поле.
Возможно кто то знаком с проблемой и про комментирует, или разработчики внесут пояснения (разъяснения), что не так с алгоритмом?  
Прогнозная зона графика, График цены или индикатора по оси времени можно сдвигать образуя прогнозную зону. Но как с ней работать с самописными индикаторами?
 
Добрый день, Anton Belonogov,

Вариант 1.
"Редактирование настроек графика", "Диаграмма", позволяет сдвигать  правый край графика на заданное количество баров.
Тем самым как бы образуется прогнозная зона на графике относительно текущего значения.

Вариант 2. Вкладка "Дополнительно", сдвиг графиков, позволяет двигать график в обе стороны.

Но как с ними работать из луа, не понятно?
Какие индексы применять?
На мой взгляд, было бы отлично, если бы простой интеграцией можно было отрисовывать индикаторы в этой зоне.
В общем понимания совсем нет, рад любой информации. Спасибо что откликнулись.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
       
Код
 -- Получение значений индикаторов
        local rsi_val = rsi(I, {period = period_rsi}, ds)
        local adx_val, plusDI, minusDI = adx(I, {di_len = period_adx, adx_len = period_adx}, ds)
        local ema_val = ema(I, {period = period_ema}, ds)
        local price = C(I) or 0
        -- Определение рыночной фазы
        local market_phase
        if adx_val > 25 and plusDI > minusDI 
      --and price > ema_val 
      then
            market_phase = "uptrend"
        elseif adx_val > 25 and minusDI > plusDI 
      --and price < ema_val 
      then
            market_phase = "downtrend"
        else
            market_phase = "range"
        end

        -- Сигналы управления
        local signal = 0

        -- Правило 2: Не торгуем в флэте
        if market_phase == "range" then
            if position ~= 0 then
                signal = -position -- Закрытие позиции
            end
            return signal
        end

        -- Длинные позиции
        if market_phase == "uptrend" then
            -- Сигнал на покупку (Правило 3)
            if position <= 0 and 
               price > ema_val and 
               adx_val > prev_adx and 
               rsi_val < 75 then
                signal = 1
            end

            -- Выход из лонга (Правило 4)
            if position == 1 and 
              (rsi_val > 75 or adx_val < prev_adx) then
                signal = -1
            end
        end

        -- Короткие позиции
        if market_phase == "downtrend" then
            -- Сигнал на продажу (Правило 5)
            if position >= 0 and 
               price < ema_val and 
               adx_val > prev_adx and 
               rsi_val > 25 then
                signal = -1
            end

            -- Выход из шорта (Правило 6)
            if position == -1 and 
              (rsi_val < 25 or adx_val < prev_adx) then
                signal = 1
            end
        end

        -- Обновление состояния
        prev_adx = adx_val or 0
        position = position + signal
        
        -- Ограничение позиции [-1, 0, 1]
        position = math.max(-1, math.min(1, position))
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Прежде чем продолжить экспериментировать с фильтрами, нужна торговая стратегия для этих самых эксперементов, "велосипед будет старый", за основу возьму ТОРГОВЫЙ АЛГОРИТМ 1.0 (ВАЛЕНТИНА САВЕНКОВА) из Школы МосБиржи.

От туда же и правила, просто формализую для алгоритмической торговли:

[Правило 1. 3 фазы динамики цены: Растущий тренд ADX>25 +DI>-DI, Флэт (боковик) ADX<25 , Падающий тренд ADX>25 -DI>+DI.
Правило 2. Флэт (боковик) ADX<25 не торгуем.
Правило 3. Сигнал продолжения на покупку Price > Ema, Растущий тренд ADX>25 +DI>-DI, Сильный ADX (ADX[I]>ADX[I-1].
Правило 4. Выход из позиции Long сигналы RSI на продажу и слабый  ADX (ADX[I]<ADX[I-1]
Правило 5. Сигнал продолжения на продажу Price < Ema, Падающий тренд ADX>25 -DI>+DI, Сильный ADX (ADX[I]>ADX[I-1].
Правило 6. Выход из позиции Short сигналы RSI на покупку и слабый  ADX (ADX[I]<ADX[I-1].
Правило 7. Для RSI: зона перекупленности >75; перепроданности <25; Выход из зон торговый сигнал.

В процессе тестирования будут меняться правила и условия, поэтому зафиксирую базовые особенности.
Особенности реализации:
--[[код стратегии для QUIK на Lua 5.4 (процедурный стиль).
Все расчеты выполняются последовательно, -- состояние хранится в глобальных таблицах (или буферизация?),
минимальные вычислительные затраты, локальное кэширование ценовых данных.
Рекуррентные формулы для EMA и RSI, трекинг состояния через переменную position, защита от повторных входов,
Четкие правила выхода.
Визуализация, ? независимых графических серий, Цветовое кодирование элементов,
Настройки графического интерфейса в QUIK:
Сигналы отображать стрелками:
AddSignal(index, signal > 0 and 1 or signal < 0 and -1 or 0)
Добавить горизонтальные уровни для RSI:
   AddLevel(75, "Overbought", RGB(255,0,0))
   AddLevel(25, "Oversold", RGB(0,255,0))
Добавить горизонтальные уровни для ADX:
  AddLevel(25, "Weakness", RGB(0,255,0))

Торговая стратегия на основе ADX, RSI и EMA.
   Правила входа/выхода, согласно условиям задачи см. выше.
   ТОРГОВЫЙ АЛГОРИТМ 1.0 (ВАЛЕНТИНА САВЕНКОВА) Школа МосБиржи.
--]]
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Древний не значит ненадежный! Спасибо, разобрался исходную версию, перевел на луа 5.4, оказывается все отрисовывает, видимо была какая то моя уже модернизация. Отличный индикатор!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Я пользуюсь этой версией, посмотрел у Вас уже ее и нет.
Код
--logfile=io.open("C:\\SBERBANK\\QUIK_SMS\\LuaIndicators\\qlua_log.txt", "w")

Settings = {Name = "*iReg",
      bars = 182,
      kstd=2,
      degree = 3, -- 1 linear, 2 parabolic, 3 third-power 
      barsshift=0
   }
-- Пользовательcкие функции
function WriteLog(text)

   logfile:write(tostring(os.date("%c",os.time())).." "..text.."\n")
   logfile:flush()
   LASTLOGSTRING = text

end
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
function Reg()
            
   local sql_buffer={}
    local sqh_buffer={}
    local fx_buffer={}
   local sx={}
   local calculated_buffer={}
           
    return function(ind, Fsettings)
      
      local Fsettings=(Fsettings or {})
      local index = ind
      local bars = Fsettings.bars or 182
      local kstd = Fsettings.kstd or 2
      local barsshift = Fsettings.barsshift or 0
      local degree = Fsettings.degree or 1
      local index = ind

      local out1 = nil
      local out2 = nil
      local out3 = nil
      
      local p = 0
      local n = 0
      local f = 0
      local qq = 0
      local mm = 0
      local tt = 0
      local ii = 0
      local jj = 0
      local kk = 0
      local ll = 0
      local nn = 0
      local sq = 0
      local i0 = 0
      
      local mi = 0
       local ai={{1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}}      
      local b={}
      local x={}
      
      p = bars 
      nn = degree+1
 
      if index == 1 then
         sql_buffer = {}
         sqh_buffer = {}
         fx_buffer = {}
         calculated_buffer = {}
         
         sql_buffer[index]= 0
         sqh_buffer[index]= 0
         fx_buffer[index]= 0

         --- sx 
         sx={}
         sx[1] = p+1
         
         for mi=1, nn*2-2 do
            sum=0
            for n=i0, i0+p do
               sum = sum + math.pow(n,mi)
            end
         sx[mi+1]=sum
         end
         
         return nil
      end
            
      sql_buffer[index] = sql_buffer[index-1]   
      sqh_buffer[index] = sqh_buffer[index-1]   
      fx_buffer[index] = fx_buffer[index-1]
       
      out1 = fx_buffer[bars]
      out2 = sqh_buffer[bars]
      out3 = sql_buffer[bars]

      SetValue(index-bars-barsshift, 1, nil)
        SetValue(index-bars-barsshift, 2, nil)
        SetValue(index-bars-barsshift, 3, nil)
       
      if not CandleExist(index) or index <= bars then
         return nil
      end
        if index < (Size() - barsshift) then return nil end
      if index > (Size() - barsshift) then return nil end
        if calculated_buffer[index] ~= nil then return out1, out2, out3 end
      
       
      --- syx 
      for mi=1, nn do
         sum = 0
         for n=i0, i0+p do
            if CandleExist(index+n-bars) then
               if mi==1 then
                  sum = sum + C(index+n-bars)
               else
                  sum = sum + C(index+n-bars)*math.pow(n,mi-1)
               end
            end
         end
      b[mi]=sum
      end
          
      --- Matrix 
      for jj=1, nn do
         for ii=1, nn do
            kk=ii+jj-1
            ai[ii][jj]=sx[kk]
         end
      end
          
      --- Gauss 
      for kk=1, nn-1 do
         ll=0
         mm=0
         for ii=kk, nn do
            if math.abs(ai[ii][kk])>mm then
               mm=math.abs(ai[ii][kk])
               ll=ii
            end
         end
            
         if ll==0 then
            return nil
         end
         if ll~=kk then

            for jj=1, nn do
               tt=ai[kk][jj]
               ai[kk][jj]=ai[ll][jj]
               ai[ll][jj]=tt
            end
            tt=b[kk]
            b[kk]=b[ll]
            b[ll]=tt
         end
         for ii=kk+1, nn do
            qq=ai[ii][kk]/ai[kk][kk]
            for jj=1, nn do
               if jj==kk then
                  ai[ii][jj]=0
               else
                  ai[ii][jj]=ai[ii][jj]-qq*ai[kk][jj]
               end
            end
            b[ii]=b[ii]-qq*b[kk]
         end
      end
         
       x[nn]=b[nn]/ai[nn][nn]
         
      for ii=nn-1, 1, -1 do
         tt=0
         for jj=1, nn-ii do
            tt=tt+ai[ii][ii+jj]*x[ii+jj]
            x[ii]=(1/ai[ii][ii])*(b[ii]-tt)
         end
      end
         
      ---
      for n=i0, i0+p do
         sum=0
         for kk=1, degree do
            sum = sum + x[kk+1]*math.pow(n,kk)
         end
         fx_buffer[n]=x[1]+sum
            SetValue(index+n-bars, 1, fx_buffer[n])
      end
          
      --- Std 
      sq=0.0
      for n=i0, i0+p do
         if CandleExist(index+n-bars) then
            sq = sq + math.pow(C(index+n-bars)-fx_buffer[n],2)
         end
      end
         
      sq = math.sqrt(sq/(p+1))*kstd

      for n=i0, i0+p do
         sqh_buffer[n]=fx_buffer[n]+sq
         sql_buffer[n]=fx_buffer[n]-sq
            SetValue(index+n-bars, 2, sqh_buffer[n])
            SetValue(index+n-bars, 3, sql_buffer[n])
      end
                  
      SetValue(index-bars, 1, nil)
        SetValue(index-bars, 2, nil)
        SetValue(index-bars, 3, nil)
      
      calculated_buffer[index] = true
      out1 = fx_buffer[bars]
      out2 = sqh_buffer[bars]
      out3 = sql_buffer[bars]
      
      return out1, out2, out3
   
   end
   
end
----------------------------    ----------------------------    ----------------------------
----------------------------    ----------------------------    ----------------------------
----------------------------    ----------------------------    ----------------------------
function FindExistCandle(I)

   local out = I
   
   while not CandleExist(out) and out > 0 do
      out = out -1
   end   
   
   return out
 
end

local myfunc
function Init()
   myfunc = Reg()
   Settings.line=
         {
            {
               Name = "iReg",
               Color = RGB(0, 0, 255),
               Type = TYPE_LINE,
               Width = 2
            },
            {
               Name = "+iReg",
               Color = RGB(0, 128, 0),
               Type = TYPE_LINE,
               Width = 2
            },
            {
               Name = "-iReg",
               Color = RGB(192, 0, 0),
               Type = TYPE_LINE,
               Width = 2
            }
         }
   return #Settings.line
 end
 
function OnCalculate(index)
   
   --WriteLog ("OnCalc() ".."CandleExist("..index.."): "..tostring(CandleExist(index)))

   if Settings.degree > 3 then
      return nil
   end
   
   return myfunc(index, Settings)
 end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Индикатор Reg() при появлении нового индекса рассчитывает значение и выводит на график, А между сменой индексов, при дёргании функции обратного вызова, он удаляет с графика значения, На больших интервалах допустим на часовом моргнула и сразу затерла, то есть целый час нет визуализации значения на текущей свече, В идеале конечно, чтоб еще в прогнозную зону отрисовывал линии, Я тему с прогнозной зоной поднимал, но она интереса не вызвала.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Нет здесь странностей. просто ставим все на свои места.
1) Колебательные движения значит частота или волновой процесс. Поведение цены можно представить как сумму волн разной частоты и амплитуды (гармоники).
2) С точки зрения технического анализа, Тренд — это направленное движение цены (вверх или вниз). Он часто выглядит как линейная зависимость. Внутри тренда происходят колебательные (волатильные) движения: импульсы, откаты, коррекции.

Кстати у Вас есть прекрасный индикатор регрессионного анализа, выделяющий тренд 3 видов с использованием волатильности. Я его активно использую, пользуясь случаем хочу Вас попросить посмотреть его затирает текущие значения.

Наглядный пример моего подхода, как модели тренда, это синусоида, если взять от  от мах до минимума и наоборот, чем не трендовое движении. функция распределения плотности в экстремальных диапазонах имеет максимальные значения, вот уже и Вайкофф появился с зонами распределения и накопления. Кстати функция распределения плотности цены на длительном интервале больше похожа как у синусоиды.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Согласен, проблема тут есть, но ведь и задача  при определении тренда стоит выделить несущею частоту, а значит незначительные изменения в значениях периода. А что смущает в использовании фильтра или индикатора, на мой взгляд так наиболее информативный подход, при графическом анализе все равно сохраняется не кая интуитивность. А в индикаторном поймал тренд так и сиди в нем, мне думается что много ошибок именно в применении. Еще один момент в рассуждениях о ценовых рядах, часто умалчивают, что сама экономика построена так что капитал дисконтируется, а активы дорожают. А что объем, посмотри те какие дисбалансы и гэпы (про срочный рынок). WaPrice подкачиваю посматриваю, очень часто дневная свеча меняет на переходах свой цвет. Насчет использования индикаторов, так а что тут объяснять, на мой взгляд все предельно просто, волновая структура применима ко всему, отображение цены на графике колебательный процесс, значить имеем полное право использовать амплитудно-частотные преобразования. Доказательством правомерности может служить мат. ожидание системы.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Не понял, поясните?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Отличное видео, прекрасная демонстрация, автору и Nikolay, - огромное спасибо за популяризирование и просвещение.
К видео только одно замечание, преобразование Фурье вносит тоже запаздывание и его тоже нужно учитывать. У себя я просто держу напоминалочку, типа

Описание методов фильтрации в индикаторе Swiss Army Knife (John Ehlers):
1. EMA (Exponential Moving Average)
- Тип: Однополюсный фильтр низких частот (ФНЧ).
- Формула:  Output = a * Price + (1 - a) * Previous_Output
- Применение:  Сглаживание ценовых данных, подавление высокочастотного шума.  
 - Подходит для трендовых рынков.  
 - Используется для определения направления тренда.  
 - Пример: Выявление долгосрочных тенденций на дневных графиках.

2. SMA (Simple Moving Average)**
- Тип: Равновесный ФНЧ.  
- Формула:  Output = (Price + Price[1] + ... + Price[n]) / (n + 1)
- Применение:    Устранение рыночного шума с линейным сглаживанием.  
 - Идеален для фильтрации "белого шума".  
 - Используется в стратегиях пересечения средних.  
 - Пример: Сигналы при пересечении 50- и 200-периодной SMA.
....

Условно тех. анализ делят на две основные группы.
▪ Графический анализ: Поддержка и сопротивление, Модели разворота и продолжения, Свечной анализ;
▪ Индикаторный анализ: Индикаторы тренда (сигналы продолжения), Осцилляторы (сигналы разворота), Анализ объема (дополнительные фильтры).

Я только сейчас рассуждаю про Индикаторный анализ, так как это просто математика, в рамках одной широко распространённой стратегии ADX RSI (в рамках 60% инвестиционного дохода).
Для реальной торговли конечно нужен Графический анализ, у себя еще прикручиваю Анализ реального времени, но сейчас я не про это.
Задачу ставлю разобраться и показать,  что давно забытые стратегии прекрасно работают, в современных условиях.

Сглаживание, слишком упрощенно так рассматривать, прежде всего это преобразование для приемлемого вида, для применения в расчета, это всегда компромисс между сглаженностью и чувствительностью (отзывчивостью фильтра). Эти уникальные фильтры является результатом общих концепций цифровой обработки сигналов (DSP) для дискретных сетей сигналов, которые появляются в различных формах в техническом анализе. Передаточная функция такой дискретной линейной системы - это отношение выхода системы, деленное на вход. Если рассматривать весовые коэффициенты, для SMA это 1 равны на всем периоде данных, то для EMA  они убывают, перенося важность значений на новые.

И последнее, просто напомню, что обратная величина частоте, это тот самый период, который мы просто можем адаптировать, с помощь математики. А значит и фильтры применять с этими периодами каждый по назначению.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Идея заключается в том, чтобы заменить стандартные методы сглаживания на более эффективные, обеспечивающие меньшее запаздывание. Сглаживание по методу Уайлдера - Рекуррентное сглаживание, проблема, этого классического сглаживания (фактически EMA с α = 1/N) дает значительный лаг! Возможно это различие и является причиной различий в расчётах индикатора?

Для снижения лага в расчете ADX можно применить следующие типы фильтров, фокусируясь на ключевых этапах его вычислений:
 * фильтры из Swiss Army Knife (SAK), ранее на сайте мною были опубликованы в процедурной версии (как индикатор);
 * фильтры вроде Zero-Lag EMA (ZLEMA);
 * или адаптивные методы сглаживания, которые динамически подстраиваются под рыночные условия (Kalman Filter).

Оптимизация ADX с использованием фильтров Swiss Army Knife (SAK), наиболее любопытный вариант, интеграция фильтров Джона Элерса позволяет значительно снизить задержки ADX, сохранив его основную логику.

Сравнивать буду точки пересечения +DI/-DI в классической и SAK-версиях. Предварительные тесты показывают, что оптимизированная версия должна давать сигналы на 2-3 бара раньше при сопоставимой точности. Много это или мало судите сами, для HFT-стратегий (в рамках HFT-стратеги QUIK) это одна тема, для цикличных рынков совсем другая, ну и конечно для трендоследящих, ради чего все это затевалось (вспомнил хоть и отстал от графика, примерно так стоишь на остановке в ожидании поезда, а его все нет, вот уже вторые сутки нет).
А получить торговый сигнал на 2-3 дня или часа РАНЬШЕ! Каково?

Пару слов о фильтрах, здесь имеет значение практически все, торговый тайм фрейм, период окна данных и так далее, все зависит от задачи что хотим выделить или подчеркнуть.
Например, как вариант применения:
      Для высокочастотной торговли используйте  - EMA или Butterworth_LP
      Для подавления шума в трендах                     - Kalman + Wavelet
      Для цикличных рынков                                     - комбинация BP + HP
Каждый из них вносит свою лепту в вычисления.

Начать можно с адаптивного периода + ZLEMA для сглаживания, для HFT-стратегий можно добавить Kalman Filter.
Примеры стратегий которые хочу проверить:
а) Тренд + Осциллятор: ФНЧ (Butterworth) для тренда + ФВЧ (HP) для сигналов входа.
б) Цикловая торговля:    BP-фильтр для выделения 14-дневного цикла + SMA для подтверждения.
с) ? Арбитраж:                BS-фильтр для подавления рыночного шума + EMA для анализа тренда.

Для тестирования в стратегии планирую сравнивать:
1) Задержку сигналов;
2) Количество ложных срабатываний;
3) Ну и можно рассчитывать соотношение Sharpe до/после оптимизации.
Но для этого нужна торговая стратегия, но это уже совсем другая тема.  :wink:  

Тема фильтрации обширна, пишите свои идеи будем разбираться вместе.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Сравнил более внимательно, есть отличие в сглаживании и соответственно в масштабах отражения этих данных. В общем мой вариант рабочий, не читать же с графиков. А с фильтрами по экспериментирую еще, собственно это и была задача.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay, Так и мой вариант не соответствует встроенному в терминал. Вроде все корректно делаю как в букваре? Накладываю один на другой не соответствуют?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
А Чудеса продолжаются!
Оказывается, мало того что ADX(Lua) написан с ошибками, так еще и расчеты отличаются от ADX встроенного в терминал?
Накидал свой вариант, но и он выводит другие значения:
Код
function algorithms.getADX()
--[[
    Индикатор ADX с +DI и -DI 
    Среда: QUIK, Lua 5.4
    По методике Уэллса Уайлдера (period = 14)
--]]
-- Вспомогательные функции
local function sum(t, start_idx, end_idx)
    local total = 0
    for i = start_idx, end_idx do total = total + (t[i] or 0) end
    return total
end
local function average(t, start_idx, end_idx)
    return sum(t, start_idx, end_idx)/(end_idx - start_idx + 1)
end
    
   -- Локальные буферы для хранения данных
    local TR, plusDM, minusDM = {}, {}, {}
    local smoothedTR, smoothedPlusDM, smoothedMinusDM = {}, {}, {}
    local plusDI, minusDI, DX, ADX = {}, {}, {}, {}
    local initialized = false  -- Флаг инициализации

    return function (I, Fsettings, ds)
        local Fsettings = Fsettings or {}
        local P = Fsettings.Period or 14  -- Период расчета

        -- Инициализация буферов при первом запуске
        if I == 1 or not initialized then
            TR, plusDM, minusDM = {}, {}, {}
            smoothedTR, smoothedPlusDM, smoothedMinusDM = {}, {}, {}
            plusDI, minusDI, DX, ADX = {}, {}, {}, {}
            initialized = true
            return nil, nil, nil
        end

        -- Получение цен текущего и предыдущего бара
        local high = H(I) or 0
        local low = L(I) or 0
        local closePrev = C(I-1) or 0
        local highPrev = H(I-1) or 0
        local lowPrev = L(I-1) or 0

        -- 1. Расчет True Range (TR)
        TR[I] = math.max(
            high - low,
            math.abs(high - closePrev),
            math.abs(low - closePrev)
        )

        -- 2. Расчет Directional Movement (+DM и -DM)
        local upMove = high - highPrev
        local downMove = lowPrev - low
        plusDM[I] = (upMove > downMove and upMove > 0) and upMove or 0
        minusDM[I] = (downMove > upMove and downMove > 0) and downMove or 0

        -- 3. Сглаживание по методу Уайлдера
        if I == P then
            -- Первичное сглаживание (сумма первых P значений)
            smoothedTR[I] = sum(TR, 2, P)  -- TR начинается с 2-го бара
            smoothedPlusDM[I] = sum(plusDM, 2, P)
            smoothedMinusDM[I] = sum(minusDM, 2, P)
        elseif I > P then
            -- Рекуррентное сглаживание
            smoothedTR[I] = smoothedTR[I-1] - (smoothedTR[I-1]/P) + TR[I]
            smoothedPlusDM[I] = smoothedPlusDM[I-1] - (smoothedPlusDM[I-1]/P) + plusDM[I]
            smoothedMinusDM[I] = smoothedMinusDM[I-1] - (smoothedMinusDM[I-1]/P) + minusDM[I]
        end

        -- 4. Расчет Directional Indicators (+DI и -DI)
        if I >= P and smoothedTR[I] and smoothedTR[I] > 0 then
            plusDI[I] = 100 * (smoothedPlusDM[I]/smoothedTR[I])
            minusDI[I] = 100 * (smoothedMinusDM[I]/smoothedTR[I])
            
            -- 5. Расчет Directional Movement Index (DX)
            local di_sum = plusDI[I] + minusDI[I]
            DX[I] = (di_sum ~= 0) and (100 * math.abs(plusDI[I] - minusDI[I])/di_sum) or 0
        end

        -- 6. Расчет ADX (сглаженный DX)
        if I >= 2*P then
            if I == 2*P then
                -- Начальное значение ADX
                ADX[I] = average(DX, P+1, 2*P)  -- Среднее за P периодов
            else
                -- Сглаживание методом Уайлдера
                ADX[I] = (ADX[I-1]*(P-1) + DX[I])/P
            end
        end

        -- Возврат значений (ADX, +DI, -DI)
        return ADX[I] or nil, plusDI[I] or nil, minusDI[I] or nil
    end
end
Люди кто знаком с темой подскажите, что не так?
То что должно занимать пять минут, колупаю который день, чай уже давно закончился, да и видимо чаем тут одним не обойтись. :lol:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
*О, Чудеса чудесные!*
Нет видимо, нужно заводить отдельную тему (ветку) под названием "Чудеса чудесные!", для прославления талантов (название – как вариант)?

Кто на это раз? Обо всем и по порядку!

Выше обозначил классическую стратегию с которой хотелось детальней разобраться, чтобы разбираться нужны индикаторы (фильтры), реализованные в код.
Речь идет про формализацию стратегии в определенные правила, ну и конечно реализация правил в код ( луа версии 5.4).

1) Луа.  Сейчас поясню, по чему луа, на мой взгляд это супер! На нем можно и так программировать логику детской задачи "А И Б сидели на трубе, а пропало б упало, кто остался на трубе?"
Напомню, что в Lua основная структура данных – таблица. Тогда задачка в этом варианте, выглядит несколько иначе, "таблица А, таблица И, таблица Б, сидели на трубе, таблица А пропала == nil, таблица Б упало == (функция роста), вычисляем кто остался на трубе?" Как минимум это вектор, в идеале матрица состояний! И это просто возможность ухода от плоскостного мышления!

2) Чтоб "не изобретать очередной велосипед", налил кружку чая и с мыслями что не успею допить, как соберу стратегию, для этого взял из библиотеки от разработчиков индикаторы (реализованные в луа).
Каково ж было мое удивление, когда получил ошибку: на обработку операций с nii? (nii - это еще одна особенность языка - ничего, в начале было ни чего!)
Не все ошибаемся, но ведь, библиотека обновлялась и не один раз. Не берусь судить какая у меня сохранена но точно не ниже версии второй. Позвольте, но разве не специалисты от программирования пишут эту библиотеку? Не так давно вступал в дискуссию, что так поступать нельзя, и сам попал. Миллионы пользуются невдоваясь в подробности.

3) Заглянул поглубже, (все таки кружка чая, покоя не давала), - "волосы дыбом, мозги на бикрень", уж не знаю, кто там может разобраться точно только "специалисты от программирования".

Чего стоит одно "ANY" вот от сюда:
Код
local function GetValueEX(I, VT, ds)  
       VT = (VT and string.upper(string.sub(VT, 1, 1))) or ANY  
   ...  
   end

   Видимо, это аналог записи:  local p0 = x or Value(I, v_t, ds) or 0;
Но с меня уже и этого хватит, лично я пойду "причешусь и за чайником", благо что все алгоритмы опубликованы.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Пару слов про подход Ральфа Винса!
Когда упоминают имя Винса, обычно упоминается концепт оптимальной фракции (optF), я же хочу заострить внимание для тех кто незнаком с работами, на более важном, откуда собственно следует все остальное. Фундаментальное уравнение торговли  — это инструмент для анализа, и поиска компромисса между доходностью и риском. Оно подчеркивает, что долгосрочный успех зависит не только:
         от положительного матожидания торговой системы (A > 1, если вычесть 1 и перевести в %, то и получаем то самое классическое матожидания),
         от управления волатильностью (S);
         но и от периода удержания позиции.
Фундаментальное уравнение торговли, связывает
         среднее арифметическое доходности (A),
         стандартное отклонение (S)
         и количество сделок (N)
для оценки итогового роста капитала (TWR — Terminal Wealth Relative). Получено с помощью логики и аппроксимации функции роста. Такая оценка очень точно аппроксимирует мультипликативную функцию роста или настоящее TWR!

Формула имеет вид:     TWR = ( A^2 - S^2 )^N/2

где:
A — среднее арифметическое HPR (Holding Period Return, доходность за период);
S — стандартное отклонение HPR;
N — количество сделок или периодов.

Из уравнения четко видно, что снижение стандартного отклонения (волатильности) улучшает TWR. Например, почему полезно использование стоп - лоссов для ограничения убытков, снижает S, но слишком жесткие стопы могут уменьшить A сильнее, чем S, что ухудшит результат.
Можем рассчитывать другие производные от уравнения и  параметры сделок, например период удержания позиции, количество контрактов в сделке, optF капитала, границы такой торговли и так далее.

Хорошо использовать это уравнение для оценки стратегий, оптимизации стоп-лоссов, выбора инструментов (например, опционов), причем как в момент проектирования сделок, так и по факту торговли, для оценки результатов (Эффективности торговли). Позволяет однозначно сравнивать разные торговые стратегии, не "наобум Лазаря" а используя царицу наук.  :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Добавив в свой инвестиционный портфель облигации, с удивлением для себя обнаружил, что теряю контроль над ситуацией и тому виной те самые облигации. На вопрос что приводит к дискомфорту, ответ очевиден, нужен алгоритм оценки эффективности использования этих самых облигаций.

Нет если держать до погашения, то и ладно.
Но ведь интересует сию минутная оценка, возможно средства выделенные используются не эффективно или цена этой облигации на экстремальных оценках и нужна ребалансировка?

"Нет худа, без добра!" эта бинарная конструкция (монада) или супер позиция из квантовой механики, подвинула меня разбираться с вопросом, как улучшить управляемость?

Заглянул в свои архивы.
Находка первая, торговая стратегия с использованием индикаторов, опубликованных Уэллсом Уайлдером  в книге (Wilder, J. Welles (1978). New Concepts in Technical Trading Systems.), ADX, RSI и SAR — это отличная идея для построения комплексного подхода к торговле. Все три индикатора помогают в создании системы принятия торговых решений, в разных аспектах анализа рынка,  их нужно просто уметь комбинировать, чтобы повысить вероятность успешных сделок. Основной не достаток, это  методы их расчета (математика), которая приводит к лагам (отставаниям), давно собирался по экспериментировать с этой математикой уменьшить лаг.

Вторая находка, ну а где еще искать способы повышения эффективности - это конечно работы Ральфа Винса! УПРАВЛЕНИЕ КАПИТАЛОМ ПО ВИНСУ - это отдельная особая тема, чего стоит только его основное уравнение торговли TWR = (A^2 + StD^2)^(T/2).
Ранее уже реализовывал несколько модулей по его работам, концепт HPR, расчет количества на сделку и другие показатели сделок. Настало время заняться эффективностью.
Максимальная и минимальная цены по инструменту (планки)
 
Источник данных таблица текущих параметров. Данные получаются с единообразно изменяя названия параметра (см. справку).
Например так:

local pricemax = tonumber(getParamEx2(cl[1], sec[i], "pricemax").param_value)
local pricemin = tonumber(getParamEx2(cl[1], sec[i], "pricemin").param_value);
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Мир, Май, Труд!

Не однозначное решение вызвало интеграция State Machine с действующим рабочим кодом. На первый взгляд, задача встраивания StateMachine, для контроля состояний скрипта, в место одного флага, выглядит не совсем логично и однозначно? В место одного флага с двумя степенями свободы, добавляется в систему несколько дополнительных модулей и вспомогательных функций, не очевидных зависимостей? Что казалось бы не добавляет надежности системе?

Пришлось разбираться по порядку, устраняя сомнения, отвечая на вопрос "На фига козе баян?" :smile:  Ну обо всем и по порядку:

1. Почему State Machine вместо одного флага - это полезно? State Machine не заменяет флаг, а решает принципиально другие задачи.
а) Четкие переходы, запрет недопустимых сценариев (вроде перехода ERROR → RUNNING)
б) Централизованная логика, вся обработка состояний в одном месте, а не размазана по коду.

2. Какие реальные преимущества?
Код
-- Было:
function OnStop()
    WORKING_FLAG = false -- Резкий обрыв без очистки
end

-- Стало:
function handleStoppedState()
    cancelAllOrders() -- Гарантированная отмена
    closePositions() -- Корректное закрытие
    releaseResources() -- Контроль утечек
    Log:info("Система остановлена безопасно")
end
3. Почему дополнительные модули, это не произвольное усложнение, а разделение ответственности?

Модуль                Ответственность

StateMachine Логика переходов                          Обработка IDLE → RUNNING
ErrorCollector Централизованный сбор ошибок Логирование в OnStop()
GUI                 Визуализация состояния              Обновление таблиц

4. Проблема отладки. Конкретные ошибки из лога, решаются, добавляем заглушки с контролем и последующим разбором.

5. Как избежать "неочевидных зависимостей"? Ответ - явная инициализация в OnInit и ее проверка.
Код
function OnInit()
    -- Порядок инициализации важен!
    StateMachine = require("StateMachine")     -- 1. Состояния
    ErrorCollector = require("ErrorCollector") -- 2. Ошибки
    GUI = require("GUI")                       -- 3. Интерфейс
    
    -- Проверка инициализации
    assert(StateMachine, "StateMachine не загружен")
    assert(ErrorCollector, "ErrorCollector не загружен")
    
    -- Конфигурация
    StateMachine:configure({
        transitions = cfg.transitions,
        initialState = "IDLE"
    })
end

6. Работоспособность кода? Выполняется с помощью ключевых проверок.
Код
-- Тест переходов между состояниями
local function testStateTransitions()
    local sm = StateMachine
    sm:transitionTo("RUNNING")
    assert(sm:isState("RUNNING"), "Ошибка перехода в RUNNING")
    
    sm:transitionTo("ERROR")
    assert(sm:isState("ERROR"), "Ошибка перехода в ERROR")
    
    sm:transitionTo("IDLE")
    assert(not sm:isState("IDLE"), "Недопустимый переход ERROR → IDLE должен быть запрещен")
end

7. Альтернативный подход? Возможен минималистичный вариант State Machine без лишних модулей? Да.

Вот и получается, State Machine — это не усложнение ради усложнения, а
1) Защита от недопустимых сценариев;
2) Четкий контроль жизненного цикла;
3) Упрощение добавления новых состояний;
4) Централизованное логирование;
...
Аллегория здесь возможно такая. Это инвестиции в будущее, в отличии от спекулятивного подхода (с флагом) :wink:
Сам процесс, интеграции State Machine в код тоже имеет как минимум два решения, 1) в главном цикле; 2) асинхронный вариант. Но это уже другая тема.

В заключении отмечу, интеграция State Machine действительно добавляет некоторую сложность, но даёт:
А. Снижение количества ошибок на 40-60% (не моя оценка);
Б. Упрощение отладки в 2-3 раза (не моя оценка);
С. Возможность формальной верификации сценариев.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Закнчивая тему рефакторинга кода, стоит добавить что на практике он уменя свелся к созданию дополнительных модулей, отвечающих за надежность уже самой системы. Вот основные из них.
1) Мониторинг производительности (QSA-PERF) модуль PerformanceMonitor;
2) Автомат защиты (QSA-CIRCUIT),  модуль CircuitBreaker.
Некоторому переосмысливанию логики модулей управления, например Модуль управления сопрограммами CoroutineManager, добавлены приоритеты.
Осознание, что большинство критических ошибок находится на стыке взаимодействия скрипта с квиком, Привело к добавлению самостоятельного модуля Контроллер (QSA-GUI) GUIController, QSA-CORO)

От этого сложность программы не уменьшилась, а значить и надежность не очень повысилась, но есть осознание куда двигаться в целях повышения надежности и тесто пригодности.
Так как модуль зачастую исполняется в собственной сопрограмме, то и задачу можно свести к тесто пригодности этого модуля. В общем, Рефакторинг это не состояние, это процесс!  
Прогнозная зона графика, График цены или индикатора по оси времени можно сдвигать образуя прогнозную зону. Но как с ней работать с самописными индикаторами?
 
Добрый день!  Разработчики предусмотрели возможность сдвигать графики по оси времени, тем самым можно создавать прогнозную зону или накладывать прошлые значения на настоящее время.
На как с этими сдвигами работать?
Какие индексы должен получать скрипт на луа чтоб корректно отображались расчетные значения при таких сдвигах?
Как отрисовывать график при сдвиге? В общем думается проблема с индексами?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Почему важно учитывать эти стандарты при создании своего проекта? Очевидное.

1) Так как, взаимодействие проекта будет происходит с промышленной торговой системой, то не плохо чтоб и проект соответствовал таким же требованиям.
2) Задача проекта несколько упрощается, так как среда его использования (QUIK), уже должна учитывать и отвечать этим требованиям, нам лишь нужно учитывать особенности среды QUIK и языка написания Lua.
3) Это позволяет выйти на единую архитектуру структуры проекта, работать с несколькими модулями, каждый из которых будет выполнять свою функцию.
Подобная структура проекта, будет ориентирована на создание модульного и масштабируемого решения, которое легко будет адаптировать и поддерживать.
В данном случае, мы будем учитывать требования для надежности, безопасности, масштабируемости и соответствия нормативам, а также особенности среды QUIK. Будем опираться на принципы модульности, отказоустойчивости и масштабируемости.
Архитектура должна включать компоненты для  обеспечения отказоустойчивости и мониторинга, а также соблюдать строгие стандарты отчетности и аудита.

Базовая архитектура может содержать несколько ключевых модулей для такой системы. Минимальная структура должна включать:
• Модуль для отправки ордеров
• Модуль для получения котировок
• Модуль для работы с портфелем
• Модуль для анализа рисков
• Модуль для генерации отчетности (согласованной с MiFID II)
• Модуль мониторинга и аудита
Эта структура предоставляет основу для создания торговой системы, обеспечивающей отказоустойчивость, безопасность и соответствие промышленным нормативам.

А главный цикл такой программы, для примера, может выглядеть так.
Код
-- Core/Main.lua
function main()
    ConfigManager.load("config.prod.json")
    Logger.init(ConfigManager.get("logging"))
    
    local ok, err = pcall(function()
        StateManager:restore()
        RiskManager:init()
        
        while StateManager:is_active() do
            local signals = SignalGenerator.generate()
            local filtered = RiskManager.filter(signals)
            OrderExecutor.execute_all(filtered)
            
            StateManager:update_metrics()
            ReportManager.send_daily()
            
            sleep(100)
        end
    end)
    
    if not ok then
        Logger:error("Critical failure", {error = err})
        EmergencyShutdown.execute()
    end
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Добиваясь стабильной работы, от варианта торговой программы в асинхронном исполнении, решил посмотреть, как к этому вопросу подходят при создании профессиональных программ.
Основная проблема тестирование и отладка такой асинхронной программы, нужен реал - тайм,  бэк - тесты здесь не проходят, а это очень медленно (пока отлаживаешь забываешь, уже зачем все делал).
По этому, важно изначально отсекать, излишние проблемы на стадии проектирования. Переработал архитектуру своей такой программы. Для этого окунулся в промышленные стандарты, что должна уметь, что должна делать, и так далее такая программа. Собственно с этого и нужно было начинать, при создании проекта, приятно был удивлен, достаточно хорошей проработке этих стандартов (и это то в финансовой сфере та :smile: ). В общем кому интересно, кто задумается над подобными вопросами, вот основные, на что стоит обратить внимание, по моему скромному мнению.

Промышленная архитектура торговой программы должна соответствовать требованиям:
 1. ISO 27001 для финансовых систем;
 2. MiFID II для торговых платформ;
 3. SEC Regulation SCI для электронных торгов.

Блок схему своей архитектуры мне страшно даже показать, это работа для целой команды, да и реализовано еще только ядро, к которому прикручиваю отдельные модули, да и все еще не один раз поменяется. Хороших алгоритмов.
Ошибка снятия заявки. [GW][3] "Сейчас эта сессия не идет."
 
А если, реализовать "Конечный автомат состояний", например доработав функцию Ziveleos,  чтоб не доводить до ошибки?
 1. Чёткое разделение на состояния: Активен/Приостановлен/Авария ...
 2. Автоматические действия при смене состояний (например, отмена ордеров в аварийном режиме или вашей ситуации)?
Подписка и отписка SetUpdateCallback, Подписка и отписка SetUpdateCallback
 
На самом деле проблема стара как этот мир (в нашем случае квик), сейчас продемонстрирую на небольшом примере.
1) Вариант просто создаю таблицу с методами.
2) "Танцы с бубнами" - Моя древняя функция боюсь ее уже даже руками трогать.
Код
function main() 
    message('Стратегия 3ТФ запущена: ' ..  CLASS_CODE ..'; '..SEC_CODE )

    DS = {}
    DS.D1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_D1)
    DS.H1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_H1)
    DS.M1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_M1)
    message( 1)..' '.. type(DS.D1) .. ' DS.D1:Size() ' .. tostring(DS.D1:Size()) .. ' DS.H1:Size() ' .. tostring(DS.H1:Size()) .. ' DS.M1:Size() ' .. tostring(DS.M1:Size()) )

    DS.D1 = Source(CLASS_CODE, SEC_CODE, INTERVAL_D1)
    DS.H1 = Source(CLASS_CODE, SEC_CODE, INTERVAL_H1)
    DS.M1 = Source(CLASS_CODE, SEC_CODE, INTERVAL_M1)
    message(2)..' '..  type(DS.D1) .. ' DS.D1:Size() ' .. tostring(DS.D1:Size()) .. ' DS.H1:Size() ' .. tostring(DS.H1:Size()) .. ' DS.M1:Size() ' .. tostring(DS.M1:Size()) )
   while is_run do
А вот ответы
Стратегия 3ТФ запущена: SPBFUT; MXM5
1) table DS.D1:Size() 0 DS.H1:Size() 0 DS.M1:Size() 0
2) table DS.D1:Size() 162 DS.H1:Size() 1485 DS.M1:Size() 11247
Вопрос по индикатору
 
Я тоже не программист! Ваш код это дело начинающих, чтоб разобраться ка все работает.
Но давайте обо всем  и по порядку.
1. OnCalculate это функция обратного вызова или на ангельском (Колбэк), Не в даваясь в подробности реагирует на каждый "чих" изменения.
Если Вы строите свой алгоритм от  момента появления новой свечи, то текущею свечу можем получить с помощью Функции Size()!  Что по факту index == Size(). В расчетах индикатора используем историю по данным, то есть index - 1,  -2, -3 и так далее. То что с минусом свеча сформированная - закрытая, а текущая нет в процессе, все может поменяться (Например изменился Максимум), на этот и реагирует колбек.
2. Писать лучше в луа алгоритм в анонимной функции. Собственно в луа  функция и есть замыкание! Примеров масса, на этом форуме. Я Вам могу порекомендовать библиотеку от разработчиков. Да она не идеальна но на путь истины наставляет.
Удачи!
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
TGB написал:
Давайте, подискутируем. Может быть я заблуждаюсь больше чем две недели?
TGB,  Похоже остались тут вдвоем, не я бы Вам ответил, правдо зная про что? Не понимаю и Вам зачем, наверно нужно или скучно стало? Не ну ладно, я "несу  всякую ахинею",  разбирая свои идеи по винтикам и полочкам на примерах. А где взять базу случайных чисел? Но Вы то ...? А администраторы? Взяли заблокировали Владимира, и как нам теперь узнать как поживает его "супер- пупер" черная коробочка, думаю подался  уже в "форбс" и нам не "чита"? Не я то еще тут побуду, времени на реализацию идей добавилось, даже "Бредовых". Лично от себя, не знаю как сейчас, раньше была поговорка "Будь проще народ подтянется! И Вам удачи в начинаниях!  :smile:  :wink:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Во дела! Снижение на американском рынке оценивают в -17%, насколько помню -20% критично для фондов. плотно зашли в медвежий тренд, и стоим на пороге ликвидации позиций крупными участниками?
"За что купил, за то продал". :sad:  
Чудеса от брокера Сбер, Расчет и отображения балансовой стоимости (цены покупки) еврооблигаций, отражается некорректно в системе Quik.
 
Karina Dmitrieva,  Спасибо, с этим я разобрался, меня поразило другое, почему все отдано на откуп брокеру?
Почему нет единого алгоритма расчета зашитого в программе? Или у каждого брокера своя арифметика?  Перевести из процентов в валюту и затем сконвертировать?
Три брокера и каждый по своему, но больше всего Сбер поразил, даже не понимают о чем говорят!  
Чудеса да и только!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Вот и нашлась причина укрепления рубля, кто бы мог подумать?  :smile:  К импортерам и годовым налогам добавились.

"Иностранные хедж-фонды вкладывают в Россию «ковбойские деньги» через дружественные юрисдикции, что заметно по динамике ОФЗ и курса рубля. Об этом заявил журналистам замминистра финансов Иван Чебесков"

Подробнее на РБК:
https://www.rbc.ru/quote/news/article/67ecf5fb9a79473cabbe31d7?from=copy"
почему getParamEx2 не работает
 
Так нельзя, значения приходят в формате STRING а Вы суммируете строку.
Цитата
Дмитрий написал:
bid = getParamEx2(classCode,secCode, "bid").param_value+0
Код
--Попробуйте так, но прежде проверьте код контрака действующей или нет?

--1) возвращает таблицу Lua с параметрами 
local params = getParamEx2(classCode,secCode, "bid")
if not params then message( tostring(classCode) ..'; '.. tostring(secCode) ..' ?') end
if params then
    --значения приходят в формате STRING, для вычислений переводим
    local bid = tonumber(tab.param_value)
    message( 'bid: '.. tostring(secCode) )
end
почему getParamEx2 не работает
 
Ну сходу:
               bid = tonumber(getParamEx2(classCode,secCode, "bid").param_value)
Количество свечей
 
Цитата
Stivins написал:
Как тогда принятый через  CreateDataSource  массив уменьшить до последних 20 свечей?
CreateDataSource это не передача массивов, это подписка на получение необходимых данных (методы получения ds:H(I)), сами данные на сервере квик. Я Вам вчера сбрасывал скрипт там все есть, меняйте count, количество свечей в получаемом массиве.
local dailyCandles = getCandles(ds_D1, 4) то есть 4 бара получаем. а в этом случае local h1Candles = getCandles(ds_H1, 5) пять, поменяйте на 20.
Вам нужно мат. часть подтянуть, отсюда путаница.
Чудеса от брокера Сбер, Расчет и отображения балансовой стоимости (цены покупки) еврооблигаций, отражается некорректно в системе Quik.
 
Вот цитата из официального ответа: "Еврооблигации номинированы в долларах США, но приобретены в рублях по курсу на дату покупки, в связи с чем балансовая цена по данным ценным
бумагам может уменьшаться и увеличиваться в связи с перерасчётом балансовой цены на курс USD."
Чудеса от брокера Сбер, Расчет и отображения балансовой стоимости (цены покупки) еврооблигаций, отражается некорректно в системе Quik.
 
Прошу, предоставить разъяснения по вопросу расчета и отображения балансовой стоимости (цены покупки) еврооблигаций
ПАО «Полюс» (ISIN: RU000A108L81),
ПАО «НОВАТЭК» (ISIN: RU000A108G70), Сообщаю, что информация отражается некорректная.
Работа индикатора вне графика.
 
В OnInit() нельзя расчеты вести, она запускается до создания потока в main и предназначена для инициализации!
Работа индикатора вне графика.
 
Добавьте в пример вот эту функцию получения цены.

local string_upper,string_sub=string.upper,string.sub;
function Value(I,VType,ds)
   
   local Out = nil
   local VType=(VType and string_upper(string_sub(VType,1,1))) or "A"
   if VType == "O" then        --Open
       Out = (O and O(I)) or (ds and ds:O(I))
   elseif VType == "H" then     --High
       Out = (H and H(I)) or (ds and ds:H(I))
   elseif VType == "L" then    --Low
       Out = (L and L(I)) or (ds and ds:L(I))
   elseif VType == "C" then    --Close
       Out = (C and C(I)) or (ds and ds:C(I))
   elseif VType == "V" then    --Volume
       Out = (V and V(I)) or (ds and ds:V(I))
   elseif VType == "X" then    --DateTime
       Out = (T and T(I)) or (ds and ds:T(I))
   elseif VType == "A" then    --Any
       if ds then Out = ds[I] end
   end
return Out
end
Работа индикатора вне графика.
 
Ну хорошо давайте, по порядку.  OnCalculate(idx) это функция обратного вызова, специальная для создания индикаторов, все что она делает передает idx. Передавать ее некуда нельзя.
Но можно вынести из нее алгоритм расчет в отдельную функцию PSAR(idx) и уже работать с ней. Вот для индикатора.
function OnCalculate(idx)
PSAR(idx)
end
Для работы с ней в main(), нужно подписаться на источник вот этот момент из моего примера.

local ds_D1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_D1)
затем передаем,  а  здесь получаем свечи    local dailyCandles = getCandles(ds_D1, 4)
далее расчет индикатора  local atr = calculateATR(ds_D1, 4)

Вместо расчета АТР поставьте расчет собственного по аналогии. Удачи.  
Работа индикатора вне графика.
 
Посмотрите это пример, он рабочий подставите свои данный и по выводите.
Код
-- Global settings
local CLASS_CODE = "SPBFUT"         -- Код класса инструмента
local SEC_CODE = "CRM5"             -- Код инструмента
local TRADE_ACCOUNT = "" -- Счет
local LOTS = 1                      -- Количество лотов

-- Инициализация данных
local dailyTrend = "none"
local entryPrice = 0
local sl = 0
local tp = 0

-- Функция получения свечей
function getCandles(ds, count)
    local candles = {}
    local size = ds:Size()
    --message( 'size = ' .. size)
    for i = 0, count do
        if size >= 1 then
            candles[i] = {
                high = ds:H(size - i) or 0,
                low = ds:L(size - i) or 0,
                open = ds:O(size - i) or 0,
                close = ds:C(size - i) or 0
            }
        end
    end
    return candles
end

-- Расчет ATR
function calculateATR(ds, period)
    local sumTR = 0
    local size = ds:Size()
    
    for i = 1, period do
        local prevClose = ds:C(size - i + 1) or 0
        local high = ds:H(size - i) or 0
        local low = ds:L(size - i) or 0
        
        local TR = math.max(
            high - low,
            math.abs(high - prevClose),
            math.abs(low - prevClose)
        )
        sumTR = sumTR + TR
    end
    return sumTR / period
end

-- Функция определения тренда на D1
function getDailyTrend()

    local ds_D1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_D1)

    local dailyCandles = getCandles(ds_D1, 4)
   local atr = calculateATR(ds_D1, 4)

    local o0 = dailyCandles[0].open or ds_D1:O(ds_D1:Size()) or 0
   --message('o0 = ' .. tostring(o0) .. '; dailyCandles[0].open = ' .. tostring(dailyCandles[0].open) )

    local HH = math.max(
        dailyCandles[1].high, 
        dailyCandles[2].high, 
        dailyCandles[3].high
    )
    local LL = math.min(
        dailyCandles[1].low, 
        dailyCandles[2].low, 
        dailyCandles[3].low
    )
    local trend = "range"
    if o0 > HH then trend = "uptrend"
    elseif o0 < LL then trend = "downtrend"
    else trend = "range" 
   end

   local daily = {['trend'] = trend, 
                  ['hh'] = HH, 
               ['ll'] = LL, 
               ['o'] = o0, 
               ['atr'] = atr,
               ['targetB'] = atr + o0,
               ['targetS'] = o0 - atr
               }
   return daily
end

-- Проверка структуры на H1
function checkH1Structure(trend)
    local ds_H1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_H1)
    local h1Candles = getCandles(ds_H1, 5)
   local atr = calculateATR(ds_H1, 14)
    local currentClose = ds_H1:C(ds_H1:Size()) or 0
    
    if trend == "uptrend" then
        return h1Candles[1].high > h1Candles[2].high and
               h1Candles[2].low < h1Candles[3].low and
               currentClose > h1Candles[1].high
    elseif trend == "downtrend" then
        return h1Candles[1].low < h1Candles[2].low and
               h1Candles[2].high > h1Candles[3].high and
               currentClose < h1Candles[1].low
    end
    return false
end

-- Поиск точки входа на M1
function checkM1Entry(trend)
    local ds_M1 = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_M1)
    local m1Candles = getCandles(ds_M1, 20)
    local atr = calculateATR(ds_M1, 14)
    local currentClose = ds_M1:C(ds_M1:Size()) or 0
    
    if trend == "uptrend" then
        if currentClose > m1Candles[0].high then
            entryPrice = currentClose
            sl = entryPrice - atr
            tp = entryPrice + 2*atr
            return true
        end
    elseif trend == "downtrend" then
        if currentClose < m1Candles[0].low then
            entryPrice = currentClose
            sl = entryPrice + atr
            tp = entryPrice - 2*atr
            return true
        end
    end
    return false
end

-- Отправка ордера
function placeOrder(direction)
    local transaction = {
        ACTION = "NEW_ORDER",
        CLASSCODE = CLASS_CODE,
        SECCODE = SEC_CODE,
        ACCOUNT = TRADE_ACCOUNT,
        OPERATION = direction == "uptrend" and "B" or "S",
        PRICE = entryPrice,
        QUANTITY = tostring(LOTS),
        STOPPRICE = tostring(sl),
        EXPIRY = "GTC"
    }
    
    local res = SendTransaction(transaction)
    if res then
        message("Order placed: "..direction..
                " | Price: "..entryPrice..
                " | SL: "..sl..
                " | TP: "..tp)
    else
        message("Error placing order!")
    end
end
local is_run
function OnInit()
    --strategy = Strategy:new(config)
    --strategy:start()
    is_run = true
   message('Стратегия 3ТФ инициализирована')
end
function OnStop()
    --strategy:stop()
    is_run = false
   message('Стратегия 3ТФ остановлена')
end
function OnTransReply(r)
    --strategy:handle_transaction_reply(r)
end
function OnTrade(t)
    --strategy:handle_trade(t)
end
function OnOrder(o)
    --strategy:handle_order(o)
end
-- Основной обработчик
function main()
    message('Стратегия 3ТФ запущена')
    local daily = getDailyTrend()
    message( 'Стратегия 3ТФ dailyTrend = ' .. tostring(daily.trend) 
         ..'; HH = '.. tostring(daily.hh) 
         ..'; LL = '.. tostring(daily.ll)
         ..'; o0 = '.. tostring(daily.o) 
         ..'; atr = '.. tostring(daily.atr)
         ..'; targetB = '.. tostring(daily.targetB)
         ..'; targetS = '.. tostring(daily.targetS)
         )
    daily.trend = "uptrend"

    while is_run do

      if daily.trend ~= "range" then
        if  checkH1Structure(daily.trend) then
            if checkM1Entry(daily.trend) then
                placeOrder(daily.trend)
            end
        end
      end
        sleep(1000)
    end
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Хотел на этом и завершить поднятую тему, совсем нет оппонента, возможно я не очень понятно излагаю или не интересно или еще чего ... Немного поразмыслив решил добавить, сказал "А", надо и "Б" произносить. Тема конечно огромная и не для этого форума, но постараюсь кратко, кому станет интересно и без меня разберется. :wink:

Из проективной геометрии известна следующая уникальная закономерность, характеризующая двойственные отношения между оригиналом и изображением. Это так называемое сложное отношение четырех чисел а, b, с, d. Свойства этого отношения очень хорошо и популярно описаны в книге У.У. Сойера «Прелюдия к математике" (М. "Просвещение", 1972). Сложное отношение (cross-ratio), оно инвариантно при проективных преобразованиях , при перестановке точек его значение меняется по определённым правилам. Такие перестановки образуют замкнутый цикл. Замкнутость цикла приводит к одному из 6 значений.

"На фига, козе баян?" Сложное отношение, сохраняющее инвариантность при проективных преобразованиях, может быть адаптировано для анализа финансовых данных. Выявление инвариантных паттернов, позволяет формализовать их геометрическую структуру, если четыре точки (экстремумы) образуют паттерн, их cross-ratio может служить универсальным дескриптором, инвариантным к масштабированию графика. Это помогает распознавать паттерны даже при изменении таймфрейма или волатильности. Если три точки (например, два минимума и один максимум) задают проективное преобразование, то четвертая точка (прогнозируемый уровень) вычисляется через инвариантное сложное отношение.
Cross-ratio помогает анализировать гармонические паттерны (например, "Гартли", "Бабочка»), где соотношения между экстремумами следуют строгим пропорциям. Все это можно дополнять классическими методами технического анализа.
Практические шаги для поиска паттерна:
1) Выделите экстремумы на графике.
2) Вычислите cross-ratio для всех комбинаций из 4 точек.
3) Сравните с эталонами (ABCD: CR ≈ 2.618, Cypher: CR ≈ 1.618, Bat: CR ≈ 0.886)
4) Фильтрация.

Но меня больше всего заинтересовало инвариантность перестановки, образуют замкнутый цикл. Но это другая тема -двойственные отношения между оригиналом и изображением!  :smile:  
Работа индикатора вне графика.
 
Вот ссылка на индикатор,  https://forum.quik.ru/messages/forum10/message78143/topic8506/#message78143, на что нужно обратить внимание, это в анонимной функции на передачу ds!
ds  = CreateDataSource, то есть мы передаем методы на которые подписаны, это делается именно для того, чтоб без извинений и переделок можно было индикатор использовать в алгоритмах, через наследование.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
В классической экономике принцип двойственности (монады), рассматривается через отношения производителя и потребителя. Если произвести замену Производитель = Покупатель (ну в итоге производственный цикл заканчивается продажами товара), а Потребителя = Покупатель. Тогда задача прогнозирования рынка может быть представлена как решение системы дифференциальных уравнений, где начальные условия и алгоритм вычисления прогнозной траектории определяются фазами рынка (накопление, распределение, тренд растущий, тренд снижающийся).

Для этого можно использовать подход, где:
   Начальные условия — это текущие фазы состояния продавца и покупателя, которые задают начальные значения для динамических переменных (спрос, предложение и цена).
   Алгоритм вычисления прогноза — это система дифференциальных уравнений, которые описывают изменения спроса, предложения и цены на основе взаимодействия между продавцом и покупателем.

Математическая модель, будет описывать следующие взаимно дополнительные отношения.
* Продавец влияет на рынок через предложение товара и спрос на деньги.
* Покупатель влияет через предложение денег и спрос на товар.
Изменение этих факторов можно выразить через дифференциальные уравнения. Учитывая тот факт что эти отношения подчинены Закону Спроса Предложения.

Важно, Цена, в этом подходе, определяется спросом и предложением, и является Мерой этих отношений!

В реальном времени решение этой системы уравнений с заданными начальными условиями позволяет прогнозировать динамику цен, тренды, а также возможные фазовые переходы в будущем.
Этот подход не привязан, к таким входным параметрам, как период или длина скользящего окна. Удачи! :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Задачу прогнозирования, можно свести к решению краевой задачуи Коши, для системы дифференциальных уравнений, с заданными начальными условиями. Возможность решить, такую задачу прогнозирования, заключается в определении:
1. начальных условий – фазы,
2. алгоритма вычисления прогноза - функция.
Если известны начальные условия движения и алгоритм вычисления траектории, то мы можем вычислить (сделать) прогноз судьбы любой системы.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Trbot написал:
ОТЦ, РД, Монада - да как хотите называйте всё это лишь бы профит был.
Для реализации профита, нужно другое согласен и это не только для алгоритмической
.
1) Положительное мат. ожидание вашей торговой системы, на статистически значимом периоде.
2) Система должна показывать Профит фактор не ниже 2 и Процент прибыльных сделок более 40%
3) Для улучшение результатов торговой системы нужно адекватное управление позицией ММ.
4) А может и первое, контроль рисков, РМ.
5) Ну и конечно самодисциплина, в прочем  алгоритмическая здесь сильно помогает.
Вроде ничего не забыл, если ваша система отвечает этим требования вперёд! :wink:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Trbot написал:
Профит есть от роботов? Я имею ввиду вообще практику применения роботов, практику алготрейдинга. Профит есть?
Профит от роботов у каждого свой, алготрейдинг - это прежде всего создание алгоритмов, кто что на ваял, то и получил. Я лишь рассуждаю о новых подходах, которые реализуемы в этих алгоритмах. И моментах торговой деятельности на бирже? Например, в своей практике, использую два уровня защиты, стоп - лосс на сделку (небольшой) , и процент проигрыша от капитала, он реализован у меня как индикатор на графике для каждого инструмента отдельно, я им иногда пренебрегаю, как Вы думаете связан алгоритм и профит. Моя практика говорит да.

Повторюсь трейдинг иллюзия заработка легких денег, это полноценная профессиональная деятельность крупных игроков :smile:
Идеальная торговая стратегия: продал на верху, купил снизу. Алгоритмически это осциллятор,  идеально синусоидальная волна (про которую я тут распинаюсь рассказывая) . Ее применение позволяет перейти в Фазово - частотную область, рассчитав период несущей волны и получив фазу, строим опережающий индикатор с помощью сдвига фаз. Я только что  описал алгоритм, одного из подходов расчета опережающего индикатора, выше есть примеры.
Для сравнения, если использовать алгоритм простой средней  то лаг определяется в половину периода скользящего окна, то есть прошло  половина периода пока получен сигнал на сделку. Вот и сами ответьте что лучше, получить опережающий или пропущенный на половину сигнал.

У этого подхода есть свой недостаток, для вычисления тригонометрических функций требуется указывать Период. Отсюда и родилась монадная тема. Вопрос можно поставить так, а можно ли описать алгоритмически фазовые переходы, без предварительного указания периода?  Оказывается можно! Не возят цыгане в своих кибитках, вычислительные машины и библиотеки книг, все знания передаются устно.

"Сложность этого подхода - выше сложности высшей экономики. Он доступен для понимания и овладения лишь тем, кто имеет не только высокий интеллект, глубокие экономические знания, любознательность и трудолюбие, но и «души прекрасные порывы»." :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Trbot написал:
Проще говоря - важно наличие обратной возвращающей силы. При отклонении некой системы от положения равновесия возвращающая сила стремится вернуть её к положению равновесия
В своей "Общей теории цикла" (ОТЦ) Соколов Юрий Николаевич, такое взаимодействие называет "квант взаимодействия", мне же больше но нраву старинное название "Монада".
Здесь нужно понимать что авторы на которых я ссылаюсь, говорят о единых законах миро воздания, а это значит, терминология принимаемая в физике или химии вполне себе допустима и в нашем предмете.
Из теории систем известно, что любая система содержит в себе главное звено, которое нужно найти а затем, "потянув" за него можно "распутать" весь системный "клубок".

Решил человек заняться инвестициями, нужен капитал, приобретает актив, и у него остаются деньги.
Мат. запись такой монады, К = А + Д. если это от нормировать, получим доступ к структурному анализу. Именно такие подходы я пытаюсь обсуждать, и применить при анализе и прогнозировании у себя.
Еще один пример, вот Вы пишете:
Цитата
Trbot написал:
Для механических колебаний важно наличие периодического преобразования энергии из кинетической в потенциальную.
По сути Вы говорите о фазовых переходах, посмотрите как это описывает в своей "Ритмодинамика" (РД) Иванов Юрий Николаевич. Вообще читая РД, не покидает чувство, что читаешь фантастический роман.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Ну что Вы такое пишете?
Цитата
nikolz написал:
Если nil элемент не таблица, то никакой памяти сборщик мусора не удаляет.
Ну как nil элемент, может быть таблица? Именно для запуска сборщика мусора и устанавливаем nil. А способ продемонстрируйте кодом, тогда можно, что то обсуждать, а так одна философия.
Цитата
nikolz написал:
Без обид, но не стоит нести в массы отсебятину и чушь. --------------Все это можно найти в интернете.-----------------Если хотите просвещать, то дайте просто ссылку, а не пытайтесь своими словами пересказывать то, в чем сами не разбираетесь.
"Предлагаемый подход в ВУЗах не преподаётся и не изучается, так как он - тайный, хотя бы потому что не имеет учебника". Сылка на авторов работ на которые я опираюсь в своих рассуждениях я даю.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Trbot,  Формирование цен отражает результат взаимодействия множества факторов, спрос / предложение, психология (страх / жадность), события экономического характера (процентные ставки, инфляция ...).
Отображение цен на графике в виде бара, это отображение на плоскости. Колебания цен в записи бар — это процесс, при котором цена может двигаться вверх и вниз, создавая амплитуду колебания, а также периодичность в изменениях.
Это легко проверить, кто бы что не писал, возьмем бар на интервале H1, и заполним его барами с формированными на М1, на том же самом интервале (к слову, это свойство называют фрактальностью)
Колебания можно рассматривать как волновой процесс? Термин "волновой процесс", используется в техническом анализе как метафора, а не в физическом смысле (распространение колебаний в среде).
Волны Эллиотта — модель, где цена движется в виде импульсных и коррекционных волн. Тренды и коррекции — их можно также условно можно назвать "волнами".
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 23 След.
Наверх