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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 22 След.
Работа индикатора вне графика.
 
В 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, на том же самом интервале (к слову, это свойство называют фрактальностью)
Колебания можно рассматривать как волновой процесс? Термин "волновой процесс", используется в техническом анализе как метафора, а не в физическом смысле (распространение колебаний в среде).
Волны Эллиотта — модель, где цена движется в виде импульсных и коррекционных волн. Тренды и коррекции — их можно также условно можно назвать "волнами".
Версия 11.4.0.54. Что не так?
 
В терминале от Сбер весит сообщение, надеюсь глюки связаны с этим: "С 11 по 23 марта планируется техническое обновление QUIK.Это необходимо для дальнейшей корректной работы терминала". А версию предпочитаю ту которую брокер рекомендует, как наиболее адаптированную к серверу. Вообще работали последнее время стабильно.  
Версия 11.4.0.54. Что не так?
 
nikolz,  Сбер "глючит" второй день! Вчера просто без предупреждений отключали от сервера, сегодня не соединяют, от поддержки огромный ноль или даже нил. Так и хочется сменить лексику на не цензурную :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Не стоит питать иллюзий: рынок — это не место для легких денег!
---------------------------------------------------------------------------------------------
Позволю себе немного по философствовать и высказать свое видение на инвестиции, но это только ради пользы общего дела.
Те кто сталкивался с финансовыми управляющими - аналитиками, знает что первым вопросом от них будет: "на какой временной горизонт планируете разместиться?"  И это не праздный вопрос, не много в суть него нас окунул TWG. Но я хочу начать рассуждать на эти вопросы с основ.

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

2) Хаос и порядок
* Порядок — это система, где закономерности наблюдаемы и предсказуемы.
* Хаос — это не отсутствие порядка, а сложная система, которая кажется случайной из-за своей непредсказуемости. Однако в хаосе часто скрыты глубокие закономерности.

На финансовых рынках цены могут казаться хаотичными, но они подчиняются законам спроса и предложения, психологии толпы и макроэкономическим факторам. Изучая такую систему, пытаемся найти скрытые закономерности, анализируя графики, индикаторы и фундаментальные факторы. Даже в хаосе можно создать порядок, установив правила и рамки, торговая система с четкими правилами входа и выхода помогает избежать эмоциональных решений. Хаотичные системы часто меняются, поэтому важно быть гибким и готовым к изменениям (адаптироваться). Теория хаоса изучает, как малые изменения в начальных условиях могут привести к "эффект бабочки" (drastically different outcomes).

Философский взгляд, напоминает идеи стоицизма и даосизма:
 * Стоицизм: Принимайте то, что не можете изменить, и сосредоточьтесь на том, что можете контролировать.
 * Даосизм: Хаос и порядок — это две стороны одной медали (Инь и Ян). Они взаимосвязаны и дополняют друг друга. Хорошо, с практической стороны, разобраны в работе М.И. Беляева "Милогия".

Хаос — это не враг, а вызов. С ним также можно работать, если искать закономерности, создавать структуру и адаптироваться к изменениям. Если чувствовать баланс, найти тот самый ритм, вот и хаос обуздан.

* Баланс, на мой взгляд лучшее его описание - это бух. учет, нет не правила учета, а сама структура и построение этого учета, способного восстанавливать всю цепочку бинарных записей.
Ну и конечно бинарность хорошо известна в программировании.
* С РИТМОМ все значительно сложней, ритмом занимается - ритмодинамика. Волновая геометрия является базисом ритмодинамики. Основные постулаты РД совпадают с началами волновой геометрии.
Волновая геометрия, как инструмент, предоставляет возможность моделировать процессы самоорганизации простых и сложных систем без каких-либо специфических расчётов сил взаимодействия.
В основе моделирования лежит оценка состояния среды вокруг исследуемого осциллятора с последующим перемещением этого осциллятора в сторону области равновесия состояний.
Состояние среды описывается через амплитуду, фазу и частоту волн.
Вот мы и вернулись к математике, амплитуде, фазе и частоте волновых колебаний, балансу, ритму и ни какой философии. То есть можно писать алгоритм моделирования, и прогнозов, как это делается с помощь книги перемен или карт "Торо". И не каких чудес, практически одна математика - царица наук.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Предложенный подход  paluke,  t[I-3] = nil (в место limit_table_size), разложений по полочкам Nikolay,  

Если просто обнулять элементы таблицы, например, t[I-3] = nil, это приведет к тому, что в таблице появятся "дыры" (nil-значения).  Да, не требуется сдвигать элементы, что может быть быстрее для больших таблиц. Но при этом таблица будет содержать "дыры", что может привести к ошибкам при использовании функций, ожидающих последовательности.  "В Lua таблицы с nil-значениями могут вести себя неожиданно, особенно при использовании функций, которые работают с последовательностями (например, #t, table.concat, ipairs). Память не освобождается сразу, так как в этом варианте Lua использует сборщик мусора для удаления nil-элементов. Это может привести к увеличению потребления памяти".

Из выше всего сказанного, делаем выводы.
1) limit_table_size подходит для небольших размеров таблиц
2) Подход таблица содержащая "дыры", подходит для конечных вычислений, не требующий передачи таблиц дальше для использования, как это показал нам Nikolay.
3) В подходе с выводом таблиц и функции, как это предложилNikolay,  на мой не профессиональный взгляд, лучше использовать альтернативный метод как это предлагают разработчики, использовать кольцевой буфер (circular buffer). В этом случае таблица имеет фиксированный размер, и новые элементы записываются поверх старых. Вариант, избежать использования limit_table_size, но при этом не хотите сталкиваться с проблемами nil-значений, в случае дальнейшего использования таблиц. Это наиболее эффективный способ управления памятью для задач, где требуется хранить только последние N элементов.
И чтоб не быть голословным вот пример.
Код
local function circular_buffer(tbl, max_size, index, value)
    local pos = (index - 1) % max_size + 1
    tbl[pos] = value
    return tbl[pos]
end

return function(I, FSettings, ds)
    local I = I or 1
    local ds = ds or nil
    local FSettings = FSettings or {}
    local P = FSettings.period or 9
    local v_t = FSettings.v_t or 'C'

    -- Текущая цена
    local p0 = Value(I, v_t, ds) or 0

    -- Инициализация на первом баре
    if I == 1 then
        Ema, iFich, Cu, Cd = {}, {}, {}, {}
    end

    -- Используем кольцевой буфер
    local ema1 = circular_buffer(Ema, P * 2, I - 1, p0)
    local ema0 = p0 * k + (1 - k) * ema1
    circular_buffer(Ema, P * 2, I, ema0)

    -- Остальная логика
    ...
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Утро начал в борьбе с квик, квик победил. Пришлось переставлять, устранил одну из проблем, но видимо есть еще, зато с с моего скрипта снято подозрение. :smile:   Вариант
Цитата
Nikolay написал:
function Cached.Roofing_Filter(FSettings, ds)

   -- Параметры
   local ds = ds or nil
   local FSettings = FSettings or {}
   local v_t = FSettings.v_t or 'C'
   local P = FSettings.period or 48
   local N = FSettings.N or 10
   local x = FSettings.x or nil

   -- Локальные таблицы для хранения данных между вызовами
   local Price, HP, SSF, Lead = {}, {}, {}, {}
   local alpha1, a1, b1, c2, c3, c1 = 0, 0, 0, 0, 0, 0
   local I1 = 0  -- Индекс предыдущего бара

   -- Функция для ограничения размера таблицы
   local function limit_table_size(tbl, max_size)
       while #tbl > max_size do
           table.remove(tbl, 1)
       end
   end

   return function(I)
       -- Текущая цена
       local p0 = x or Value(I, v_t, ds) or 0

       -- Проверка смены бара
       local newbar = I > I1
не совсем подходит для реализации в индикаторе, все таки перестает работать таблица Settings в анонимной функции, видимо на то она и анонимна. Но подход взял на вооружение для алгоритмов.
Цитата
Nikolay написал:
Если речь про индикатор, то необходимо использовать метод OnChangeSettings и реинициализировать метод расчёта.
Показалось совсем не нужно или не понял как ею пользоваться?

Возник новая проблема:
Цитата
VPM написал:
Конфликт имен при работе с DDE-сервером и одновременном использовании нескольких терминалов QUIK. DDE —  один из старейших протоколов, и его использование может быть нестабильным. Возможность использования более продвинутых методов интеграции, например таких как: Экспорт данных в файлы (CSV, TXT) средствами Lua, с последующей загрузкой в Excel или Блокнот. На тыкается на проблему, чтения самой таблицы "состояние счета", или я опять что то пропустил?
неужели кроме как вывода таблицы состояния счета, нет других возможностей ее получения или ее параметров?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Конфликт имен при работе с DDE-сервером и одновременном использовании нескольких терминалов QUIK. DDE —  один из старейших протоколов, и его использование может быть нестабильным.
Возможность использования более продвинутых методов интеграции, например таких как: Экспорт данных в файлы (CSV, TXT) средствами Lua, с последующей загрузкой в Excel или Блокнот.
На тыкается на проблему, чтения самой таблицы "состояние счета", или я опять что то пропустил?
Очень долгое выключение терминала
 
Цитата
VPM написал:
Добрый день,"Ни когда не было и вот опять!". Все утро пытаюсь загрузить квик версия 11.4.1.3. Вернее не так сам квик грузится, но при входе по логину, часами зависает на "чтении информации об окнах", качает себе гигабайты и крутит колесико? Увлекательное зрелище! Проверил скорость интернета, сбросил лог., сбросил квик  несколько раз для загрузки предыдущих wnd, не помогло. Позвонил брокеру, "Сервера работают нормально, пере закажите данные". НЕ помогло?  
Кажется причина нашлась. Это конфликт имен, при работе с DDE-сервером и одновременном использовании нескольких терминалов QUIK. Во время одновременного запуска, двух разных терминалов
и выводе ими информации через DDE-сервер в одну книгу Excel.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Благодарю, это супер удобно:
Код
-- Возвращаемые значения
        return Lead[I] or 0, SSF[I] or 0
    end, Lead, SSF
end

local fAlgo, Lead, SSF = Cached.Roofing_Filter(FSettings, ds)
1) return Lead[I] or 0, SSF[I] or 0 можно использовать в индикаторах
2) end, Lead, SSF возвращает сам алгоритм и таблицы полностью, можно допустим выгружать в электронные таблицы и там обрабатывать и анализировать.
Супер!
Надо проверить будет ли этот подход в режиме индикатора пересчитывать если изменять, допустим период или другие задания?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Нашел, кому как и мне нужно более подробно!

"В Lua таблицы представляют собой ассоциативные массивы, которые могут хранить значения различных типов. Каждый элемент таблицы в Lua может быть представлен структурой TValue, которая содержит два основных поля:
  1. Value value_ — это поле, которое хранит значение элемента. В зависимости от типа, это может быть число, строка, указатель на другую структуру и т.д.

  2. int tt_ — это поле, которое хранит тип значения (например, LUA_TNIL, LUA_TNUMBER, LUA_TSTRING и т.д.).

Когда вы выполняете операцию t[i-1] = nil, это означает, что вы удаляете элемент из таблицы по индексу i-1. Внутри Lua это приводит к тому, что значение элемента устанавливается в nil, а тип (tt_) устанавливается в LUA_TNIL (который обычно соответствует значению 0).

Таким образом, операция t[i-1] = nil эквивалентна следующему:

  • Установка value_ в какое-то "пустое" значение (в случае nil это может быть просто 0 или NULL).

  • Установка tt_ в 0 (что соответствует типу LUA_TNIL).

Это означает, что элемент таблицы больше не содержит полезного значения и считается "удаленным" или "пустым"."
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
paluke,  Я тоже проверил, действительно второй элемент зачищен? Хотя структура таблицы должна  сохраниться, как утверждает nikolz,?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Кручу, верчу, откровенно туплю, вот этот момент:
Цитата
Nikolay написал: Также я предпочитая возвращать инициализированный метод расчёта и таблицы, хранящие данные (в данном случае это Lead и SSF). Их необходимо иницализировать один раз и тогда всегда будет под рукой ссылка на весь массив данных, а нее только возвращаемые последние.Для примера:local fCalc, Lead, SSF = Cached.Roofing_Filter(FSettings, ds)И тогда расчёт выглядит элементарно:fCalc(index)А использование данных:Lead[index], Lead[index-2] и т.д. Ссылка же неизменная, а значит нет необходимости получать из метода расчёта что-то ещё, засоряя память.
Если не сложно, покажите на примере кода выше, Вашу реализацию фильтра. Как должно выглядеть?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Если речь про индикатор, то необходимо использовать метод OnChangeSettings и реинициализировать метод расчёта.
Даже не заметил когда метод добавили. Попробую Ваши рекомендации и этот метод.
Цитата
Nikolay написал:
Метод table.remove не самый быстрый - очень не быстрый. Хотя, наверно, в рамках Квик это не столь критично, тем более, что расчёт раз в бар.
Метод table.remove добавил для простоты кода, да и что он делает, двигает 3 бара, в рабочем варианте,  моя любимая двух факторная очередь, не плохо зарекомендовала себя.
Цитата
Nikolay написал:
Я предпочитаю просто очищать данные в таблицах, сборщик мусора освободит память.
Вы имеете в виду такой подход        Table[I] = x  if I > I - 3 then Table = nil end

Индикаторы удобны для визуализации кода.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Вот сам вызов, я в принципе  всегда так делаю.
Settings={}
Settings.Name = "1Roofing_Filter"
Settings.v_t = "O"
Settings.period = 48
Settings.N = 10
--Settings.avto = 0 -- 1 adapt

local f
function Init()
local cached=dofile("C:\\cached.lua")
f = cached.Roofing_Filter()
cached=nil
Settings.line = {
{Name = "lead",          Color = RGB(0, 0, 0),   Type = TYPE_LINE, Width = 1},
{Name = "Roofing_Filter",Color = RGB(255, 0, 0), Type = TYPE_LINE, Width = 1},

}
return #Settings.line
end

function OnCalculate(index)
return f(index, Settings)
end
То есть с начало нужно инициализировать, а затем возвращаю замыкание. Если же  Settings перенести Roofing_Filter(Settings), то перестает работать Settings.period  когда индикатор на графике?  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Код
function Cached.Roofing_Filter()
    -- Локальные таблицы для хранения данных между вызовами
    local Price, HP, SSF, Lead = {}, {}, {}, {}
    local alpha1, a1, b1, c2, c3, c1 = 0, 0, 0, 0, 0, 0
    local I1 = 0  -- Индекс предыдущего бара

    -- Функция для ограничения размера таблицы
    local function limit_table_size(tbl, max_size)
        while #tbl > max_size do
            table.remove(tbl, 1)
        end
    end

    return function(I, FSettings, ds)
        -- Параметры
        local I = I or 1
        local ds = ds or nil
        local FSettings = FSettings or {}
        local v_t = FSettings.v_t or 'C'
        local P = FSettings.period or 48
        local N = FSettings.N or 10
        local x = FSettings.x or nil

        -- Текущая цена
        local p0 = x or Value(I, v_t, ds) or 0

        -- Проверка смены бара
        local newbar = I > I1
        if newbar then
            -- Обновление индекса бара
            I1 = I

            -- Инициализация на первом баре
            if I == 1 then
                Price, HP, SSF, Lead = {}, {}, {}, {}
                Price[I], HP[I], SSF[I], Lead[I] = p0, 0, 0, 0
                local fi = (0.707 * 2 * math.pi / P)
                alpha1 = (math.cos(fi) + math.sin(fi) - 1) / math.cos(fi)
                a1 = math.exp(-1.41421356 * math.pi / N)
                b1 = 2 * a1 * math.cos(1.41421356 * math.pi / N)
                c2, c3, c1 = b1, -a1 * a1, 1 - c2 - c3
            else
                -- Обновление цены
                Price[I] = p0

                -- Разница цен для выделения высокочастотных компонентов
                local p1 = Price[I - 1] or p0
                local p2 = Price[I - 2] or p1
                local noise = p0 - 2 * p1 + p2

                -- Расчет HP-фильтра
                local hp1 = HP[I - 1] or 0
                local hp2 = HP[I - 2] or hp1
                local hp = (1 - alpha1 / 2) * (1 - alpha1 / 2) * noise + 2 * (1 - alpha1) * hp1 - (1 - alpha1) * (1 - alpha1) * hp2
                HP[I] = hp

                -- Расчет SuperSmoother
                local ssf1 = SSF[I - 1] or 0
                local ssf2 = SSF[I - 2] or ssf1
                local ssf = c1 * (hp + hp1) * 0.5 + c2 * ssf1 + c3 * ssf2
                SSF[I] = ssf

                -- Расчет опережающего сигнала (Lead)
                local lead1 = Lead[I - 1] or 0
                local lead = 2 * ssf - 1 * ssf2
                Lead[I] = lead
            end

            -- Ограничение размера таблиц
            limit_table_size(Price, 3)  -- Храним только последние 3 бара
            limit_table_size(HP, 3)
            limit_table_size(SSF, 3)
            limit_table_size(Lead, 3)
        end

        -- Возвращаемые значения
        return Lead[I] or 0, SSF[I] or 0
    end
end
Это реализация Roofing Filter, который состоит из двух основных компонентов:
  1. HP Filter (High-Pass Filter): Настроен на цикл 48 баров, чтобы ослабить более длительные периоды.

  2. SuperSmoother Filter: Настроен на цикл 10 баров, чтобы ослабить более короткие периоды.

Этот фильтр используется для выделения желаемых частотных компонентов из ценовых данных, что полезно для анализа циклов и можно использовать для генерации торговых сигналов.

Что не так с ним, в торговой стратегии подобных фильтраций несколько, особенностью QUIK - индикатор вызывается в функции обратного вызова, которая может вызываться несколько раз в рамках одного бара, при поступлении новых тиков. Если таблицы Price, HP, SSF, Lead инициализировать внутри возвращаемой функции, они будут сбрасываться при каждом вызове, что приведет к потере данных. Для корректной работы индикатора в QUIK нужно сохранять состояние между вызовами. Это можно сделать, используя локальные таблицы вне возвращаемой функции, но при этом ограничивать их размер, чтобы избежать утечек памяти.

Что смущает в этой реализации, Быстродействие?  

Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Для тех кто торговал сегодня Si, я на нем проводил тесты, делаем ставки, про тестировали уровень сопротивления, собрали ликвидность вернемся в зону 86700 - 86800, и все до свидание налоги, куда кривая вынесет! :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Trbot,  Вы правы, мой подход  тоже такой, нашел интересное встрял, если с ходу не получилось разобраться, вход идут "молоток и отвёртка", остались лишние запасные части "капиталисты перемудрили" - все ведь работает, ну а если не работает берем в руки инструкции и буквари. :smile:  Касаемо, обсуждения, по мне так Вы перемудрили, не наверно подобная стратегия возможна, где ни будь на мало ликвидном  рынке, но даже для этого, чтоб ее реализовать 1. нужны приличные средства; 2. команда амбициозных единомышленников из разных сфер; 3. инсайд. Возможно кто из маркетмейкеров и реализует,  подобное но это очень сложно. У меня все гораздо проще, целый день тестирую одну стратегию, не идет ни как, "пялиться в экран  занятие грустное, вот и пишу всякую чушь". :wink:  
QLUA, вопросы начинающих.
 
Цитата
Igor_User написал:
А что такое debug в QLua? В справке такого нет. Где можно почитать об этом?
Читать нужно сам язык луа не ниже версии 5.4 - это его таблица, QLua - это библиотека от разработчиков для возможности доступа и взаимодействия срипта  с рабочим местом квик.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB,  Я лишь уточняю показатель, не массовость а объёмы, которые будут участвовать в этих стратегиях, а для этого нужен маркетинг и реклама. Ну и что что допустим 1000 трейдеров будет торговать 1 контрактом? Из того что здесь я написал 10 пользователей прочитает а 1 - 2, попробуют.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Ваше замечание, о несоответствии ньютоновской модели для описания микромира, прекрасно иллюстрирует ограниченность классических подходов в финансах, и необходимость использования более сложных и адаптивных методов. Так и я про это.
Нет у меня ни какого идеализма относительно математики, но написания автоматической торговой стратегии требует некой формализации подходов, и математика здесь на высоте.
ДА, Ньютоновская механика, основанная на законах движения и гравитации, прекрасно описывает поведение макроскопических объектов (планеты, машины, здания и т.д.). Она предсказуема, и работает в условиях, где можно пренебречь квантовыми эффектами. Так и я подчеркиваю, что речь идет о средне срочных стратегиях, показателями которых являются профит фактор и процент прибыльных сделок.
А с помощью полосового фильтра, все это можно построить и про тестировать.
Касаемо микромира, да ньютоновская механика перестает работать.
Микромир описывается квантовой механикой, где царят вероятностные законы, принцип неопределенности и суперпозиция состояний. Если у Вас есть пример таккого подхода, покажите обсудим.
Касаемо Вашего утверждения:
Цитата
TGB написал:
где "ограниченность круга участников" является ключевым утверждением.---    Представьте на минуту, что вы сумели найти доходную стратегию торгов устойчиво обеспечивающую прибыль 60% годовых. Если вы хоть что-то понимаете в фондовом рынке, то как только эту стратегию станут использовать другие участники рынка, то они будут разрушать вашу стратегию.
не могу полностью согласиться, важно не то что узнают, важней что начнут активно применять. И здесь в помощь все та же классическая  ньютоновская механика. Важно не сколько участников пользуется, а стратегии поставки цены на рынок, проще говоря объемы. Деньги в (классическом понимании) и выгода двигают рынки, и не только фондовый.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB,  Да все верно Вы излагаете, только нужны формализованные в код утверждения и желательно строго математически обоснованы, а так философия. В "9) Использование синусоидальных волн." приводится принцип построения опережающего фильтра к нему еще полагается определить доминирующий период в данных, и это математика, бери и встраивай в стратегии, доминирующий период поможет адаптировать такую стратегию. И это просто один подход к написанию адаптивной стратегии. Согласен торгуем вероятностями, но этот подход гораздо лучше, чем стандартные индикаторы с огромными лагами.
Цитата
VPM написал:
Свинг-трейдинг — это стиль торговли, который направлен на захват среднесрочных движений рынка. В отличие от скальпинга или долгосрочного инвестирования, свинг-трейдинг требует баланса между частотой сделок и их качеством.
и "чихать" на роботов. :smile:  
QLUA, вопросы начинающих.
 
Цитата
Igor_User написал:
Есть ли какие-нибудь ещё способы определить строку, из-за которой эта ошибка произошла?
Lua предоставляет несколько подходов для обработки и обнаружения ошибок, а также для организации процесса работы с ними. Основные способы обнаружения ошибок, использование pcall или xpcall. Если нужно не только отловить ошибку, но и логировать её с дополнительной информацией ( место ошибки, стек вызовов и т.д.), можно использовать debug или писать собственное логирование.
Создание окна и кнопок в Quik.
 
Vasiliy,  Все дело в том какой версией луа вы пользуетесь, если 5.4 то Вам нужна 64 разрядная длл. Если задача сводится
Цитата
Vasiliy написал:
Задача: Создать окно и пару кнопок, в дальнейшем хочу привязать к кнопкам стоп и тейк, ну и развивать эту тему.
То достаточно стандартных средств qlua, для этого создаете окно рабочего места стандартной библиотекой (см. Функции для работы с таблицами Рабочего места
QUIK ) с помощью ф. SetTableNotificationCallback - Задание функции обратного вызова для обработки событий в таблице и переменных, решаете свою задачу. Совет отфильтруйте сообщения на форуме по этой функции найдете все необходимое, включая примеры. Удачи.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Поднимая записи наткнулся.
Ценные идеи и концепции,  связанные с разработкой и оптимизацией торговых стратегий, в контексте свинг-трейдинга, взятые из работ John F. Ehlers.
John F. Ehlers - это практикующий трейдер, написал несколько книг и массу полезных статей по трейдингу, формализовав строго матиматически, в код свои идеи. Я лишь перевел и немного структурировал текст, чтобы он стал более целостным и удобным для чтения.

Стратегии свинг-трейдинга, хорошо подходят при тоговле фьючерсами, это и мой любимый инструмент. Свинг-трейдинг — это стиль торговли, который направлен на захват среднесрочных движений рынка. В отличие от скальпинга или долгосрочного инвестирования, свинг-трейдинг требует баланса между частотой сделок и их качеством.

Далее ключевые принципы разработки и оптимизации торговых стратегий, которые помогают создать устойчивую и прибыльную систему.

1) Простота стратегии.
** Простота торговой стратегии повышает вероятность того, что она будет устойчивой к нескольким символам и временным рамкам.
  Простые правила входа и выхода легче тестировать и адаптировать к различным рыночным условиям.
** Сложные стратегии, как правило, переоптимизированы и плохо работают на новых данных.

2) Предсказуемость правил входа и выхода. Следующим критерием является предсказуемость правил входа и выхода.
** Большинство стратегий, основанных на правилах, зависят от индикаторов, настроек или шаблонов. Однако поиск прогнозного индикатора, вероятно, является самой сложной частью разработки торговой стратегии. Индикаторы используются в качестве вспомогательного средства для принятия решений о покупке и продаже, но они не должны быть единственным источником сигналов.

3) Тестирование стратегии.
** При тестировании своей стратегии вы должны совершить достаточно сделок, чтобы результаты были статистически значимыми.
** Одно практическое правило заключается в том, что у вас должно быть не менее 30 сделок для каждого параметра. Это позволяет минимизировать влияние случайных факторов и убедиться в устойчивости стратегии.

4) Использование стоп-лосса.
** Правила стоп-лосса следует использовать с осторожностью.
** Стоп-лосс не должен быть неотъемлемой частью стратегии на этапе разработки. Моя процедура заключается в разработке стратегии без использования правила стоп-лосса. После того, как основная часть стратегии станет удовлетворительной, я исследую максимально возможные неблагоприятные отклонения и только затем вставляю правило стоп-лосса, которое ограничивает максимальные убытки, не сильно влияя на прибыльные сделки.

5) Тестирование вне выборки.
** Последний общий аспект разработки стратегии, который нельзя упускать из виду, — это тестирование «вне выборки».
** Тестирование вне выборки означает, что вы применяете свою торговую стратегию к одному и тому же символу в другом временном диапазоне или к нескольким различным символам, причем все это выполняется без изменения параметров. Это помогает убедиться в устойчивости стратегии к различным рыночным условиям.

6) Характеристики эффективности стратегии.
** Эффективность торговой стратегии легче всего характеризовать процентом прибыльных сделок и коэффициентом прибыли.
** Коэффициент прибыли — это отношение валового выигрыша к валовому проигрышу. Следование за трендом обычно означает попытку определить возможность входа и затем быстро выйти из сделки, если тренд не развивается. Это означает, что можно заработать много денег на нескольких сделках, но на этом пути будет много убыточных сделок. Таким образом, торговля по тренду означает готовность принять относительно низкий процент прибыльных сделок для достижения относительно высокого коэффициента прибыли.

7) Индикаторы и их роль.
** Я утверждаю(это John F. Ehlers), что не существует индикаторов для прогнозирования трендов.
** Индикаторы прогнозирования более применимы к краткосрочным процессам, таким как колебательная или импульсная торговля. Если индикаторы действительно являются предсказательными, краткосрочная торговля характеризуется более высоким процентом прибыльных сделок. Однако фактор прибыли краткосрочных сделок обычно меньше, потому что спектральное расширение ограничивает колебания краткосрочных рыночных движений.

8) Осцилляторы и их использование.
** Общий класс индикаторов, поддерживающих краткосрочную торговлю, называется осцилляторами.
** Лучший способ торговать на осцилляторе — это предвидеть поворотную точку и полагаться на статистическую отдачу от среднего значения как на предсказательную. При достаточно малой полосе пропускания полосовой фильтр создает выходной сигнал, который можно охарактеризовать как синусоидальную волну, имеющую медленно изменяющиеся амплитуду и фазу.

9) Использование синусоидальных волн.
** Факт, что косинусоидальная волна опережает синусоидальную волну на 90 градусов, важен, потому что это дает нам возможность искусственно продвинуть точку поворота выходного сигнала полосового фильтра на четверть цикла.
** Продвигая сигнал на четверть цикла, мы можем свести на нет или уменьшить вычислительную задержку, требуемую фильтром. Из расчетов мы знаем, что скорость изменения синусоидальной волны — это в точности косинусоидальная волна, амплитуда которой изменяется аргументом. Разница в один столбик создает скорость изменения синусоидальной волны, поэтому косинусоидальная волна с поправкой на амплитуду может быть вычислена в коде как:

Косинус = (Период / (2 * math.pi)) * (BP - BP[1])

Да, действительно так просто создать опережающий торговый сигнал с использованием выходного сигнала полосового фильтра, если вы знаете или оцениваете период синусоидальной волны!

10) Цель использования косинусоидальной волны.
** Целью использования косинусоидальной волны является создание сигнала покупки, когда косинусоидальная волна находится на дне или около него, и создание сигнала продажи, когда косинусоидальная волна находится на пике или около него.
** Один из способов сделать это — отметить, что синусоидальная волна пересекает ноль вниз, когда косинусоидальная волна находится на своем дне, а синусоидальная волна пересекает ноль вверх, когда косинусоидальная волна находится на своем пике. Другими словами, мы можем создавать сигналы на покупку и продажу, просто основываясь на нулевых пересечениях синусоидальной волны.
** Немного более консервативно создать сигнал запуска, который отстает от косинусоидальной волны на одну или две полосы. Использование запаздывающей косинусоидальной волны в качестве триггера означает уменьшение задержки, которую мы пытаемся минимизировать. Некоторые быстрые сделки могут быть устранены путем использования нулевых пересечений синусоидальной волны в качестве входного сигнала только при подтверждении пересечением косинусоидальной волны с самой задержкой на один бар.

Заключение. Разработка и оптимизация торговой стратегии — это сложный процесс, который требует глубокого понимания рынка и инструментов анализа. Использование простых и предсказуемых правил, тестирование вне выборки и правильное применение индикаторов помогут вам создать устойчивую и прибыльную систему. Помните, что успешная стратегия — это не только правильные сигналы, но и дисциплина в их исполнении.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Если бы, все было так просто, как Вы рассуждаете, в учебных заведениях уволили бы учителей и преподавателей. :sad:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Учебник мало прочитать, его еще необходимо понять. В моем "опусе", лишь краткие выдержки и не только из этого учебника, на что бы следовало обратить внимание по моему скромному мнению, начиная собирать торговую программу.
Цитата
VPM написал:
Этот небольшой опус — попытка поделиться своим опытом и, возможно, помочь другим избежать ошибок или оптимизировать свой подход.
Если бы мне, еще пару - тройку лет назад сказали, обрати внимание на Метатаблицы и объектно-ориентированное программирование, я бы наверно "пальцем у виска покрутил" :smile: , сегодня это мой основной подход, леплю туда где можно и без него обойтись. А если бы прислушался к совету, сегодня бы не переписывал код, а использовал годами проверенный модуль. За ссылку спасибо, но лично у меня книга сохранена на компе, возможно кому понадобиться.
Я лишь сделал пролог, к обсуждению универсальных модулей торговой системы, способной щелкать любые стратегии без изменений, ну или с минимальными  изменениями в модулях.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Собирая новую автоматическую систему, я поднимаю старые наработки, и довожу их до современного уровня понимания написания скриптов на Lua.
Этот небольшой опус — попытка поделиться своим опытом и, возможно, помочь другим избежать ошибок или оптимизировать свой подход.

1) Основы Lua: таблицы как основа всего.
Основная структура Lua — это таблицы. Именно из таблиц строятся все остальные конструкции языка. Таблицы в Lua — это не просто массивы или словари, а универсальный инструмент, который можно использовать для создания сложных структур данных. Если представить таблицу как отдельный модуль, то система становится четко структурированной.  Например, можно создать таблицу, которая будет содержать данные и методы для работы с ними.  Это позволяет разделять логику и данные, что делает код более читаемым и поддерживаемым.

2) Универсальные модули. Написав универсальный функциональный модуль, его можно использовать в разных скриптах.  Например, модуль для работы с математическими расчетами или модуль для обработки данных можно легко интегрировать в различные проекты.  Это экономит время и уменьшает количество ошибок, так как модуль уже протестирован и отлажен.
Код
Пример простого модуля: Модуль для математических расчетов
local MathUtils = {}
function MathUtils.add(a, b)
    return a + b
end
function MathUtils.multiply(a, b)
    return a * b
end
return MathUtils

Как можно использовать в других скриптах:
local MathUtils = require "MathUtils"
local result = MathUtils.add(5, 3)
print(result)  -- Вывод: 8

3) Метатаблицы и объектно-ориентированное программирование. В Lua нет классов в классическом понимании, но есть метатаблицы, которые творят чудеса, позволяют создавать объектно-ориентированные структуры. Метатаблицы — это мощный инструмент, который позволяет определять поведение таблиц, например, перегрузку операторов или наследование. С помощью метатаблиц можно создавать объекты с методами и свойствами.
Такой класс инкапсулирует всю логику, связанную с определенной задачей. Это позволяет изолировать код, упрощает его тестирование и повторное использование. Например, в торговой системе, можно выделить логику управления позициями, расчетов и генерации сигналов в отдельные классы.
Код
Пример класса для торговой системы:
local TradingSystem = {}
TradingSystem.__index = TradingSystem
function TradingSystem.new(params)
    local self = setmetatable({}, TradingSystem)
    self.length = params.length or 20
    self.frac = params.frac or 5
    self.pt_stop = params.pt_stop or 3
    self.price = {}
    self.smooth = {}
    self.coef = {}
    self.distance2 = {}
    self.market_position = 0
    self.entry_price = 0
    return self
end
function TradingSystem:process_bar(index, high, low, open_price)
    -- Логика обработки бара
end

-- Использование
local params = { length = 20, frac = 5, pt_stop = 3 }
local system = TradingSystem.new(params)

Делаем выводы по написанию скриптов на Lua.  Lua — это мощный и гибкий язык, который отлично подходит для создания автоматических систем:
1. Используйте модули. Разделяйте код на модули по функциональности, чтобы упростить его повторное использование и тестирование.
2. Применяйте метатаблицы. Создавайте объектно-ориентированные структуры для инкапсуляции логики.
3. Документируйте код. Добавляйте комментарии и описание функций, чтобы код был понятен не только вам но и другим разработчикам.
4. Тестируйте. Проверяйте каждый модуль и класс отдельно, чтобы убедиться в их корректности.
5. Оптимизируйте. Убедитесь, что ваш код эффективен и не содержит лишних вычислений.
Используя таблицы, модули и метатаблицы, можно создавать четко структурированные и легко поддерживаемые решения.

Надеюсь, этот небольшой опус поможет при создании новых проектов. Удачи!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Интересней потому что вперед смотрит. или есть еще что?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Спасибо!!!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Добрый день! Люди помогите, никак не могу "взять в толк" транслирует квик RUONIA. Если да то ка его получать?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
В продолжение темы облигаций. Рассуждая об ОФЗ, упустили еще одно важное свойство, брокер под них открывает плечо, как правило максимальное. Раньше я пользовался в инвестиционном. портфеле. идея была не замысловата, приобретаешь короткие ОФЗ и под них набираешь активно растущие или дивидендные акции, гасится берешь новую. В настоящий момент все это не работает. Проверил у одного брокера плечи под ОФЗ. например 26033  есть в портфеле коэффициент 0.3, 29014 / 0.35. То есть брокер активно кредитует под них, но что делать, акции в боковике, дивидендов нет, по факту торговля идет вероятностями, но для спекуляций пойдет, что делать с инвест. портфелем? Пробежался по идеям публично озвученным, мне показалась интересной такая: берется "флотер по сути и есть аналог вклада, например 29014, 29106" - на 80%, а на 20% набираются поставочные фьючерсы на акции. Таким образом по квартально идут выплаты купона, если акция дивдентная в конце срока можно ее получить, а нет так в новый переходим. Что скажите господа?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
А флотеры по сути и есть аналог вклада, например 29014, 29106.
Nikolay, Уточните вчера речь шла про
Цитата
Nikolay написал:
флоатеры - это как раз аналог вклада. Получаете текущий средний процент на рынке, не думая ни о чём. Например 29014, 29016 и далее.
Я 29016 взял на пробу?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Основные соображения свои я высказал, можно под итожить.
1. Уникальная ситуация на рынке (выше описал идею)
2. Ставка цб на максимумах, и уже не важно будет она 25 или 30%, цель достигнута выдача кредита остановлена.
3. Нездоровая на мой взгляд ситуация в банковском секторе, раздавая депозиты по 20% и выше "пылесося рынок", стараются привлечь и удержать клиента. Но 20% и выше нужно обслуживать, если  на 1 рубль займа, выдавалось 10 рублей кредита, а кредит под 30% не берут, валютные спекуляции не возможны, рынок акций внизу, вот и остаются облигации. Я понимаю что банки считают лучше чем это делаю я, знают где заработать и как обслужить свой долг,  но все по краю лезвия, ведь их оценка риска не выплаты в районе 7% предъявленных, одномоментно требований .
4. ОФЗ - это деньги, в прямом смысле этого понятия, все остальное меновая стоимость. Не выплаты могут быть по отдельным выпускам, наверняка, но это уже как все остальное упало.
Вот и считайте где риски выше?
Облигациями не торговал активно и серьёзно опыта нет, понравилась идея Nikolay, на счет использования сетки, хочу попробовать.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
На мой взгляд есть еще одно существенное обстоятельство, которое нельзя сбрасывать со счетов. Высокие ставки по депозитам, работают как пылесос, собирая частные деньги в депозитах в банках.
Такая ситуация смахивает на некую стерилизацию экономики.

Теперь вопрос ставим себе, если что то пошло не так в экономике, государство что будет ставить в приоритет?
1. Частные сбережения в банках?
2. Собственные деньги - ОФЗ?

Облигации это реальный сектор экономики, займы идут напрямую в экономику.
ГКО конечно преподало урок, но нельзя сравнивать ту экономику и сегодня, попадалась статистика, что в районе 20% к ВВП займы государства (при критичном 75%).  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Что касается ожиданий, то да 38-мые могут выстрелить.
А 48 не смотрели? что то я склоняюсь к ней, под затариться на всякий пожарный, да и по торговать можно, объемы норм?  Где можно с Вами более приватно переговорить?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Мой ответ выше это рассуждения на вопрос
Цитата
nikolz написал:
В банке вклад с доходностью 24%. В чем фишка брать облигации с доходностью 16%?
nikolz, Вот еще один довод который я пропустил
Цитата
Nikolay написал:
Плюс еще переоценка тела. Также облигации, как и любой торгуемый инструмент позволяет собирать волатильность, т.е. торговать небольшие движения. Это как выйти из вклада через неделю без потери процентов. Так что нет, вклады хоть и спокойней, но облигации могут дать намного больше. Правда для этого надо приложить немного усилий.
Я же рассуждаю об инвестиционной стратегии. То есть вопрос стоит фиксировать или нет, если фиксировать кто лучшей из ОФЗ? В декабре 24 я немного взял 33 с доходностью на тот момент > 20%. Короткие корпоративные супер, но это спекулятивная стратегия в моем понимании. Для инвестирования я еще смотрю на выпуски номинированные в USD?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay, Хороший вопрос, вопрос инвестора! В этом мире все относительно! Давайте по классике посмотрим на это.
На первый взгляд, вклад с доходностью 24% кажется более выгодным, чем облигации с доходностью 16%.Однако есть несколько важных нюансов, которые делают облигации привлекательными, даже если их доходность ниже.

1.  Надежность и риски:
Вклады в банках защищены системой страхования вкладов, АСВ. Однако есть ограничение на сумму страховки. Если банк теряет лицензию или становится банкротом, частный вкладчик наверняка потеряет деньги сверх застрахованной суммы. Высокая доходность (24%) может указывать на повышенные риски банка (где ему зарабатывать минимум 30%?).
Облигации федерального займа (ОФЗ) выпускаются государством, считаются одними из самых надежных инструментов. Риск дефолта по ним крайне низкий. ОФЗ и есть деньги в прямом смысле!

2. Ликвидность:
Вклады обычно имеют ограничения на досрочное снятие средств. Если снять деньги раньше срока, потеряешь проценты или нарвешься на штрафы.
Облигации можно продать на бирже в любой момент. Это делает их более гибким инструментом. Даже если продать облигацию до погашения, получишь накопленный купонный доход (НКД) и текущую рыночную цену. То есть, вклады менее ликвидны, чем облигации.

3. Налогообложение:
Процентные доходы по вкладам облагаются налогом на доходы физических лиц (НДФЛ), если ставка по вкладу превышает ключевую ставку ЦБ на 5 процентных пунктов (в 2023 году это 7.5% + 5% = 12.5%).
Если вклад под 24%, то с разницы (24% - 12.5% = 11.5%) заплатишь 13% НДФЛ. Купонный доход по государственным облигациям (ОФЗ) не облагается НДФЛ. Хотя нужно смотреть не разбирался на 24год?

4. Доходность с учетом реинвестирования:
Проценты по вкладам могут начисляться ежемесячно или в конце срока.
Купоны по облигациям выплачиваются регулярно (например, каждые 6 месяцев).
Хотя на мой взгляд здесь ситуация выровнялась, (есть депозиты с ежедневной капитализацией и ставкой > 20%).

5. Долгосрочные перспективы:
Вклады обычно открываются на короткий срок (от нескольких месяцев до 1-3 лет). После окончания срока нужно искать новый вклад, и его доходность может быть ниже.
Облигации могут иметь длительный срок погашения (до 10-20 лет). Это позволяет зафиксировать доходность на долгий срок, что особенно полезно в условиях снижения ключевой ставки.

Считаем: Предположим, у вас есть 1 млн рублей для инвестиций.
Вариант А). Вклад под 24%:         Годовой доход: 240 000 рублей. Налог на доход: (240 000 - 125 000) * 13% = 14 950 рублей.  Чистый доход: 240 000 - 14 950 = 225 050 рублей.
Вариант Б). Облигация под 16%: Годовой доход: 160 000 рублей. Налог на доход: 0 рублей (если это ОФЗ, надо проверить?). Чистый доход: 160 000 рублей.
На первый взгляд, вклад выгоднее. Но, если инфляция вырастет выше 24%, реальная доходность вклада станет отрицательной.

Делаем Вывод:
Вклады подходят для краткосрочных вложений, если есть уверенность в надежности банка и готовы мириться с ограниченной ликвидностью.
Облигации (особенно ОФЗ = деньги) — это более надежный и гибкий инструмент для долгосрочных вложений, особенно в условиях нестабильности или снижения ключевой ставки.

По статистике ММВБ, 80% торгов облигациями проводится на внебиржевом рынке (то есть торгуют проф. участники тот самый "крупный игрок", который умеет считать, а риск равен потере бизнеса), частникам остается торговать на бирже 20%. Если в стать в стакане на покупку в серединке, то не факт что сделку акцептуют.

Вчерашняя новость. Ведомости. Банк России (ЦБ) может сохранить ключевую ставку на уровне 21% на протяжении всего 2025 г., сообщили в пресс-службе ВТБ.
"Думайте сами, решайте сами , иметь или не иметь?" Я лишь собрал общие соображения на этот счет.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz, Ну здесь то логика простая, Вы посмотрите на да ты погашения, то есть инвестиционный горизонт огромный. То есть фиксируем доход. Ну дело тут не в текущей доходности даже, а в чувствительности облигации к снижению ставки. То есть сегодняшние 16%, завтра 70% дадут, именно эту оценку я пытаюсь провести. Например, у меня получается, если дюрация облигации составляет 5 лет, то при снижении ставки на 1% цена облигации вырастет примерно на 5%.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 22 След.
Наверх