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

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

Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 19 След.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Nikolay,  Рад Вас слышать.

Я маленько не об этом, это пишу в качестве постановки вопроса (проблемы) короче не получается.

Хотя и Ваше утверждение не бесспорно. Это от куда посмотреть, да и мат. методы есть приведения к стационарность
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Обо всем и по порядку.

Если внутридневные стратегии еще куду ни шло, то уже средний срок без бэк - теста, и не туда и не сюда.

Экспресс показатели, ну это в первую очередь
1) мат. ожидание системы (должно быть положительно не важно какое значение но +);
2) Количество сделок (Выигрыш/Проигрыш) для расчета коэффициента процент выигрышных сделок;
3)  Профит / Лосс, для расчета профит фактора.
Я еще считаю оптимальную фракцию и средние показатели  за сделку.
Прошла сделка пересчет.
Для экспресс анализа достаточно первых 3.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Далеко не секрет чтоб успешно торговать, нужна торговая система (набор стратегий), и совсем не важно ручная это торговля или алгоритм.
Собрав торговую систему хотелось бы ее оценить, для этого применяется тестирование на исторических данных.
Для оценки систем используют ряд показателей.
Казалось бы что проще, загрузил, откатил индекс назад  и прокатился по ним с применением стратегий. Квик хранит историю данных.
Но не тут то было :sad:  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Всем добрый день!

Хочу поднять тему тестирования торговой системы.
Да именно системы а не стратегий.

Так и не понятно, есть ли с кем  на сайте это обсуждать? (активность участников впечатляет!).
Флаги обезличенной сделки в событии OnAllTrade
 
Рынок двигают рыночные заявки! И логично им нести знамя.
Karina Dmitrieva, спасибо.
Проверю свой интерпретатор.
Флаги обезличенной сделки в событии OnAllTrade
 
Кто явился инициатором тому и нести флаг, смысл если вы Вы выставили ордер на покупку и его акцептовали то сделкам на покупку. и обратное.  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
А что случилось со статистикой на форуме?
Строка  "Сейчас на форуме" вообще пустая , если раньше чуть-чуть приписывала то нынче вообще ничего не отражает.
Таланты!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Вернулся к проекту - "суперкар", (Фреймворк HackTrade 1.4 для написания торговых роботов от https://github.com/DenisKolodin.)

Изменения, на что следует обратить внимание: Фреймворк написан на lua 5.1, модуль qlua 5.4.1;
Поправим на соответствие. изменений не много.

Но выявилась и концептуальная ошибка, ну скорее недочет.
Так как HackTrade продолжает летать со скоростями в один тик, то и проект смело можно назвать "ракета".

Текущая реализация концептуально выглядит так, код:
Код
dofile("hacktrade.lua") -- основной модуль

function Robot() -- основной функции

      -- 1) (~) Инициализация 
         2) Получение констант
         3) Предварительные расчеты

      while working do -- основной цикл
           
          for i=1,#sec do ----  цикла по бумагам:
                -- Система нескольких окон
                for j=1,#tf do ----  цикла по таймфремам
                     F[i][j]() --парад стратегий
                end

                signal[i] -- Вырабатываем сигнал на сделку
                rm[i]     -- определение риска на сделку
                mm[i]     -- расчет колличества на сделку
                p[i]      -- получаем цену на сделку
                SmartOrder[i]( p[i], q[i] ) -- формируем ордер на сделку
           end
           Trade() -- Вызова функции Trade, для осуществления торговых действий
           pos[i] -- получаем позицию по инструменту
           sleep(950) -- тормозим чтоб в ближним космосе очутиться!
      end
      --Сохраняем
      --Закрываем  
end

Вопрос с модульностью решен, пишем свои стратегии входа,  стратегии выхода, управление позицией, риском, алгоритмы - все независимо!
Собираем Систему (торговую!)

Чего не хватает так это тестера, но об этом отдельно.

Ну и конечно, скажем дружно, огромное, человеческое спасибо автору!
(Фреймворк HackTrade 1.4 для написания торговых роботов от https://github.com/DenisKolodin.)
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Судить о луа я конечно не могу, я им просто пользуюсь, таким какой он есть,
и прислушиваюсь к автору и другим советам, в том числе с форума к тем кто лучше меня разбирается.

Вот например пишет автор:

"Lua предлагает как раз то, для чего С недостаточно хорош:
высокая степень независимости от аппаратного обеспечения,
динамические структуры,
отсутствие избыточности и
легкость тестирования и отладки".

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

Таблица в Lua — это объект во многих отношениях.
Подобно объектам, у таблиц есть состояние.
Подобно объектам, у таблиц есть идентичность (собственное «я» — self), которая не зависит от ее значений;
Подобно объектам, у таблиц есть жизненный цикл
У объектов есть свои собственные действия. У таблиц также могут быть действия..."

И я не понимаю почему этим не пользоваться в полной мере, да мета таблицы здесь самое сложное,
но то что получаешь на выходе стоит, того чтоб сними один раз разобраться.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир, рад Вас слышать! Без Вас и nikolz, данный форум просто пропадёт :smile:  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Что касается высказывания "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.",
это от автора языка.

Ну судите сами, вот пишет автор:

"ГЛАВА 16 Объектно-ориентированное программирование Таблица в Lua — это объект во многих отношениях."

Я видел два примера реализации ООП под нашу задачу и те от одного автора.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Всем добрый день!

nikolz, За предложение помощи спасибо!

Проблемы с терминалом описанные здесь возникли при переводе скриптов на 5.4 (с 5.1 на 5.3 получилось с минимальными затратами по времени),
здесь так не получилось, пришлось разбираться.
Оказалось скрипты которые годами работали "запустил и забыл" (ну к примеру скрип сохранения сделок) нужно проверять на соответствие с 5.4.

Я уже здесь писал, что к программированию имею отношение только в части данного проекта (хобби).
Мои отношения с луа: читаю автора; ищу примеры; встраиваю в свои алгоритмы; думал что можно добавить обсуждение на форуме.

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

Я обсуждаю конкретный проект, "программирование на луа" для целей автоматизации процесса торговли на бирже, который не заканчивается программированием!
И рад единомышленникам или объективной здоровой критике!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Уважаемый nikolz,
Вы видимо имеете отношение к программированию, но не знакомы с надежностью (Есть такая теория).
Не нужно валить все в одну кучу.
Обо всем и по порядку.
Цитата
nikolz написал:
Терминал сделали, чтобы Вы могли подавать заявки брокеру руками.  И эту функцию он реализует прекрасно.
Именно об этом мое самое первое сообщение на этом форуме. Сломали что работало лет 20. и не могут исправить. Ломать не строить :smile:
Цитата
nikolz написал:
Так как терминал посылает сообщения на сервер и Вы в скрипте формируете эти сообщения, то Вы можете даже организовать DDOS атаку даже из своего скрипта.
Это вообще шедевр :lol:  таланты. Сообщению чтоб попасть на сервер, нужно отвечать определённым требованиям, посланное хоть руками хоть еще чем.
Атаку в подобной реализации вообще не вопрос, достаточно ошибиться в количестве. Но это к вопросу надежности.
Версии лепятся не понятно зачем, а где надежность?
Цитата
nikolz написал:
А уж завалить терминал это Вы можете как два пальца...
Цитата
про это уже писал: VPM написал:
Кто виноват? и Что делать? Вот вопрос.Терминал устанавливают для возможности торговать (в не зависимости от его версии).Пользовательские скрипты используют для автоматизации этого процесса (в не зависимости от языка и версии).И это не сколько не отменяет тот факт, что пользовательский скрип не должен убивать терминал и тем более влиять на работу сервера  ,кем бы и как не был написан.  

nikolz написал:
Вы как и многие  "профи" на этом форуме постоянно ругаете КВИК , а когда понимаете, что это вы на...ли г-но, скромно молчите.


Цитата
nikolz написал:
Увы, LUA дает доступ во внутрь терминала. Поэтому защиту от дурака здесь установить невозможно.
Квик я люблю, а не ругаю (разве немного таланты),  мои сообщения о недочетах замеченных, надеюсь это помогает (так называема обратная связь), это одна из задач данного форума.

"защиту от дурака" должна быть установлена!  
Скрипты писал и буду писать.
К профи не отношусь, здесь их на пальцах одной руки. Да и луа мало кто понимает:
"Таблицы в Lua — это не одна из структур данных, — это единственная структура данных."
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
nikolz,  Ваши посты как всегда актуальны.

Кто виноват? и Что делать? Вот вопрос.

Терминал устанавливают для возможности торговать (в не зависимости от его версии).
Пользовательские скрипты используют для автоматизации этого процесса (в не зависимости от языка и версии).
И это не сколько не отменяет тот факт, что пользовательский скрип не должен убивать терминал и тем более влиять на работу сервера :what: ,
кем бы и как не был написан. :smile:  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Добрый день!

Дошли руки восстановил работу квик обновился до версии 10.3.и опять в боевом строю!
Вероятно причиной задержки, при получении ответа  терминалом от сервера, являлись скрипты луа при переходе на версию 5.4.
Хотя снес почти все лишнее. Все скрипты нужно проверять на соответсвие с 5.4.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Добрый день Andrey Golik,
Цитата
Andrey Golik написал:
Уточните, пожалуйста, после какого обновления столкнулись с данной проблемой (на какую версию)?
Откатил назад с версии 10.3 на 10.1.2.2 удалил самописные индикаторы из папки, проверил получение данных(обезличенные сделки и 4 класса),
задержка на рынке акций, при вводе в окно ввода заявки, пишет "ожидании ответа сервера" и так до нескольких минут.
После отката чуть улучшилось по времени но все равно работает не нормально.


Цитата
Andrey Golik написал:
После выставления заявки терминал "зависает", то есть становятся недоступны никакие действия с программой?
Нет во время выставления, после исполнения идет очень медленное обновление таблиц о сделке до нескольких минут.
Графики тоже тормозят. (~ 20шт)
Обращался к брокеру не помогли. Брокер "АТОН".
Терминал стоит очень давно обновляется вместе с рекомендациями брокера.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
БорисД написал:
В любом бизнесе  учет и аналитика  первостепенны и без них даже не стоит открывать бизнес или торговлю на бирже начинать.
Целиком и полностью!
Вот скрип которым я пользуюсь, по принципу "запустил и забыл", за что автору скажем спасибо.
Это конечно не бухгалтерия в полном виде, но вполне достаточно чтоб в екселе сделать анализ.

Взято https://quikluacsharp.ru/
Код
local Run;-- = true; -- флаг работы цикла в main

local DataFolder = ''; -- Полный путь к папке "Данные(c)quikluacsharp.ru"
local TradesFiles = {};-- Массив дескрипторов файлов

-- Функция возвращает значение бита (число 0, или 1) под номером bit (начинаются с 0) в числе flags, если такого бита нет, возвращает nil
function CheckBit(flags, bit)
   -- Проверяет, что переданные аргументы являются числами
   if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!"); end;
   if type(bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!"); end;
   local RevBitsStr  = ""; -- Перевернутое (задом наперед) строковое представление двоичного представления переданного десятичного числа (flags)
   local Fmod = 0; -- Остаток от деления 
   local Go = true; -- Флаг работы цикла
   while Go do
      Fmod = math.fmod(flags, 2); -- Остаток от деления
      flags = math.floor(flags/2); -- Оставляет для следующей итерации цикла только целую часть от деления           
      RevBitsStr = RevBitsStr ..tostring(Fmod); -- Добавляет справа остаток от деления
      if flags == 0 then Go = false; end; -- Если был последний бит, завершает цикл
   end;
   -- Возвращает значение бита
   local Result = RevBitsStr:sub(bit+1,bit+1);
   if Result == "0" then return 0;     
   elseif Result == "1" then return 1;
   else return nil;
   end;
end;
-- Добавляет новую сделку в файл истории
function AddTradeInFile(trade)
   local DateTime = trade and trade.datetime;
   local Date = tonumber(DateTime.year);
   local month = tostring(DateTime.month);
   if #month == 1 then Date = Date.."0"..month; else Date = Date..month; end;
   local day = tostring(DateTime.day);
   if #day == 1 then Date = Date.."0"..day; else Date = Date..day; end;
   Date = tonumber(Date);
   local Time = "";
   local hour = tostring(DateTime.hour);
   if #hour == 1 then Time = Time.."0"..hour; else Time = Time..hour; end;
   local minute = tostring(DateTime.min);
   if #minute == 1 then Time = Time.."0"..minute; else Time = Time..minute; end;
   local sec = tostring(DateTime.sec);
   if #sec == 1 then Time = Time.."0"..sec; else Time = Time..sec; end;
   Time = tonumber(Time);
   -- Если ночная сделка, смещает дату на 1 день вперед
   if Time < 90000 then
      local seconds = os.time(DateTime);
      seconds = seconds + 24*60*60;
      DateTime = os.date("*t",seconds);
      Date = tonumber(DateTime.year);
      month = tostring(DateTime.month);
      if #month == 1 then Date = Date.."0"..month; else Date = Date..month; end;
      day = tostring(DateTime.day);
      if #day == 1 then Date = Date.."0"..day; else Date = Date..day; end;
      Date = tonumber(Date);
   end;
   local Operation = "";
   if CheckBit(trade.flags, 2) == 1 then Operation = "S"; else Operation = "B"; end;
   
   -- Добавляет сделку в массив
   local Trade = {};
   Trade.Account = trade.account;
   Trade.Sec_code = trade.sec_code;
   Trade.Num = trade.trade_num;
   Trade.Date = Date;
   Trade.Time = Time;
   Trade.Operation = Operation;
   Trade.Qty = tonumber(trade.qty);
   Trade.Price = tonumber(trade.price);
   Trade.Hint = "Счет: "..tostring(Trade.Account).."_Номер: "..tostring(trade.trade_num).."_Дата: ";
   if #day == 1 then Trade.Hint = Trade.Hint.."0"..day.."/"; else Trade.Hint = Trade.Hint..day.."/"; end;
   if #month == 1 then Trade.Hint = Trade.Hint.."0"..month.."/"..DateTime.year; else Trade.Hint = Trade.Hint..month.."/"..DateTime.year; end;
   if #hour == 1 then Trade.Hint = Trade.Hint.."_Время: 0"..hour..":"; else Trade.Hint = Trade.Hint.."_Время: "..hour..":"; end;
   if #minute == 1 then Trade.Hint = Trade.Hint.."0"..minute..":"; else Trade.Hint = Trade.Hint..minute..":"; end;
   if #sec == 1 then Trade.Hint = Trade.Hint.."0"..sec; else Trade.Hint = Trade.Hint..sec; end;
   Trade.Hint = Trade.Hint.."_Количество: "..trade.qty;
   Trade.Hint = Trade.Hint.."_Цена: "..trade.price;
   
   -- Получает путь к файлу инструмента в папке торгового счета
   local PathAccountSec = DataFolder..Trade.Account..'\\'..Trade.Sec_code..'.csv';
   local FileIndex = Trade.Account..'_'..Trade.Sec_code;
   -- Если файл еще не открыт, или не существует
   if TradesFiles[FileIndex] == nil then
      -- Пытается открыть файл текущего инструмента в режиме "дописывания"
      TradesFiles[FileIndex] = io.open(PathAccountSec,"a+");
      -- Если файл не существует, то сделка не записана
      if TradesFiles[FileIndex] == nil then 
         -- Создает файл в режиме "записи"
         TradesFiles[FileIndex] = io.open(PathAccountSec,"w");
         -- Закрывает файл
         TradesFiles[FileIndex]:close();
         -- Открывает уже существующий файл в режиме "дописывания"
         TradesFiles[FileIndex] = io.open(PathAccountSec,"a+");
      end;
   end;
   -- Встает в начало файла
   TradesFiles[FileIndex]:seek("set",0);
   -- Если файл пустой
   if TradesFiles[FileIndex]:read() == nil then
      -- Добавляет строку заголовков
      TradesFiles[FileIndex]:write("Счет;Код бумаги;Номер сделки;Дата сделки;Время сделки;Операция;Количество;Цена;Текст подсказки", "\n");
   end;
   -- Встает в конец файла
   TradesFiles[FileIndex]:seek("end",0);
   -- Записывает сделку в файл
   TradesFiles[FileIndex]:write(Trade.Account..";"..Trade.Sec_code..";"..Trade.Num..";"..Trade.Date..";"..Trade.Time..";"..Trade.Operation..";"..Trade.Qty..";"..Trade.Price..";"..Trade.Hint, "\n");
   TradesFiles[FileIndex]:flush();
end;

-- Создает каталоги по всем найденным счетам
function CreateAccountsFolders()
   -- Перебирает все счета
   for i=0, getNumberOf("trade_accounts")-1 do
      -- Получает номер счета
      local Account = getItem("trade_accounts", i).trdaccid; 
      message('Account = '..Account)
      -- Получает путь
      local Path = '"'..DataFolder..Account..'\\"';
      -- Если каталог не существует
      
      ---- можно получить доступ к выхлопу команды, взяв result
      --[[local handle = io.popen('cd '..Path)
      local result = handle:read("*a")
      handle:close()
      message('result = '..tostring(result))
      --]]
      --message(' os.execute(cdPath) = '..os.execute('cd '..Path))
       
      if os.execute('cd '..Path) == 1 then
         -- Создает каталог
         os.execute('mkdir '..Path); 
      end;
   end;
end;

-- Проверяет записана ли данная сделка в файл истории
function CheckTradeInFile(trade)
   -- Получает путь к файлу инструмента в папке торгового счета
   local PathAccountSec = DataFolder..trade.account..'\\'..trade.sec_code..'.csv';
   -- Пытается открыть файл текущего инструмента в режиме "чтения"
   local TradesFile = io.open(PathAccountSec,"r");
   -- Если файл не существует, то сделка не записана
   if TradesFile == nil then return false;
   else -- Если файл существует
      -- Получает индекс файла
      local FileIndex = trade.account..'_'..trade.sec_code;
      -- Если файл еще не открыт для дописывания
      if TradesFiles[FileIndex] == nil then
         -- Открывает файл текущего инструмента в режиме "дописывания"
         TradesFiles[FileIndex] = io.open(PathAccountSec,"a+");
      end;
      -- Перебирает строки файла
      local Count = 0; -- Счетчик строк
      for line in TradesFile:lines() do
         Count = Count + 1;
         if Count > 1 and line ~= "" then
            -- Если номера сделок совпадают, то сделка записана
            local i = 0;
            for str in line:gmatch("[^;^\n]+") do
               i = i + 1;
               if i == 3 and tonumber(str) == trade.trade_num then
                  TradesFile:close();
                  return true; 
               end;
            end;
         end;      
      end;
   end;
   TradesFile:close();
   return false;
end;

-- Записывает все ранее не записанные сделки из таблицы "Сделки" в файлы
function CheckAndSaveTerminalTrades()
   local trade = nil;
   -- Перебирает все сделки в таблице "Сделки"
   for i=0,getNumberOf("trades")-1,1 do      
      trade = getItem ("trades", i);
      -- Если данная сделка еще не записана в файл истории
      if not CheckTradeInFile(trade) then        
         -- Добавляет сделку в файл истории
         AddTradeInFile(trade);
      end;
   end;
end;

---------------------------------

function OnTrade(trade)
   -- Если данная сделка еще не записана в файл истории
   if not CheckTradeInFile(trade) and Run then        
      -- Добавляет сделку в файл истории
      AddTradeInFile(trade);
   end;
end;

function OnStop()
   -- Закрывает все файлы
   for key,Handle in pairs(TradesFiles) do
      if Handle ~= nil then Handle:close(); end;
   end;
   Run = false;
end;

--function OnInit()   end;

function main()

   Run = true;
   -- Получает полный путь к папке "Данные(c)quikluacsharp.ru"
   DataFolder = getWorkingFolder()..'\\Данные(c)quikluacsharp.ru\\';
   -- Создает папки по всем найденным счетам
   CreateAccountsFolders();
   -- Записывает все ранее не записанные сделки из таблицы "Сделки" в файлы
   CheckAndSaveTerminalTrades();
   
   while Run do
      sleep(1000);
   end;   
end;
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Всем добрый день!

Что - то с последними обновлениями все переломалось.
У одного из брокеров терминал зависает на несколько минут после отдачи приказа в ожидании ответа сервера?

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

"не опровержимые факты" кого угодно переубедят, на то они не опровержимы.
С Владимир мы не спорим, скорее дискутируем о взглядах на рынок, так как придерживаемся разных подходов в торговле, а судья здесь один торговый счет.
Вот и Вы про
Цитата
БорисД написал:
наблюдаем это в 10 секундном тайфрейме онлайн
Но Вы то наверняка знаете, что говоря о тайм фрейме нужно говорить о фрактальности в поведении цены, а значить поймав тенденции на 10 сек. то и горизонт планирования сделки такой же.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир, Я описываю свою задачу, как я ее вижу немного утрирую для обсуждения. и те технические вопросы которые возникают по ходу.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Nikolay написал:
Да. Перебираем бары и когда надо перейти на новый индекс, вызывается функция.Также это будет работать и для текущих данных. Так что код становится однотипным.
Заманчиво попробую посмотрим что из этого получится у меня.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Вот текущая моя реализация:

1) При инициализации задаю массивы

----- Data Source:
for i=1,#sec do
 DS[i] = {};
 for j=1,#Interval do
DS[i][j] = Source(cl[1],sec[i],Interval[j]);

2) функцией получаю индексы

function test_begin()--ds,test

   local Interval = {
--[0]=INTERVAL_TICK, ---- Тиковые данные  
INTERVAL_M1, ---- 1 минута  
--INTERVAL_M2, ---- 2 минуты  
--INTERVAL_M3, ---- 3 минуты  
--INTERVAL_M4, ---- 4 минуты
INTERVAL_M5, ---- 5 минут
--INTERVAL_M6, ---- 6 минут
--INTERVAL_M10, ---- 10 минут
--INTERVAL_M15, ---- 15 минут
--INTERVAL_M20, ---- 20 минут
--INTERVAL_M30, ---- 30 минут
--INTERVAL_H1, ---- 1 час
INTERVAL_H2, ---- 2 часа
--INTERVAL_H4, ---- 4 часа
INTERVAL_D1, ---- 1 день
--INTERVAL_W1, ---- 1 неделя
--INTERVAL_MN1, ---- 1 месяц
               };
   
local DS = {};
local I = {};

return function(class,d,t) --ds

for i=1,#sec do ----  цикла по бумагам:

for j=1,#Interval do
-----------------------------------------
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Nikolay написал:
При этом у каждого ds в списке можно написать свой колбек на приход нового индекса. Тогда код становится еще более простой, в функциональном стиле.
Посмотрел Вашу идею более внимательно. Не понял вот здесь "написать свой колбек на приход нового индекса" Вы говорите про исторические данные?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Лучше спросить: А ЗАЧЕМ она нужна?
Ну речь идет о тестировании на прошлых свечах, вот я показываю
Цитата
VPM написал:
Ну к примеру, на H2,Свечи сформированы  у них есть High и Low, текущая цена  становится ниже Low на H2 .   lact < Low  это только условия для поиска ситуации на открытие Short позиции на 5 минутах.на 5 минутах свои условия на подтверждении.
Время 1000 24.08.2023г. начало теста, мне нужно найти индекс для свечей
   на 1 Часовом графике и
   на  1 минутном (для простоты рассуждения)
чтоб можно было получить все остальные значения со свечи.
и дальше их синхронно смещать, получая для каждого графика свой индекс.
Сравнить индексы можно только установив время.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Общая точка отсчета на всех таймфреймах вовсе не обязательна.
Не понял почему?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Nikolay написал:
Я ничего не говорю про точки входа, алгоритмы и т.д.
Да но чтоб начать синхронный перебор данных нужна точка отсчета общая на всех таймфреймах
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Вопрос остался открытым
Цитата
Nikolay написал:
Да и спрятать можно все, написав свой итератор. Тогда вызов станет универсальным, простым в конечной точке вызова.
Мало найти общую т. для входа нужен универсальный  итератор.  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Я рассказал, как, по моему мнению, нужно работать со свечами и историческими данными.
За это спасибо, но это мне не подходит, я прочитал и дал  даже ответ по какой причине не подходит.
Цитата
Владимир написал:
Я НЕ использую цены максимальную и минимальную на интервале.
Ну тогда свечи
Цитата
Владимир написал:
В моём подходе 6 000 000 секундных свечей
Называйте вещи своими именами - это среднее значение цены за секунду, причем здесь свеча или бар у которые на это том же интервал имеют пять значений.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир,
Что же тогда, мы тут с Вами  обсуждаем?

Я Вам "про Ивана, вы мне про болвана".

Торгуйте как хотите я тут причем?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир, Вот мой подход
Цитата
VPM написал:
В своих алгоритмах я использую цены максимальную на интервале и минимальную на интервале.Я это называю так, последний покупатель и последний продавец, это чтоб не забыть смысл. На мой взгляд они наиболее информативны чем просто средние. Отражают уровни поддержки и сопротивление, тенденцию.Т.е. можно реализовать пробойные стратегии, лучше характеризуют трендовое движение.
Без разниц
Цитата
Владимир написал:
6 000 000 тиков, а на 6 000 000 секундных свечей

Цитата
Владимир написал:
6 000 000 тиков, а на 6 000 000 секундных свечей
В моем подходе все это шум. Все что ниже даже 5 минут тоже шум.
Так как оценку веду от старшего таймфрейма.

Ну к примеру, на H2,
Свечи сформированы  у них есть High и Low, текущая цена  становится ниже Low на H2 .
 
lact < Low  это только условия для поиска ситуации на открытие Short позиции на 5 минутах.
на 5 минутах свои условия на подтверждении.

Все Ваши секундные свечи уже сидят внутри 5 минутной свечи и для нее это шум.

Я несколько утрирую но смысл сохраняется!  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Моему скрипту ПЛЕВАТЬ
Ну на том и порешим.
Писать массив на 6 000 000 тиков  по сотне бумаг не вижу смысла.
Данные есть и так только их нужно получить корректно.
Свой подход я тоже описал достаточно подробно буду дальше реализовывать.
Ну а депозит рассудит!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Там двухмесячный тиковый массив (по-моему, Борька его нашёл), 44 мега с датами сделок или 28 мегов голых секундных свечей. Торги не идут все 24 часа, и выходные имеются. Мой скрипт тыщу раз тестировался на этом массиве в разных режимах, пробегает он его секунд за 20. Если кто-то знает более оптимальный подход, то это не я.
Ну смотри те сами, пишите "тиковый массив".
Давайте посмотрим что такое тик
Вариант 1) ликвидный рынок есть лучшей аск 1 контракт  есть лучшей бид  1 контракт с рынка продали 1 контракт.
Как это повлияло на рынок? Ответ ни как (шум)!
Вариант 2) неликвидный рынок та же ситуация. Может изменить баланс так как спреды огромные или никак.

Вы это пытаетесь оценить Вопрос успешно?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии.
Еще век назад люди торговали, рисовали графики на миллиметровке карандашами, и писали алгоритмы.
Я подчеркиваю, при этом создавая личное благополучие и делясь своими знаниями.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Да плевать мне на Ваше мнение.
Да не обращайте внимание. Я не последняя инстанция, Это просто частное мнение.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Да плевать мне на Ваше мнение. Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии. Что Вы можете знать обо мне? Да ничего!
Я Вас совсем не обидеть хотел или  изучить, а лишь говорю о том чем мы с Вами здесь занимаемся и обсуждаем на этом форуме.  
Ни чего личного. Если я чем то обидел Вас то извините.
Я лишь высказываюсь сию минутном занятии.

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

 
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
А Вы с Борькой не слышали что рынок меняется?
Вы рассуждаете так как рассуждают для подбора тестовых массивов нейросетей.

Ну смотрите сами ваш массив учитывает событие 02.22г. Ваш подход оценил это,
дальше нестабильность рынок скачет при каждом шорохе без всяких тенденций. оценил это.
Наступило затишье, и что ему делать основываясь на  прошлом опыте. Вывод не торговать.
Это описание ситуации происходящей на наших глазах. Я там торговал.

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





 
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир, Мы с Вами уже достаточно времени общались на страницах этого форума,
у меня сложилось мнение, и о Ваших  способностях и о Вашей  деятельности.  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Или вот
Цитата
VPM написал:
"утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи"Это что несредняя или у Вас другой подход?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
1минута = 60 секунд или 1440 минут в на графике Д1, считаю  6 000 000 секунд / 60 / 1440 ~= 69 дней Существования фьючерса.т.е. ваш уникальный скрипт тестируется на этом промежутке. и Вы утверждаете что это оптимальный подход?Я Вас правильно понимаю?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
На каком "том временном отрезке и только"? НА ЛЮБОМ отрезке ЛЮБОГО инструмента ЛЮБОГО тикового (или даже не обязательно тикового) массива. Другое дело, что у меня давно уже для тестирования используется только один массив, примерно на 6 миллионов секунд, и только потому, что там есть буквально всё: и длительное топтание на месте, и "нормальные" взлёты и падения, и спокойный долгий рост, и резкое обрушение курса почти вдвое, так что мне просто НЕЧЕГО тестировать на любых других исторических данных - в этом массиве есть буквально всё, что душе угодно. Хотя до сих пор валяется 3 гига разных исторических данных, 120 миллионов строк (чуть больше) по... ща скажу... по 309 инструментам Мосбиржи и 1454 инструментам СПб. Я тогда ещё пытался определять "характер тикера" и прочую лабуду, но быстро понял, что всё это чушь собачья, и скрипт мой прекрасно справится с любым "характером". Сейчас это всё уже мусор, "преданья старины глубокой" (2020 год, когда я только начинал), остался только один тестовый массив одного из этих инструментов, который я гонял и в режиме, как будто это акции, и как будто это фьючерсы (даже не помню, что там в оригинале было - кажется, фьючерсы). Но даже эти прогоны по историческим данным нужны были только для черновой отладки скрипта.
А что по Вашему вот это?
 
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Так и пожалуйста не пишите чушь  про собственную эксклюзивность!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир, Ок
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Другое дело, что у меня давно уже для тестирования используется только один массив, примерно на 6 миллионов секунд
1минута = 60 секунд или 1440 минут в на графике Д1, считаю  6 000 000 секунд / 60 / 1440 ~= 69 дней Существования фьючерса.

т.е. ваш уникальный скрипт тестируется на этом промежутке. и Вы утверждаете что это оптимальный подход?
Я Вас правильно понимаю?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
Я написал небольшую утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи - это и есть LAST
Ну просто приятно поговорить.
Цитата
Владимир написал:
И мне насрать на "отставание средней" и вообще на среднюю.
"утилиту, которая переводит исторические данные (тиковый массив) в секундные свечи"
Это что несредняя или у Вас другой подход?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Владимир, Я понял, с Вами все можно детально обсудить.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
nikolz, Поясните откуда это
Цитата
nikolz написал:
Все свечи считаются от 00000.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Nikolay, Тут дело даже не 2008 годе, я в своих стратегиях так далеко не заглядываю.

Для фьючерсов я практикую три режима  в одном скрипте:
1) бэктест на несколько дней назад;
2) эксперт - т.е. в торговое время, идут торги ,но без выставления приказов в торговую систему. и фиксирую сигнал ,  делаю расчет показателей сделки.
3) и боевой режим.

Все это луа позволяет сделать это удобно, на мой взгляд практично, я так просто привык.

Перед торгами запустил  бэктест, все устраивает, авто торговлю, нет посмотрим поведение рынка.
Это просто мой подход, мне так комфортно.

Владимир, Почему для меня важен бэктест.

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

То что предлагаете Вы, хорошо на скальперских стратегиях. Там отставание средней не так критично как на Н1 или Д1,
Да и накапливать данные, когда они уже есть?

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

Войти можно и случайным образом. вопрос а где закрыть сделку, "чтобы не так было больно за прожитые годы" :smile:  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Будь я адвокатом бросил бы торговать, и занялся бы прибыльным делом :what:  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
nikolz, Так вот я и пишу
Цитата
VPM написал:
Несколько удивил подход разработчиков?
Богата Земля талантами! :smile:

Не знаю как Вы догадались до этого
Цитата
nikolz написал:
На самом деле единое время есть Это 90000.Для свечей - это время закрытия свечи.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Прислушался к советам, поднял старые наработки, сам поднапрягся,
( ну не все могут быть хирургами или хорошими адвокатами, а я не программист пишу потихоньку для себя).

Спрятать удалось пока только поиск начальной точки для входа в режим теста.
Оказалось не все так прозаично, Изменили время начало торгов на секции срочного рынка,
в виде добавления еще одной сессии "Аукцион открытия". Полезно делать ревизию старым скриптам!
Соответственно изменилась индексация на графике в квике. Несколько удивил подход разработчиков?

Вот так теперь выглядит начало торгов на разных тайм фреймах:

1 минута;      20230824;  085900;  83.09; 83.1;   83.09
5 минут;        20230824;  085500;  83.09; 83.1;   83.09
120 минут;    20230824;  080000;  83.09; 83.17; 82.7
1440 минут;  20230824;  000000;  83.09; 83.63; 82.16

т.е. нет единого времени открытия в квике.

Заглянул на сайт ММВБ, а у них вообще значится "Аукцион открытия" 08:50.

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

SetCell(tabl,i,8,tostring(Valtod[i]) , Valtod[i])
Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 19 След.
Наверх