Владимир написал: И как управляться даже с одним тикером, если торговать на нескольких таймфреймах?
Здесь смысл не торговать на всех одновременно, мы их оцениваем, а торговый у нас один. Такой подход называют "Система трех экранов", работает давно и достаточно хорошо.
Ну к примеру, Внутри дневная торговля, Смотрим D1 определяем какие то значимые уровни, (если крупняк набрал позицию и находится в ней, он ее будет зачищать), определяем тренд он главный в направлении его будем сделки открывать, Переходим на торговый допустим H1, сработал сигнал на открытие позиции, Переходим на младший допустим М1 определяем параметры сделки, т. входа, от нее определяем стоп.
Владимир, Если Вы промой подход, то я знаю до открытия сделки сколько контрактов я буду торговать на каждом тикере, знаю сколько пунктами рискую, и какой выигрыш закладываю. Я про это и говорю это часть планирования сделки! Ну смотрите, Если я сделку сопровождаю (визуально), если пошло что не по моему сценарию я ее закрою не буду дожидаться стоплос, лучше пере зайду. если все в порядке и цена дошла или больше 3RR а меня что то смущает я закрою 50% и перенесу стоплос в без убыток или выше. Это и есть стратегия сопровождения сделки, я ее еще делаю и алгоритмически она не донца формализована.
"Кошелек дробин на количество тикеров" Правильно читать; Капитал (рубли) дробин на количество тикеров: Кошелек [i] = какая - то доля[i] * Капитал; Свой кошелёк для каждой бумаги, какая - то доля[i] отвечает за долю Капитала в кошельке.
таймфрейм - отвечает также за планирование от старшего к младшему.
Владимир, Но мне думается что Вы в своем подходе не учитываете, то обстоятельство, что при торговле не работает принцип: "Чем больше контрактов в сделке тем больше прибыль?".
Подход называется "оптимальная фракция" (optF), и ее можно прикинуть,. Отвечает на вопрос, какой долей торговать, чтоб достигался максимальный результат, при минимальном риске?
Раз с математикой порядок, я говорю об одном методе мани менеджмента торговля постоянным лотом. Капитал 100 000 цена контракта 5 000 мах кол. контрактов 20к. риск на сделку 1000. кол контрактов в сделке 1к.
Стратегий риска достаточно, они опубликованы и есть из чего выбирать. Я веду беседу о своем подходе, который сейчас практикую, (есть другой), но это наиболее простой и понятный. Ранее эту тему уже пытался поднять, посмотрите чтоб нам говорить на одном языке (риск на день и риск на сделку).
Ну давайте обо всем и по порядку!
А) Стратегия входа это дельный модуль (отдельная тема), мы собрали какую - то стратегию, (ну простейшая в алгоритмическом плане, пересечение средних, пусть и у нас будет она). Вопрос встает как мы ее можем оценить, прежде чем на реал - бэктест.
Бэк тестирование должно ответить на вопросы а стратегия отвечать требованиям: 1) мат. ожидание стратегии(Торговой Системы) >0; 2) PF > 1.6; 3) %win > 40%; Если условие выполняются, сделки открываем, нет на "помойку".
Б) Поз. открыта встает вопрос управление позицией, (Где закрывать позицию?), который я делю на несколько стратегий. Стратегия определения риска на сделку это один из подходов. Если мы торгуем внутри дня то есть смысл работать со средне дневной волатильностью, среднесрочная с недельной. Второй ограничитель это наш кошелек. Отсюда и планируем риск на сделку (И это не вероятности - это пункты которые цена проходит). Конечно связано это с точкой входа, а точка входа зависит от тайм фрейма, чем ниже тайм фрейм, тем ниже волатильность, тем чётче можно защитить позицию. Это абсолютно, не значит, что нужно сидеть и ждать когда позиция пошла не в нашу сторону, когда нас акцептуют по стоплосу. Это просто стратегия которую мы прописываем и формализуем в виде кода. Цель защитить кошелек, а не ждать 99 убыточных сделок.
Владимир написал: Сделки НЕ МОГУТ "продолжаться разное время и превышать 1 день, или даже месяц".
Мне кажется, VPM под сделкой подразумевает удержание позиции от открытия до закрытия, а не сам факт покупки/продажи.
Цитата
VPM написал: но для меня важней соблюсти отношение риск к выигрышу, я уже говорил не ниже 1/3
Интересно, из каких соображений вы этот риск оцениваете. Ежли я что-нибудь в чем-нибудь понимаю, то риск - это величина потерь помноженная на вероятность эти потери поиметь. Т. е. подразумевается оценка апостериорных вероятностей наступления двух возможных исходов, причем не "когда-нибудь", а желательно в заданное время.
Ну конечно, сделка - это сделка нашей Торговой системы (а не брокера и биржи) ее мы оцениваем. Это любой переход из брутто в кэш, закрытие или изменение позиции в сделке.
Должен извиниться что ввел в заблуждение, у меня это по прицепу "сделал один раз и забыл". В моих программах - это написан класс, экземпляры которого я копирую от программе к программе, это просто удобно продумал структуру на писал методы, все в одном модуле, если переменная не нужна, делаем так (--), и не нужна гоняться за ней по в сему коду, есть еще один плюс такой подход очень по душе самому языку, в этом его мощь!
Не каких вероятностей, риск это та величина которой мы готовы рискнуть в случае нескольких проигрышей, и позволит нам осуществить свой торговый план без потерь, Практически это входной параметр Торговой Системы мы его задаем.
риск на сделку = кошелек * 0.01, те 1% от кошелька 99 не удачных сделок прежде чем мы не сможем торговать, согласитесь событие мало вероятное!
Владимир написал: С какого бодуна "всё считается к начальному капиталу"?
Чтобы оценить как работает торговая система за год, за месяц, за сделку. Это статистические данные торговой системы. Я у себя использую за сделку. 1) сделки могут продолжаться разное время и превышать 1 день, или даже месяц, а нужно к примеру сравнить 2 торговых стратегии и выбрать лучшую. 2) Это наиболее простой, полный логически понятный анализ. (Описывать не буду даю ссылку где лучше меня расскажут https://www.mesasoftware.com/papers/SystemEvaluation.pdf)
Владимир, Понятно вопрос я свой снимаю, проще самому разбираться чем тут все это описывать.
По порядку Ну прямо какой - то ликбез,
Цитата
Владимир написал: 1. Процент выигрыша к собственному капиталу НЕ зависит от количества контрактов в сделке.
Ну как не зависит? "пересчет в cash - для анализа по залогам" это и есть соизмерения кошель с "хочу"; Как Кому строить свой алгоритм, я не указываю!
Цитата
Владимир написал: 4. 1% в день - это 1.01 в 250-й степени! 1% в начале года совсем не такой, как в конце!
Ну какие разные все считается к начальному капиталу, если Вы про годовую оценку. Ну какая степень заработали "на полочку" складываем, можно и к степеням перейти, только нужно сделать перевод, перейти в расчеты HPR.
Владимир, Да я вспомнил мы обсуждали это уже, Вы говорили что историю не оцениваете, прогоняете реальные торги. С этим у меня порядок, я тоже так делаю у меня этот режим называется EXPERT, нет я о другом. Ни как не могу добиться стабильной работы на истории у себя я этот режим называю TEST. Суть следующая, квик хранит историю свечей разных тайм фреймах, я их прогоняю, делаю такую некую Симуляцию рынка (Симулятор) прошлых торгов, и мне нужны в каждый момент времени получить данные с разных тайм фреймах, казалось бы что сложного получил индекс вот тебе данные но тут и начинается вся свистопляска. Можете что посоветовать как синхронизировать получение данных с разных тайм фреймах?
Владимир написал: Ха-ха-ха! Ну у Вас и аппетиты! 1% в день - это 1000% годовых, про 3% даже и подумать страшно!
1% в день - это 250% годовых, из расчета 250 рабочих дней. И я имею ввиду не цель достижения как таковую, а средний годовой показатель Торговой Системы в целом.
Это из области сделал и забыл, Процент выигрыша к собственному капиталу зависит от количества контрактов в сделке, т.е. это валовый показатель.
При планировании сделок удобней пользоваться удельными показателями. Таким является риск на сделку. Считаем дневную волатильность ее и оцениваем. Задаем риск, каким капиталом рискуем 1% (100 сделок чтобы остаться без депозита), задаем коэффициент RR => 3, расчет выигрыша reward = risk * RR, дальше по схеме:
"Риск на сделку, здесь все просто. Сделаю метод для моего класса.
Все начинается с капитала. Размер имеет значение!
Задаю в % (от 1% - 10% заввисит от стратегии по умолчанию 2% (т.е. 50 сделок) пересчет в cash - для анализа по залогам; пересчет в pips - для анализа по валотильности.
На выходе: 1) risk на сделку. 2) reward на сделку. 3) contract на сделку."
При этом подходе определен Risk = 1%, Reward >= 3%, А главное в каждый момент времени вы знаете каким количеством торговать чтоб достичь заданных параметров на сделку! Выдерживая RR не ниже трех Ваш счет растет в геометрической прогрессии! Появляется понимание что нужно делать в той или иной ситуации!
А проценты будем считать в в начале нового года, "если есть что подвести".
Владимир, Вы меня не поняли, меня не интересуют Ваши торговые рекорды, я говорю что до момента торговли на реальном счете, как Вы оцениваете, может ли программа достичь результата заложенного в нее. Вы сказали оцениваете, так какие показатели формулы алгоритмы используете чем пользуетесь?
А цель нормальная, у меня тоже 1-3% вдень заложена, но для меня важней соблюсти отношение риск к выигрышу, я уже говорил не ниже 1/3, если соблюдаю мне все равно какой процент.
Владимир, Про то что мы себе на придумали, к постановке задачи не относится, вопрос стоит так: У Вас есть торговая система, только что собрали, Вы планируете вот то что Вы тут написали, Вопрос заключается а сможет ли система обеспечить эти результаты, и это нужно проверить до реальных торгов, формализовать в виде скрипта.
Формализация торговой задачи, молчу уже про окружение ее - совсем непростая задача на любом языке. В луа структура данных таблица, таблица - это половина дела к ОПП, создал структуру объекта, добавил необходимые методы, копируй по "образу и подобию". и так далее.
VPM написал: зачем отрицать сильные стороны языка, я не понимаю?
Затем, что инструмент надо выбирать по задаче. У трактора с плугом в 10 метров тоже есть сильные стороны, вот только чтобы грядку вскопать, лучше все же взять лопату - быстрее и проще, и соседский забор сносить не надо.
Ну вот и Вы туда же, никто ни кого не заставляет, нравится Вам лопатой на здоровье, я лишь говорю про возможности. Которые опробовал и привожу рабочие примеры, ну хоть кто бы пример обсудил.
Glukator, Все равно для чего, этим я лишь сказал что у него есть свои уникальные особенности отличные от других языков в этом его сила.
С Владимир, у нас старая дискуссия, и я у него тоже некоторые моменты перенял, согласен с Вами спасибо ему, я не говорю что так ненужно писать, так писали на заре и будут писать дальше, просто и понятно, но я не понимаю зачем отрицать сильные стороны языка, я не понимаю?
В моем случае первую задачу и закрыл Фреймворк, вторую пишу сам это именно то ради чего, и не вижу никаких проблем чтоб не обсуждать. Чтоб мы с Вами тут не наговорили, каждый наделает свои ошибки. Вы мне не соперник, нет узкие места бесспорно есть, и их публично никто не будет обсуждать.
Ну Вот Владимир, в своем амплуа. Язык другого нет. Не знание не освобождает от ответственности.
Постановка задачи для Вас непростительно не верна! Мало сделать "черный ящик", нужно чтоб он стабильно зарабатывал, увеличивал депозит. Вот Вам и постановка конкретной задачи, вот и покажите нам пример.
Glukator, Язык создан был под конкретную задачу, он от туда и вырос до современного. Чтоб более разобраться нужно посмотреть книгу профессора "Програмирование на Луа", это там где он рассказывает про ОПП. Здесь есть сообщения на эту тему, не хочется повторять ругаются что "пишем то да потому".
Да Фреймворк не для начинающих, сложноват в начале хотя написано 350 строк кода (но мне кажется Вы не новичок, что то я читал Ваше на другие темы).
Многозадачность - это сопрограммы, способ остановить код, сделать какую то задачу и вернуться в тоже место, где была остановка, продолжить выполнение.
А насчет конкретных задач пишите будем искать решения сообща, у меня их тоже масса не решенных и здесь не поспоришь Игорь М, занимаюсь ерундой.
Игорь М, А вы сами то о чем написали, хоть одно слово про код?
Пафоса много, а потом сами обижаетесь что все пустое, да и общаемся мы в одной ветке ни кому не мешаем, принцип здесь простой "не нравится запах отойди в сторону"!
Да код старый, такой старый что за это время лучшего никто не показал, напишите свой будем обсуждать Ваш.
Про "айсберг", чтоб этим алгоритмом пользоваться нужно 2 контракта. Про деньги у кого их не тот, тот их на бирже не сливает.
Ну и с арифметикой полный "пипец". Не достаточно таких средств под Ваши "аппетит" как минимум нужно умножить на 4, иначе счет будет перегружен.
Владимир, Ну от Вас не ожидал, под чем подписываетесь, что кого в школе научили "кодить", и они возомнили о себе что стали "супер - пупер" и не хотят развиваться.
Насчет правила , я Вам который раз пытаюсь объяснить, что прежде чем алгоритмы прятать в "черный ящик", нужно сделать понимание с чем имеем дело!
Glukator, Да встревайте конечно здесь не закрытый канал.
Видите в чем дело, чтоб раскрыть весь потенциал использования луа только так и нужно писать, я "не волшебник я только учусь" а хочется делать хорошо! Да я благодарен автору который знает как нужно делать хорошо, сделал - написал, выложил, разрешил пользоваться. А что это хорошо сделано, легко убедиться.
Задачи в торговле одни и те же, а как делать давайте обсуждать, мой подход это всего лишь один из множества.
Владимир написал: Короче: мы хотим торговать или заниматься онанизмом с "новыми возможностями"?
Именно торговать, а не скальпеть (скакать) на минутка по три минутки. Я достаточно торгую чтоб этим не заниматься. И это совсем не значит что я не торгую минутку, торгую если ситуация позволяет.
Цитата
Владимир написал: О, Господи! КОГДА "нужно держать позицию целый день (или несколько дней)"?! КОМУ? НА КОЙ?
Я сейчас руками так торгую (как и чем есть выше см. позиционная торговля), для того чтобы
Цитата
Владимир написал: заниматься чем угодно, не отвлекаясь на торговлю ВААПЩЕ.
Цитата
Владимир написал: Какие, в жопу, "ступенчатые заявки"?
Использую, когда не нарушены параметры моего риска на сделку, а цена сделала коррекцию, для добавления.
Цитата
Владимир написал: 99.999% трейдеров не имеют денег
Чтоб купить 1 контракт Fut Brent нужно 15000 рублей, чтоб депозит рос нужно соблюсти мат. правило торговать где в сделке есть потенциал не ниже 3/1 (Reward/risk).
Фреймворк подключен и мы про него забыли, не вспоминаем, а занимаемся торговыми решениями. К примеру не сложно реализовать ступенчатые заявки, такие как айсберг
if order.position == 0 then order:update(feed.last, 10) elseif order.position == 10 then order:update(feed.last, 20) end Trade()
Это весь код который мне нужно добавить в логику.
Закрыть позицию: order:update(feed.last, 0)
Вот реверс: if feed.last > ind[-2] then order:update(feed.last, 1) elseif feed.last < ind[-2] then order:update(feed.last, -1) end Trade()
Открыть и Закрыть позицию: repeat order:update(feed.bids[1].price, 3) Trade() until order.filled repeat order:update(feed.offers[1].price, 0) Trade() until order.filled
А Вы предложите что то другое, когда нужно держать позицию целый день (или несколько дней) , управлять ей, (переносить sl, закрыть часть, до набрать и другие торговые дела)
Владимир написал: Если я что-нибудь в чём-нибудь понимаю, на каждый тикер должен быть свой массив интервалов, а на каждый интервал свой массив свечей
Вы знаете другие примеры? Я этим лишь пользуюсь!
Цитата
Владимир написал: И за каким хером здесь нужны сопрограммы
В своем примере я это показал.
Цитата
Владимир написал: по-прежнему без понятия, как и что такое "умный ордер".
Вот уже 16 лист я рассказываю про один и тот же пример, (наверно плохо . но как умею не обессудьте), Но если Вы с вашим опытом не разобрались, то вероятно фреймворк HackTrade намного опережает свое время Мой совет, вместо моих комментариев, посмотрите сам код, уверяю Вас это намного интересней! Да и комментарии мои сводятся к одному из ..... возможных далеко не лучших (Но рабочих) применений.
Умные заявки. В данном разделе представлена реализация stateful-заявок, которые помнят своё внутреннее состояние и могут динамически принимать изменения параметров. Этот подход сильно отличается от традиционных лимитных заявок.
Заявка в фреймворке HackTrade представляет собой динамическую лимитную заявку с изменяемой ценой.
При этом также может меняться количество и даже направление. Главное, то нужно запомнить, 'умная заявка' будет пытаться набирать указанное количество лотов по заданной цене. Даже если вы снимите заявку торговой систем, SmartOrder породит новую и продолжить добирать заданное ранее количество (представьте, что SmartOrder - это заявка, которая гарантированно набирает зданный объём).
«умные заявки» избавляют от бесконечной отладки; можно наштамповать умных ордеров order1, order2… orderN и каждый умный ордер будет внутри себя отслеживать свою собственную позицию Каждая заявка помнит, сколько она набрала, и сколько надо скидывать. А если ей дать отрицательное значение, она войдёт в шорт (даже из логна с любым остатком). А если в шорте передадите 0, шорт закроется, причём тем объёмом, которым заявка успеет войти, когда будет переворачивать лонг.
Я использую такой подход, 'умная заявка' будет пытаться набирать указанное количество лотов если цена изменилась будет догонять, главное набрать заданную позицию.
Владимир написал: А все эти "правила на сделку, расчёт количества, подача заявок, стратегии входа и выхода давно прошиты в алгоритмах
Про модульность выше есть большой блок мы обсуждаем с Nikolay, просто не хочется повторяться. Но если что то не понятно или не согласны готов обсудить.
Цитата
Владимир написал: Ну, код-то я уж точно смотреть не буду.
Я не понимаю почему Вы не читаете код, ведь иногда горазда проще показать, чем на 100 страниц описывать!
Владимир, Это не код, я хотел показать принципиальную схему своей программы. тут много чего нет. но принципиально это так, хотя и с ошибками (поторопился).
Вот пояснения: sec - это массив тикеров чем торгуем: tf - это массив интервалов (такт) откуда берем информацию.
while working do -- основной цикл программы --исполнение идет с задержкой sleep(950) -- тормозим чтоб космосе очутиться! end
Внутри этого цикла есть сопрограмма -- Вызов сопрограммы. Trade() -- 2) основная функция - псевдоним стандартной функции coroutine.resume, осуществляет торговых операции
И так Программа бегает в 2 циклах, по двум массивам sec, tf получая данные. по выходу из цикла tf формируется сигнал, если он отвечает правилу допустив открытию позиции, то будет сформирован ордер на покупку (умный ордер и это не для красного словца).
Когда будет управление перейдет к сопрограмме у нее есть внутренний цикл вот он, и у него не задержки, он выполняется на что луа способна!
for trans_id, smartorder in pairs(SmartOrder.pool) do smartorder:process() end
Владимир, Я уже несколько раз отвечал на этот вопрос, вот накидал может так понятней будет. Текущая реализация программы сейчас принципиально выглядит так:
Код
dofile("hacktrade.lua") -- подключаю основной модуль HackTrade (движок)
function Robot() -- 1) основная функция
-----
1) Инициализация (~)
2) Получение констант
3) Предварительные расчеты
4) симулятор фона на истории
while working do -- основной цикл
local (~)
local data={}
for i=1,#sec do ---- цикла по бумагам:
-- Система нескольких окон
for j=1,#tf do ---- цикла по тайм ремам
data[i][j]=algo(index, settigs)
end
F[j]() -- парад стратегий - генератор сигналов
rule={} -- Вырабатываем правила на сделку (открт, закрытие, sl, tp и тд)
rm={} -- определение риска на сделку, расчет цели;
q = mm.calc() -- расчет количества на сделку исходя из правил уставленных риск менеджером и допустимой суммы.
-- Если выполнено правило формирую умный ордер на сделку
if rule.open_pos or rule.close_pos or rule.sl or rule.open_pos then
p = price.last -- получаем предварительную цену на сделку
SmartOrder( p, q ) -- формирую умный ордер на сделку
end
end
-- Вызов сопрограммы.
Trade() -- 2) основная функция - псевдоним стандартной функции coroutine.resume, осуществляет торговых операции
for i=1,#sec do
pos={} -- получаем позицию по инструменту
-- если сделка обрабатываю результат
end
sleep(950) -- тормозим чтоб космосе очутиться!
end
--Сохраняем
--Закрываем
end
Вопрос с модульностью решен,
- пишем свои стратегии входа,
- стратегии выхода,
- управление позицией,
- управление риском,
- алгоритмы.
Все независимо! Собираем все в Торговую Систему!
И так в своих рассуждениях мы подошли к большой теме формализация - "Ценового действия" (Price Action).
Но прежде чем о нем говорить, нужно формализовать участников торгов, с кем мы дело имеем, их можно представить в виде 3 основных групп:
1) Ну конечно "Маркетмейкер"; 2) Это крупный игрок - "SmartMoney" (есть сериал американский "Миллиарды" кому интересно с чем дело имеем посмотрите); 3) Нас по разному называют, не хочется повторять, но по смыслу это "толпа", небольшие разрозненные депозиты, пища для двух первых.
Владимир написал: В принципе, внутри одной задачи может быть несколько "процессов" - каждый из них тоже не знает друг о друге. Если угодно, это подзадачи.
Ну вот наконец то - "это подзадачи" внутри общей глобальной задачи.
Я никого не призываю так делать, я говорю что есть возможность! Что одна из этих возможностей менять время исполнения скрипта не прибегая к сторонним языкам! Ну согласитесь что классно!
Цитата
Владимир написал: У всех нормальных программистов "подход модульность". В частности, у последней версии моего скрипта 28 модулей, то бишь функций.
В Луа модуль - это не тоже что функция, но я не про это, я про разделение задач, что переделывая один модуль, не нужно переделывать всю программу.
Не давно посмотрел фильм "дурные деньги", кто не видел посмотрите, это рассказ о том как частный трейдер организовав канал общения, держал позицию против хедж фонда. История поучительная.
А вот это важно от профессора: Как и функции, сопрограммы Lua являются значениями первого класса; их можно хранить в переменных, передавать в качестве аргументов и возвращать в виде результатов. Не существует явной операции для удаления сопрограммы Lua; как и любое другое значение в Lua, сопрограммы отбрасываются при сборке мусора.
Уважаемые программисты, Вы уже определитесь сами это одно и тоже или чуть чуть нет.
Цитата
Владимир написал: Поэтому "многозадачность" и многопоточность" это как "красное" и "розовое" - две небольшие разницы.
а нам дайте определения.
Владимир, Вы уже нас "неучей" пощадите, от таких оборотов, нам попроще растолкуйте. Нет конечно можно погуглить, но тогда не поймешь, что вы имели ввиду под этим.
Цитата
Владимир написал: Это называется "темпоральная диверсификация".
Если к этому относиться как к проблеме она останется проблемой.
Цитата
Владимир написал: Вообще-то, проблем в трейдинге чуть больше:
это задачи любого трейдера в не зависимости как он торгует, и они гораздо шири чем здесь описано. Если не понимаешь как все устроено, как можно создать рабочий алгоритм? В дальнейшем его работу нужно оценить и не собственным депозитом, понять что происходит, и если нужно поправить алгоритм.
Мой подход модульность, а если валить все в кучу, то получится куча. В своих программах придерживаюсь этого подхода, (здесь есть сообщения на эту тему), это позволяет обсуждать, писать, анализировать, и даже "облизывать" каждую задачу отдельно!
Затем собирая в супер проект, это как собрать автомобиль кто создает двигатель кто то коробку кто то трансмиссию.
"В многозадачном алгоритме исполнителей несколько и у каждого из них - свое состояние и свой путь в графе состояний. Многопоточные алгоритмы - просто другое название для многозадачных."
это Артур Сэвидж "Я разработчик полного стека с более чем 23-летним опытом разработки корпоративного прикладного программного обеспечения".
Для нас важно другое:
Цитата
nikolz написал: "Это логическая многозадачность - на самом деле в любой момент времени выполняется только один поток. Просто их несколько и они переключаются между собой".