Очереди и двойные очереди в луа

Страницы: Пред. 1 ... 19 20 21 22 23 ... 26 След.
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
for n in pairs(_G) do print(n) end;   А так можно узнать какие глобальные переменные используются.
Понимание организационной структуры приводит к пониманию, установлению компромисса между быстродействием и производительностью, ну и не забываем про простоту кода.
 
Продолжаю хвалится.
--------------------------
Те кому рябит, смотрите только нижнюю картинку
это профит - рассчитывается с начала этого года (есть за 2023 и частично за 2022)
--------------
белая линия - это суммарный профит
зеленая линия - это лонг
синяя - это шорт
штриховые линии - это текущий расчет.
=================
Графики использую для обучения.
Этот робот реализует NN -"обучение с учителем"
-----------------
С самообучением пока лишь стою.
==============
На верхнем графики автоматически строятся уровни поддержки и сопротивления и линии регрессии.  
 
 
nikolz,  Ну это просто аппроксимация в черном ящике? Если конечно в учителях не паттерны.
Цитата
nikolz написал:
Графики использую для обучения. Этот робот реализует NN -"обучение с учителем"
Цитата
nikolz написал:
белая линия - это суммарный профит зеленая линия - это лонгсиняя - это шортштриховые линии - это текущий расчет.
Не понятно в чем мерите и относительно чего?
 
Цитата
VPM написал:
Более эффективная:_G[varname] = value; local value = _G[varname]; print(value)
Явно кокая - то ошибка, или это простое присвоение или профессор что то напутал?
Возможно это имелось ввиду? Не понятно.

_G[varname] = varname;
local value = _G[varname] ;
print(value)
 
nikolz, Продолжаю смеяться. Рассчитать профит - это задача прям ужасающей сложности: из суммы закрывающих сделок вычесть сумму, за которую они были открыты (для шортов наоборот), причём по всем тикерам и за весь период торговли.  Или просто посмотреть на кошелёк. Для принятия решений информация бесполезная от слова "совсем". Примерно столько же пользы от уровней поддержки и сопротивления. Что такое "линии регрессии" ваще не в курсе. Про обучение просто молчу. Ничем из перечисленного мой скрипт, ессно, не занимается. Мгновенную ликвидность - да, считает раз в 10 секунд, хотя для принятия решений и она не нужна  
 
Пересмотрел главу Окружение.
"Поскольку окружение — это обычная таблица, то вы можете просто индексировать ее нужным ключом (именем переменной).
Похожим образом можно присвоить значение глобальной переменной, чье имя вычисляется динамически, если написать
_G[varname] = value."

Есть еще одна интересная "штука":
"Поскольку _ENV — это обычная переменная, мы можем обращаться к ней и присваивать значения как и любой другой переменной.
Присваивание _ENV=nil сведет на нет любой прямой доступ к глобальным переменным в оставшейся части куска. Это может пригодиться для контроля над тем, какие переменные использует ваш код"
"Конечно, главной областью применения _ENV является изменение окружения, используемого фрагментом кода."
 
Склоняюсь к варианту А (подход  Владимир,), подход опробован,  как утверждает Владимир, показывает отличный результат, такое дерево всегда можно в последующим более аккуратно наследовать в глобальную таблицу. Подход Б требует дополнительного ознакомления, что можно чего нельзя. И так решено подход А, соберу в четырех этажную таблицу переменные.
bar={};  bar[ticer][tf][inde[]={};  
 
Цитата
nikolz написал:
На верхнем графики автоматически строятся уровни поддержки и сопротивления и линии регрессии.
Если Вы используете в качестве входного параметра регрессию, то можно попробовать фильтровать цену за интересующий Вас период. Это позволит значительно уменьшить отставание, по сравнению с регрессией, а второе изменяя период можно пробовать на разных частотах, или сразу спектр частот. Если будете пробовать поделитесь результатом.
 
Цитата
nikolz написал:
Это Ваша проблема. Сочувствую.
Ухахах, шёл б ты в психоаналитики. То, что ты не в состоянии сделать нормальный publication quality график, и вываливаешь на суд публики какое-то вырвиглазное дерьмо - это моя проблема?  :lol:  :lol:  :lol: Ой дурак...
Цитата
VPM написал:
дерево всегда можно в последующим более аккуратно наследовать в глобальную таблицу
Вы прям комсомолец из анекдота, который сам создает себе трудности и сам их героически преодолевает. Вам принципиально хочется скипидарить себе мозги? Зачем что-то куда-то "наследовать"? Просто заведите переменную вне main() и разместите там свою таблицу. Она будет доступна в глобальном контексте.
 
Glukator, Согласен, Ну конечно все так и делают!  Именно этим и занимаюсь,  собираю отдельные переменные в таблицы. Цель максимально локализовать переменные.
От этого тоже отказался лишнее bar={};  bar[ticer][tf][inde[]={};  Все уже и так есть.  
 
Цитата
VPM написал:
Glukator, Согласен, Ну конечно все так и делают!  Именно этим и занимаюсь,  собираю отдельные переменные в таблицы. Цель максимально локализовать переменные.
От этого тоже отказался лишнее bar={};  bar[ticer][tf][inde[]={};  Все уже и так есть.  
Обычно структуру данных формируют, исходя из целей и задач. А "максимально локализовать переменные" - это какая-то странная самоцель. Надо бы сначала подумать над структурой, а потом уж упихивать ее в код. Вот, к примеру, взять вашу структуру
Код
bar[ticker][tf][index]
Почему у вас тикер по отношению к свечам - подчиненный элемент? Это свечи являются атрибутами тикера, но никак не наоборот. Условно, должно быть как-то так:
Код
tickers[sec].bars[tf][i] = { H, L, O, C, ... }
где sec -  код инструмента, tf - таймфрейм (или его индекс в таблице таймфреймов), i - индекс свечи. Это если вам нужны "японские" свечи, или как их там, и вы хотите к ним иметь доступ по индексу. А если не по индексу? Куда пихать время, в атрибуты свечи или в индекс (если оно надо вам вообще)? А не так что "хочу упихать все в таблицы" и все тут. Правильно организовать данные - это большая работа, и делается она не из желания упихать все куда-нибудь, а из соображений удобства и быстроты доступа к этим данным в дальнейшем.
 
Glukator,  Я не пишу новый код, оптимизирую старый, переосмысливаю, какие - то моменты.
У меня сейчас организовано так  

local sec   = { 'BRG4','NGF4', 'GDH4',  };
local tf = { INTERVAL_M1, ---- 1 минута  
INTERVAL_M4, ---- 4 минуты
INTERVAL_H1, ---- 1 час
INTERVAL_D1, ---- 1 день
--INTERVAL_W1, ---- 1 неделя
--INTERVAL_MN1, ---- 1 месяц
};

local DS = {};

for i=1,#sec do --Заказываю Данные
    DS[i]={};
    for j=0,#tf do
           DS[i][j] = Source(cl[1],sec[i],tf[j]); --CreateDataSource


--получаю
for i=1,#sec do    
     for j=#tf,1,-1 do

          I[i][j] = DS[i][j]:Size();
           local n;
           n = I[i][j];

            DS[i][j][n] = {}
            DS[i][j][n].d = get_date(DS[i][j]:T(n))
            DS[i][j][n].t = get_time(DS[i][j]:T(n))
            DS[i][j][n].p=round((DS[i][j]:H(n) + DS[i][j]:L(n))*0.5, feed[i].sec_scale);
            DS[i][j][n].hl=round(DS[i][j]:H(n) - DS[i][j]:L(n), feed[i].sec_scale);
            DS[i][j][n].co=round(DS[i][j]:C(n) - DS[i][j]:O(n), feed[i].sec_scale);
            DS[i][j][n].cc=n>1 and round(DS[i][j]:C(n) - DS[i][j]:C(n-1), feed[i].sec_scale) or 0;
         
            --сюда же ответы от алгоритмов присваиваю
           local Pdf = f[i][j].pdf( n, {period=4,v_t='M',up=1.5, dw=-1.5}, DS[i][j] )
            DS[i][j][n].pdf=Pdf;

Отсюда и структура
 
Цитата
Glukator написал:
А не так что "хочу упихать все в таблицы" и все тут. Правильно организовать данные - это большая работа, и делается она не из желания упихать все куда-нибудь, а из соображений удобства и быстроты доступа к этим данным в дальнейшем.
"Таблицы в Lua — это не одна из структур данных, — это единственная структура данных".
"Таблицы - это всё.
Хотя, на самом деле, таблицы это просто способ хранить множество пар "ключ-значение", а все остальное - это то, какие вы выбираете ключи и какие значения."
 
DS[i][j][n]
На мой взгляд все логично, у каждого инструмента есть несколько тайм фреймов, в каждом тайм фрейме есть несколько баров (индексов), такая вложенность (матрешка), а дальше идут переменные  или еще таблицы! Что не так?
 
VPM, Да ужжжжж. Всё на помойку! :smile:  
 
Владимир,  Не "покладая рук" а Вы?  :smile:
А что не так?
 
VPM, Да всё не так! Как минимум, это i и j должны быть local, а не sec и tf. Во-вторых, закладыывать список тикеров в код и, следоватеьльно, править код на любой чих есть просто безумие. В-третьих, использовать CreateDataSource значит обрекать себя на бесконечные глюки даже если тикеров в портфеле будет столь жалкое количество. Ну и т.д.
 
Цитата
Владимир написал:
Во-вторых, закладыывать список тикеров в код и, следоватеьльно, править код на любой чих есть просто безумие
А как нужно?
 
Цитата
Владимир написал:
В-третьих, использовать CreateDataSource значит обрекать себя на бесконечные глюки даже если тикеров в портфеле будет столь жалкое количество. Ну и т.д.
Ну если считать то к примеру Н4 то не одной сделки не сделаешь, нужно тогда историю записывать и сохранять!
 
Цитата
Владимир написал:
Как минимум, это i и j должны быть local, а не sec и tf.
Согласен i,j пропустил, (но они вроде и так локальные для цикла),
sec и tf видимость ведь позволяет держать локальными?
 
VPM, Я же говорю, что это СЛОЖНАЯ задача. Определяться со структурой крайне желательно ещё ДО написания первой строчки кода (потом её всё равно придётся не раз изменять и дополнять). Кроме того, желательно знать и класс тикера, и валюту, на которую он торгуется, и вообще всё, что можно, нужно выносить во внешний файл - номер счёта, код клиента, кошелёк и прочую лабуду. Историю записывать можно, но мне лень, да и свечи я только до часовых считаю. Раньше считал более тяжёлые, но пользы от них как с козла молока. И я никогда не полагаюсь на то, что там "и так локальное" и всегда объявляю переменные явно. Наконец, у меня все данные по портфелю, кошельку, отслеживаемым тикерам вообще собраны в одну таблицу, одну глобальную переменную, которая гарантированно видна из любой точки скрипта, из любой функции. Это, пожалуй, перебор и небольшие тормоза, но со скоростью у меня никогда проблем не было.
 
Цитата
VPM,  написал:
таблицы это просто способ хранить множество пар "ключ-значение", а все остальное - это то, какие вы выбираете ключи и какие значения."
Вот это именно то, что я пытаюсь донести, и Владимир вам про то же самое говорит. Данные надо структурировать, причем предварительно подумать, как вы собираетесь к ним обращаться. Вот пожалуйста:
Цитата
VPM написал:
DS[j][n]
И как вы будете искать нужный инструмент в этом индексированном массиве? Каждый раз будете в цикле перебирать?
Цитата
VPM написал:
На мой взгляд все логично, у каждого инструмента есть несколько тайм фреймов, в каждом тайм фрейме есть несколько баров (индексов), такая вложенность (матрешка), а дальше идут переменные  или еще таблицы! Что не так?
Вот именно, что у _инструмента_ есть бары, а не наоборот. А еще у инструмента есть куча других нужных параметров, и их может быть довольно много. А у вас инструмент тождественен источнику данных со свечками.
Цитата
VPM написал:
local sec   = { 'BRG4','NGF4', 'GDH4',  };
local DS = {};

for i=1,#sec do --Заказываю Данные
    DS={};
    for j=0,#tf do
           DS[j] = Source(cl[1],sec,tf[j]); --CreateDataSource
Пока у вас 3 инструмента, эта хренота даже будет работать. Как только у вас их станет 300, или даже 30, вас не спасут ни терабайт оперативки, ни дох**ядерный процессор, потому что все это будет жрать память как голодный слон, тормозить и глючить. Задолбаетесь глюки обходить.
Цитата
VPM написал:
Цитата
Владимир написал:
Во-вторых, закладыывать список тикеров в код и, следоватеьльно, править код на любой чих есть просто безумие
А как нужно?
Создайте текстовый файл со списком тикеров, которыми собираетесь торговать, и считывайте его при старте скрипта. У меня, к примеру, этот файл просто содержит строки вида
Код
TQBR:ABIO
TQBR:ABRD
...
TQBR:ZVEZ
 
Glukator, И у меня этот файл просто содержит строки вида "класс, код", только там ещё валюта, содержимое портфеля (если тикер там есть), настройки разные. Но тоже выдерживается правило "одна строка - один тикер". Кроме того, есть другие строки - данные по кошельку, номер счёта, можно переопределить режим работы скрипта (боевой, тестовый, по историческим данным), добавить или отнять денег или тикеров и т.д. Короче, структура внешнего файла тоже тщательно продумана и столь же подробно описана, как и структура данных в самом скрипте.
 
Цитата
Цитата
Glukator написал:
Цитата VPM  написал: Цитата Владимир  написал: Во-вторых, закладыывать список тикеров в код и, следоватеьльно, править код на любой чих есть просто безумие
А как нужно?
Создайте текстовый файл со списком тикеров, которыми собираетесь торговать, и считывайте его при старте скрипта.
У меня, к примеру, этот файл просто содержит строки вида
КодTQBR:ABIO
TQBR:ABRD
TQBR:ZVEZ
В чем разница считывать из файла, или читать таблицу прямо из скрипта, кроме как удобства?
local sec   = { 'BRG4','NGF4', 'GDH4',  }; for i=1,#sec do  
 
VPM, Ну неужели не очевидно? НЕ НАДО КОД ПРАВИТЬ! Скину я, скажем, Борьке, последнюю версию скрипта, и он тут же будет работать, не меняя в нём ни единой запятой! Хотя у него совсем другие брокеры, другие деньги и другие тикеры. Кроме того, я лично никогда не пользуюсь конструкциями вида #sec - скрипт сам знает размеры всех своих массивов. Например, размеры стеков хранятся в их нулевых элементах. И все индексы у меня числовые - так, на всякий случай, чтобы не нарываться на потенциальные проблемы с ключами.
 
Цитата
Glukator написал:
Пока у вас 3 инструмента, эта хренота даже будет работать. Как только у вас их станет 300, или даже 30, вас не спасут ни терабайт оперативки, ни дох**ядерный процессор, потому что все это будет жрать память как голодный слон, тормозить и глючить. Задолбаетесь глюки обходить.
У меня их не 3 это для простоты изложения, но точно не 300, к примеру для фондового рынка я установил правило ~ 5% Капитала на инструмент,  100% / 20% <= 20 бумаг в портфеле.
В Вашем варианте  Капитал =100% / 300 бумаг <= 0.33% капитала  на 1 бумагу? Но мне помнится у Вас еще нужно 300 * 9 тайм фреймов, считайте сами на кого работаете (комиссии).

ДА и на срочном 300 инструментов не нужны достаточно ликвидных. А стоимость позиции регулируется количеством контрактов, и зависит от риска принимаемого в данной позиции!
Согласен есть некоторые сложности CreateDataSource, но к моему удивлению оказались не такими тяжелыми как предполагал ранее, видимо потому что лежат на сервере.
Получаю так ds:SetEmptyCallback(); С памятью надо подчищать пока пробую варианты.
 
Цитата
VPM написал:
И как вы будете искать нужный инструмент в этом индексированном массиве? Каждый раз будете в цикле перебирать?
Именно так при получении данных и их подготовке.

DS[1][4][n].cc=n>1 and round(DS[i][j]:C(n) - DS[i][j]:C(n-1), feed[i].sec_scale) or 0;
1 -- первый тикер, 4 тайм фрейм, n- последний бар , n-1 предпоследний бар.
Я не понимаю что Вас смущает здесь?

А далее просто

if rule[i].open_buy and OrderSmart[i].position<=0 then --Открыть позицию
 
DS[1][4][n].cc=n>1 and round(DS[i][j]:C(n) - DS[i][j]:C(n-1), feed[i].sec_scale) or 0;

feed[i].sec_scale -- это параметр тиккера sec_scale
feed[i]. -- это таблица необходимых параметров? получаю при инициализации и обновляю при каждом обращении к инструменту (feed[i].bid)

Здесь нужно сказать, что у меня не одна глобальная таблица, а несколько и по возможности локальных + классы.
Может этим ввел в заблуждение? Пока не вижу смысла собирать все в одну (придерживаюсь своего взгляда, принципиальную схему я показывал Выше)
 
Цитата
Владимир написал:
VPM , Ну неужели не очевидно? НЕ НАДО КОД ПРАВИТЬ! Скину я, скажем, Борьке, последнюю версию скрипта, и он тут же будет работать, не меняя в нём ни единой запятой!
Согласен, но я так делаю пока для себя и для отладки , просто так удобней пока, и от этого принципиально не что не меняется. Но а если передавать код другому лицу, еще и пароль поставлю, чтоб не лазили! :smile:  
 
Цитата
Владимир написал:
Glukator , И у меня этот файл просто содержит строки вида "класс, код", только там ещё валюта, содержимое портфеля (если тикер там есть), настройки разные. Но тоже выдерживается правило "одна строка - один тикер". Кроме того, есть другие строки - данные по кошельку, номер счёта, можно переопределить режим работы скрипта (боевой, тестовый, по историческим данным), добавить или отнять денег или тикеров и т.д. Короче, структура внешнего файла тоже тщательно продумана и столь же подробно описана, как и структура данных в самом скрипте.
У меня это просто отдельный класс (таблица), то что пользователь задает , отвечает на вопросы , где торговать?, чем торговать? Какие средства использовать? и т.д.
Я до пересмотра этого еще не дошел (у маркетмейкера структура, а я один :smile: )  Возможно далее что то автоматизирую.

Но сейчас актуально проблема как правильно организовать работу с получением хранением и обработкой РЫНОЧНЫХ данных! Что делать с памятью которая растет значительно к концу торгового дня (сессии)?
Именно этот пример и привожу!
 
VPM, Ха-ха-ха! Комиссии НИКАК не зависят от количества тикеров. Если я сделаю 100 сделок на одном тикере или по одной на сотне тикерах, комиссия будет та же самая (если средняя цена лота у этой сотни такая же). И что делать с Вашим "правилом 5%", если у Вас те самые ТРИ тикера? Держать почти все деньги в кубышке? А ведь капитал и портфель меняются каждый день, если не каждую минуту!

А что такое "достаточно ликвидные инструменты" на срочном рынке? Я вот с недавнего времени стал торговать НА ВСЕХ фьючах одного тикера - в частности, на квартальных: H, M, U, Z. Закрылись вот недавно Z3, открываю Z4 - пусть даже его пока и в природе не существует. Появится - начнёт торговаться. И ликвидность у него месяц-другой будет почти никакая. А потом постепенно раскочегарится. Мой скрипт умеет торговать при ЛЮБОЙ ликвидности. Между прочим, средняя прибыль на сделку у малоликвидных обычно даже выше.

А CreateDataSource = Большая Жопа! Лично я этим говном не пользовался НИКОГДА (в боевых скриптах - только изучал на тестах). И не собираюсь - забыл про неё как про страшный сон.

И для отладки куда выгоднее сразу делать как надо. И вообще работу нужно начинать с составления ТЗ. А насчёт "пароль поставлю"... было когда-то в российских компьютерных шахматах три команды: я с Юркой, Вихрев с Лёшей Маняхиным и Женька Налимов (остальные были НАМНОГО слабее). Рубились друг с другом беспощадно, все трое побывали чемпионами России. Так вот: у каждого из нас были программы конкурентов, мы свободно обменивались алгоритмами, иногда кое-что заимствовали друг у друга (редко, подходы были разными), вместе ездили на чемпионаты мира и другие соревнования. И что же? Первым отвалился Женька - он был из Новосибирска, особо не пообщаешься, а мы продержались ещё несколько лет, вышли на вполне мировой уровень, выигрывали в турнирах у действующих чемпионов мира (кстати, с их авторами у нас тоже были прекрасные отношения - Ленг, Хирш, Морш, Юнайк, Кёнинг и другие). А вот Донской (автор Каиссы) как раз закрывался от других. Результат: последнюю версию Каиссы драла в хвост и в гриву даже Женькина программа, не говоря уже о наших. А вот Битман (другой соавтор) делал нам дебютный справочник по скандинавке (и нам, и Вихреву). Короче: профессионал воровать не умеет - ему проще самому написать то, что нужно. А чайники нехай ковыряются в кодах - не поможет!
 
Цитата
Владимир написал:
Ха-ха-ха! Комиссии НИКАК не зависят от количества тикеров. Если я сделаю 100 сделок на одном тикере или по одной на сотне тикерах, комиссия будет та же самая (если средняя цена лота у этой сотни такая же). И что делать с Вашим "правилом 5%", если у Вас те самые ТРИ тикера? Держать почти все деньги в кубышке? А ведь капитал и портфель меняются каждый день, если не каждую минуту!
1) Почему в кубышке? 20 инструментов * 5% капитала = 100% Капитала на 20 инструментов.
2) Как не зависит, у каждого инструмента своя комиссия.
Но я даже не об этом. Представим, дневной диапазон одного инструмента  в среднем ходит в день на 100 пунктов что составляет 2% изменения в цене.
Мой Вариант чтоб взять 100 пунктов мне нужен 1 контракт, (2%), если риск позволяет получить 500 пунктов мне нужно 5 контракт (5*2%) и т.д.
Ваш вариант так как тайм фреймы для принятия решений небольшие, а удержание позиции не значительное, то ценна на них делает несколько небольших колебаний, для простоты скажем 0.5%,
для того чтоб набрать 2% нужно сделать 4 сделки (4 комиссии).
 
Цитата
Владимир написал:
А что такое "достаточно ликвидные инструменты" на срочном рынке? Я вот с недавнего времени стал торговать НА ВСЕХ фьючах одного тикера - в частности, на квартальных: H, M, U, Z. Закрылись вот недавно Z3, открываю Z4 - пусть даже его пока и в природе не существует. Появится - начнёт торговаться. И ликвидность у него месяц-другой будет почти никакая. А потом постепенно раскочегарится. Мой скрипт умеет торговать при ЛЮБОЙ ликвидности. Между прочим, средняя прибыль на сделку у малоликвидных обычно даже выше.
Вы же сами говорите об эффективности использования капитала, а у Вас получается какую - то часть замораживаете на месяц, пусть даже небольшую, а зачем?

У фьючерса есть еще одна особенность, чем дальше срок исполнения, тем больше отклонение от справедливой цены! По мере приближения срока исполнения его цена будет смещаться в сторону цены актива!
 
Цитата
Владимир написал:
Короче: профессионал воровать не умеет - ему проще самому написать то, что нужно. А чайники нехай ковыряются в кодах - не поможет!
Я не про воровство, я чтоб не портили задумку автора, а потом жаловались , что не так все работает, про не опытность!
 
Цитата
Владимир написал:
И для отладки куда выгоднее сразу делать как надо. И вообще работу нужно начинать с составления ТЗ.
Это так, вот только задача и заключается у знать как надо? Сейчас делаю подход от обратного.  
 
VPM, Потому в кубышке, что у Вас в коде указано ТРИ инструмента, а не 20. А если у Вас на 20 тикеров тупо денег нет? Или, наоборот, хватает на 200?

Я уже говорил, что мой личный рекорд 90.4% в день. И много раз говорил, что рынку насрать, что там МНЕ нужно: любой из тикеров может в любой момент и взлететь и упасть со страшной силой. Планировать что-либо, считать какие-то риски просто глупо: "Хочешь рассмешить Господа - расскажи ему о своих планах". И ещё: даже при торговле на 10-секундном таймфрейме скрипт может держать позицию неделями, месяцами, годами. А может и секундами.

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

А "знать как надо" очень просто: надо так, как это представляется правильным в данный момент. Напишите ТЗ, и сами всё увидите.
 
Цитата
Владимир написал:
Потому в кубышке, что у Вас в коде указано ТРИ инструмента, а не 20. А если у Вас на 20 тикеров тупо денег нет? Или, наоборот, хватает на 200?
Цитата
VPM написал:
У меня их не 3 это для простоты изложения, но точно не 300, к примеру для фондового рынка я установил правило ~ 5% Капитала на инструмент,  100% / 20% <= 20 бумаг в портфеле.
На фондовом у меня инвестиционный подход. А рассказываю я про срочный (спекулятивный подход). Сейчас торгую руками отслеживаю в основном 4 тикера, которые котируются  в USD, для того чтоб оценить результаты одним взглядом т.е. посчитать пункты. А от 300 * 9 через пять минут можно в обморок упасть :lol:
Для сравнения на стадии отладки пишу в скрипт тоже 4 , позволяет сравнивать два подхода!  
 
Цитата
Владимир написал:
Я уже говорил, что мой личный рекорд 90.4% в день. И много раз говорил, что рынку насрать, что там МНЕ нужно: любой из тикеров может в любой момент и взлететь и упасть со страшной силой
Ну тут работает Ваше правило 300 * 9 = 2700 или 1/2700 капитала с работала на  90.4% в день. :what:  
 
Цитата
Владимир написал:
Планировать что-либо, считать какие-то риски просто глупо: "Хочешь рассмешить Господа - расскажи ему о своих планах". И ещё: даже при торговле на 10-секундном таймфрейме скрипт может держать позицию неделями, месяцами, годами. А может и секундами.
Всем чем можем управлять это риск! От него и строим сделку.
Цитата
Владимир написал:
А что такое "замораживание капитала"? Я бы предпочёл термин "вложение". Деньги должны работать. Причём на фондовом рынке можно вкладывать чуть ли не 100% имеющихся средств, но на срочном это, мягко говоря, чревато.
На срочном после дневного клиринга даже бывает > 100% вложение, но я такое не люблю и уменьшаю позиции.
Кстати Вы не считаете показатель из таблицы "состояние счета" "% Испол.ГО". Не могу понять как правильно?
 
Цитата
Владимир написал:
И что, свободные деньги на срочном рынке заморожены? Нет, это резерв! Чтобы потом не было мучительно больно.
Согласен здесь если устраивает результат за период , то чем меньше под риском тем лучше!

Цитата
Владимир написал:
Наконец, не бывает в природе никакой "справедливой цены".
Даже считают на опционах.
 
Ну и еще одно
Цитата
Владимир написал:
А что такое "достаточно ликвидные инструменты" на срочном рынке? Я вот с недавнего времени стал торговать НА ВСЕХ фьючах одного тикера - в частности, на квартальных: H, M, U, Z. Закрылись вот недавно Z3, открываю Z4 - пусть даже его пока и в природе не существует. Появится - начнёт торговаться. И ликвидность у него месяц-другой будет почти никакая. А потом постепенно раскочегарится. Мой скрипт умеет торговать при ЛЮБОЙ ликвидности. Между прочим, средняя прибыль на сделку у малоликвидных обычно даже выше.
почему важна ликвидность, высокая ликвидность позволяет проводить в сделке более высокие объёмы, это одна из причин почему здесь сидит крупняк, а это в свою очередь заставляет работать алгоритмы о которых я пишу и реализую!
 
VPM, Да какая разница, сколько тикеров У ВАС в данный момент? Правило 5% дурацкое в любом случае.

Да-да, моя сестра тоже любила повторять, что она не трейдер, она инвестор. А я спрашивал, в чём разница. Выяснили, что ни в чём - просто масштаб времени разный. И, соответственно, закладываться на этот масштаб заранее, без учёта реального поведения рынка есть идиотизм. Вся торговля на бирже носит спекулятивный характер: купить дешевле, продать дороже. Руками я давно не торгую - не царское это дело "отслеживать в основном 4 тикера" - пущай железяка работает - ей всё равно, 4 там тикера или 444.

Да нет никакого "моего правила 300 * 9 = 2700"! Прибыль 90.4% была получена на ОДНОМ тикере, когда его сильно лихорадило, а в портфеле их было порядка 30. И "рисков" никаких нет и не будет. Риски снижаются диверсификацией, а у меня она "едина в трёх лицах". А клиринги - это туфта: реальная прибыль возникает только при закрытии позиций. В таблицы "состояние счета" "% Испол.ГО" не заглядываю вообще - думаю, что ТАК правильно. И ещё раз: не бывает в природе никакой "справедливой цены"! Что бы там ни "считали на опционах".

Да насрать мне, где там "сидит крупняк"! Это Я, торгую, меня интересует МОЯ прибыль, а крупняк пусть СВОИ проблемы решает.
 
Цитата
Владимир написал:
Кроме того, я лично никогда не пользуюсь конструкциями вида #sec - скрипт сам знает размеры всех своих массивов. Например, размеры стеков хранятся в их нулевых элементах. И все индексы у меня числовые - так, на всякий случай, чтобы не нарываться на потенциальные проблемы с ключами.
"размеры стеков хранятся в их нулевых элементах" - этот прием я перенял у Вас, активно его использую, но он не везде подходит. Проблема возникает при перезапуске, а что делать если скрипт запустил и оставил не выключая тут целая серия задач возникает.
Цитата
Владимир написал:
А "знать как надо" очень просто: надо так, как это представляется правильным в данный момент. Напишите ТЗ, и сами всё увидите.
ТЗ это хорошо в моем есть симулятор рынка, не могу сказать сколько раз я его уже переделываю и Вот опять надо.
 
VPM, Нет тут никаких проблем. При перезапуске все стеки обнуляются, да и так они почти всегда болтаются около нуля. Да и скрипт может работать месяцами без остановки.
 
Есть шутка "Хотел спекульнуть, а стал инвестором" :smile:

Владимир,  Как Вы не поймете, я рассказываю о подходе  очень простом.
Кто может двинуть цену - значительные средства.
На каком рынке проще провести крупные сделки - там где есть ликвидность,  за ней гоняется чтоб набрать свою крупную позицию.
Крупная Позиция набрана - защищать будет?
Крупная Позиция набрана -  будет движение в сторону наборной позиции или отдаст всю прибыль ретейлу?
Чтоб набрать Крупную Позицию обязательно будут следы.
Нашли следы встали в направлении крупной позиции позиции, нашу сделку защищает крупный игрок.
Какое его движение интересует ну точно не тайм фрейм 10 секунд . Так формируются тренды. И мы по тренду.
Теперь  задача сводится определить, когда Крупную Позицию начнут распределять ретейлу.
Если в двух словах, действует правило "перехода из рук в руки". Ретейл - мене организованная часть, Крупная позиция обладает значительными средствами и ведет свою игру.
 
VPM, Бывает и наоборот. Когда я ещё руками торговал, купил один тикер - прикинул, что через пару месфяцев он должен бы принести прибыль. Только купил,, а он ХРЯСЬ - и на 12% вверх прыгнул. Хоть сразу продавай! Думаю: не буду! 15%, 18%, 20%, 22%, 25%, 27% - ну не выдержал, продал (прошло где-то около часа). Самое смешное, что курс тут же развернулся и покатился вниз.

Господи, да плевать 100500 раз, кто там может двинуть цену! Она сдвинулась? Туда, куда надо? Прекрасно, фиксируем прибыль. СВОЮ прибыль, а на остальных плевать. А "определить, когда Крупную Позицию начнут распределять ретейлу" не моё собачье дело.
 
Цитата
Владимир написал:
И ещё раз: не бывает в природе никакой "справедливой цены"! Что бы там ни "считали на опционах".
Я ни слова не сказал про законы мировоздания (природы), здесь скорее нужно оперировать такими понятиями как ценность.
Есть цена, есть стоимость, и есть ценность.
Ценность в блокадном Ленинграде на золотые изделия, предметы искусства,  равнялась кусочку хлеба.  
 
VPM, И ценности никакой нет: есть согласие продавца и покупателя, то бишь абсолютно субъективная вещь.
 
nikolz,  Вот нашел, работа старая писал на луа 5.1, выкладываю как есть, перед использованием проверьте на соответствие 5.4.
Код
function Cached.SWISS_ARMY_KNIFE_INDICATOR()--SWISS ARMY KNIFE INDICATOR (John Ehlers)

--[[ выполняет все обычные функции обычных индикаторов, такие как сглаживание и генерация импульса.
 Также делает некоторые необычные вещи, такие как остановка полосы и фильтрация отклонения полосы. 
 
 Как только вы запрограммируете этот индикатор, вы сможете использовать практически любой метод технического анализа. 
 Этот уникальный общий индикатор является результатом общих концепций цифровой обработки сигналов (DSP) для дискретных сетей сигналов,
 которые появляются в различных формах в техническом анализе.

 Передаточная функция дискретной линейной системы - это отношение выхода системы, деленное на вход. 
 --]]
    --local rounding=rounding
    --local Value=Value;

    local pi=math.pi;
   local exp=math.exp;
   local cos=math.cos;
   local sin=math.sin;
   local sqrt=math.sqrt;
   local floor=math.floor;
        local Filt,Price={},{};
   --local fPeriodDC=Cached.PeriodDC();
   
   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 8;
      local n = FSettings.n or 0;
      local wid = FSettings.wid or "BP";
      local delta1 = FSettings.delta1 or 0.1;

      local avtoP = FSettings.avtoP or 0;
      local rev = FSettings.rev or 1;
      local wg = FSettings.bw_hp or 1; --полоса пропускания
      local bw_ss = FSettings.bw_ss or 1;
      local metod = FSettings.metod or 2; -- адаптации period данных
      --Settings.pole_hp = 0
      --Settings.pole_ss = 2
      local x = FSettings.x or nil;
      --------------------------------------
      local price = x or Value(I, v_t, ds) or 0;
      --------------------------------------
      if I == 1 then 
         Price,Filt={},{};
         Price[I],Filt[I]=p0,p0;
         --fPeriodDC=Cached.PeriodDC()
      end
      --------------------------------------
      local p1=Price[I-1] or price;
      local p2=Price[I-2] or p1;
      local pn=Price[I-n] or p2;
      Price[I] = price;

        --Vars:
        local c0=1;
        local c1=0;
        local b0=1;
        local b1=0;
        local b2=0;
        local a1=0;
        local a2=0;
        local alpha=0;
        local beta1=0;
        local gamma1=0;

      ---------------------------------
      if avtoP == 1  then 
         local DC = fPeriodDC(I, {['v_t']=v_t,['period']=P,['N']=N,['wg']=wg,['bw']=bw_ss,['metod']=metod}, ds)
         --if DC < 6 then DC=6 end
         --if DC > P then DC=P end
         P = round(floor(rev*DC),0)
      end
      ---------------------------------

      local filt=0;
      local filt1=Filt[I-1] or 0;
      local filt2=Filt[I-2] or filt1;
      local fi=2*pi/P;

  if wid == "EMA" then --INDICATOR
    if I <= n then filt,filt1 = price,price; end
      alpha = (cos(fi) + sin(fi) - 1) / cos(fi);
      b0 = alpha;
      a1 = 1 - alpha;
  
  elseif wid == "SMA" then --INDICATOR
     if I <= n then filt,filt1 = price,price; end
        c1 = 1 / n;
        b0 = 1 / n;
        a1 = 1;
      
  elseif wid == "Smooth" then --INDICATOR
        if I <= n then filt,filt1 = price,price; end
      c0 = 1 / 4;
        b1 = 2;
        b2 = 1; 
      
  elseif wid == "Gauss" then --INDICATOR 
        -- фильтр Гаусса является фильтром нижних частот, 
      -- позволяя проходить более низким частотам и ослаблять более высокие частоты.
      -- Использование гауссовых фильтров - это движение к двойной цели: 
      -- уменьшить отставание и уменьшить отставание высокочастотных компонентов относительно отставания низкочастотных компонентов. 
    if I <= n then filt,filt1 = price,price; end
        beta1 = 2.415*(1 - cos(fi));
        alpha = -beta1 + sqrt(beta1*beta1 + 2*beta1);
        c0 = alpha*alpha;
        a1 = 2*(1 - alpha);
        a2 = -(1 - alpha)*(1 - alpha);
  
  elseif wid == "Butter" then --INDICATOR 
        -- Сглаживание, реализованное с помощью этого фильтра, является чрезвычайно скромным, отклоняя только компонент цикла 2 бара.
      if I <= n then filt,filt1 = price,price; end
        beta1 = 2.415*(1 - cos(fi));
        alpha = -beta1 + sqrt(beta1*beta1 + 2*beta1);
        c0 = alpha*alpha / 4;
        b1 = 2;
        b2 = 1;
        a1 = 2*(1 - alpha);
        a2 = -(1 - alpha)*(1 - alpha);
  
  elseif wid == "HP" then 
     if I <= n then filt,filt1 = 0,0; end
       alpha = (cos(fi) + sin(fi) - 1) / cos(fi);
       c0 = 1 - alpha / 2;
       b1 = -1;
       a1 = 1 - alpha;
  
  elseif wid == "2PHP" then 
        --является фильтром высоких частот, позволяя проходить более высоким частотам и ослаблять более низкие частоты.
     if I <= n then filt,filt1 = 0,0; end
      beta1 = 2.415*(1 - cos(fi));
        alpha = -beta1 + sqrt(beta1*beta1 + 2*beta1);
        c0 = (1 - alpha / 2)*(1 - alpha / 2);
      b1 = -2;
        b2 = 1;
        a1 = 2*(1 - alpha);
        a2 = -(1 - alpha)*(1 - alpha);
  
  elseif wid == "BP" then 
     if I <= n then filt,filt1 = price,price; end
      beta1 = cos(fi);
      gamma1 = 1 / cos(4*pi*delta1 / P);
      alpha = gamma1 - sqrt(gamma1*gamma1 - 1);
      c0 = (1 - alpha) / 2;
      b2 = -1;
      a1 = beta1*(1 + alpha);
      a2 = -alpha;
  
  elseif wid == "BS" then --INDICATOR
     if I <= n then filt,filt1 = price,price; end
        beta1 = cos(fi);
        gamma1 = 1 / cos(4*pi*delta1 / P);
        alpha = gamma1 - sqrt(gamma1*gamma1 - 1);
      c0 = (1 + alpha) / 2;
        b1 = -2*beta1;
        b2 = 1;
        a1 = beta1*(1 + alpha);
        a2 = -alpha;
  end;

    if I > n then 
    filt = c0*(b0*price + b1*p1 + b2*p2) + a1*filt1 + a2*filt1 - c1*pn;
    end;
   Filt[I] = filt;

   return filt1,filt
   end
end

Страницы: Пред. 1 ... 19 20 21 22 23 ... 26 След.
Читают тему
Наверх