Владимир написал: Если Вы не знаете побитовые операции, то Вам просто нечего делать в программировании
Так и я же об этом, я не "писатель" я "конструктор", конструирую свой маленький велосипед для автоматизации торговли средствами QUIK!
Цитата
Владимир написал: а тут несколько страниц обсуждается несчастный AND
Обсуждаем как его прикрутить к buy = line1 > line2 sell = line1 < line2 Вот ребята и объясняют одному неучу!
Цитата
Владимир написал: А мы с Борькой когда-то хотели обсудить и реализовать идеальный интерфейс для программиста, отлаженный в боевых условиях и нечувствительный ко всем существующим глюкам. Это вряд ли больше десятка функций, на отлладку которых и гробится 99% времени программистов и которым посвящены чуть ли не все здешние ветки
Хотеть и делать чуть разные вещи. А так одни лозунги. "Экономика должна быть экономной"
VPM, Вот именно: "Экономика должна быть экономной". Если Вы не "писатель", то и велосипед не Вам конструировать - нужно брать готовый. Что мы с Борисом когда-то и хотели сделать.
Да, "хотеть и делать чуть разные вещи". Мы - СДЕЛАЛИ. Хотели для всех, но сделали для себя. Причём именно МЫ - Борька хоть и не программист от слова "совсем", но голова у него варит превосходно.
Я сказал что 3 это не портфель. Десяток тикеров в портфеле - это ещё куда ни шло.
Владимир написал: Если Вы не "писатель", то и велосипед не Вам конструировать - нужно брать готовый.
По Вашей логике, если Вы не инвестор (трейдер) то и торговать не Вам.
Главная задача ради которой здесь - это автоматизации торговли. Торговать!
Если Вы, собираете велосипед, то вам не нужны отдельно спицы, достаточно целого колеса, а уж куда его прикрутить, какое колесо, это решения конструктора!
Тяжело с Вами программистами, все "с ног на голову" поставите
VPM, Да, по моей логике любым делом должны заниматься профессионалы. Остальные тоже могут, но только чтобы научиться чему-то полезному. Лично я учиться быть трейдером не хочу и, соответственно, торгую не я.
Владимир написал: Лично я учиться быть трейдером не хочу и, соответственно, торгую не я.
А это просто иллюзия! Торгуете Вы и конечное решение за Вами. А для того чтоб торговал Ваш скрипт рентабельно, не достаточно знаний побитовых операций, нужно еще кое что знать и применять
VPM, Нет за мной никакого "конечного решения". Я обычно вообще не знаю, как он торгует, а иногда даже чем он торгует. И торгует он куда более "рентабельно", чем я сам.
Какая, в задницу, "чёткая логика"? Побитовые операции, хоть и называются "логическими", никакого отношения к логике не имеют. А сленгом обычно пользуются дилетанты, которые пытаются изображать из себя профессионалов - это даже индикатором может быть. В профессиональной среде сленг неустойчив и частенько привязан к конкретной задаче.
Владимир написал: Какая, в задницу, "чёткая логика"? Побитовые операции, хоть и называются "логическими", никакого отношения к логике не имеют.
bit -0; 1; да или нет;
Цитата
Владимир написал: А сленгом обычно пользуются дилетанты, которые пытаются изображать из себя профессионалов
Любая дисциплина профессия в сленге, не смотря на то что называют профессиональным языком (химия, физика,......)
Цитата
Владимир написал: В профессиональной среде сленг неустойчив и частенько привязан к конкретной задаче.
Только сленг, послушайте академика обязательно будет сленг даже при обсуждении фундаментальных Вопросов.
Профессиональная среда это шахтеры, металлурги, транспорт и т.д. Торгаши как без них, а то о чем Вы, прикладное к данным профессиям: облегчить, упростить, автоматизировать и т.д.
Владимир написал: Нет за мной никакого "конечного решения". Я обычно вообще не знаю, как он торгует, а иногда даже чем он торгует. И торгует он куда более "рентабельно", чем я сам.
Включить выключить когда вкл. это конечные решения. Суть не в этом, то как на писали так и торгует все решения были за Вами, исполнение за скриптом.
VPM, Повторяю: НЕ БЫЛО за мно никаких "конечных решений". Я дал ему денег - И ВСЁ! А если вспомнить период, когда биржа в России ещё нормально работала, то это ещё вопрос, кто кому дал.
А тем временем, получив сигналы от нашей стратегии, подошли в плотную к вопросам Мани Менеджмента. Распределению весов в портфеле и количеству контрактов на сделку.
local FreeMoney = cur_cost() -- Возвращает доступные средства local E = FreeMoney*fraction; -- fraction - разрешение на использование средств (доля) local RiskDay = round(E*RiskDay*0.01,2); -- Задаем риск на торговый день
E = round(E-RiskDay,2); -- я его сразу вычитаю так как торговать будет на всю "котлету"
--local WorkCapital = E/#sec; -- "каждому по заслугам"
Уперся в другую проблему. Сколько открывать SmartOrder? Которая на прямую упираемся "что делать с открытыми позициями во время пере запусков" и как их согласовывать с SmartOrder? Не понятно? Дело в том что замучили детские ошибки (невнимательность + тестовый режим), а может дело в местных флюидах Ну в любом случае позицию жалко ликвидировать все встает по тренду, а когда все на глазах увеличивается тут "жаба душит".
Проскочить не получилось. Эксперимент затягивается "жаба" + нерешённая проблема это надолго.
Да забыл сказать, понравился 'NAU3', NASD-9.23 Nasdaq 100 Расчетный фьючерс на Invesco QQQ ETF Trust Unit Series Стоимость пункта цены 0,92p; ГО 1799; недорогой летает как самолет , да еще озвучивает лучшие мировые компании.
Добавил!
Теперь 4 бумаги в портфеле, пришлось отменить принцип "каждому по заслугам", решаю я теперь кому чего.
'NGQ3', -- Натуральный газ 'RMU3', -- RTSM-9.23 Индекс РТС (мини) Расчетный фьючерс на RTSI. Стоимость пункта цены 18,46 p; ГО 3546; 'CNYRUBF', -- CNYRUBF Юань - Рубль Расчетный фьючерс на CNY/RUB. Торгуется до 31.12.2099 (еще 27909 дней) Стоимость пункта цены 1000 p; ГО 1036; 'NAU3', -- NASD-9.23 Nasdaq 100 Расчетный фьючерс на Invesco QQQ ETF Trust Unit Series Стоимость пункта цены 0,92p; ГО 1799; --'SFU3', -- SPYF-9.23 S&P 500 Расчетный фьючерс на SPDR S&P 500 ETF Trust Стоимость пункта цены 92,3p; ГО 5243;
А это, возможно поможет начинающим найти свой подход в автоматизации процессов и не делать хотя бы мои ошибки. Так как они уже сделаны за них. И называется это поделиться опытом.
Как бы нас Владимир, не критиковал, суть в следующим:
1) отобрал бумаги разношерстные, от медленного вечного фьючерса CNY, До шустрого Nasdaq 100 (Portfel); 2) Выделил средства под проект (Capital); 3) Определил риск на проект (RM); 4) Определил кол. которым буду торговать по каждому инструменту (MM); 5) Задал стратегию - трендовая классический реверс (TS);
Здесь главная цель достигнута, Все можно подключить не зависимо к движку, и Все работает!
Да пусть пока примитивные расчеты, "совершенству нет предела"! Да нет управлением позицией. Да нет управлением риском на сделку.
Но с этим уже можно работать кто бы что не говорил! Но Напомню, задача теста состоит выяснить насколько стабильна работа Фреймворка.
Добавьте сюда статистику по сделкам, и появится инструмент для анализа входа и выхода в сделку!
VPM, У меня сейчас запущены в тестовом режиме 43 тикера, хочу погонять месячишко, чтобы посмотреть, заслуживают ли они того, чтобы торговать ими в боевом режиме. По первому впечатлению, половина из них годится для этого, но пока ещё и недели не прошло. Парочка из вышеперечисленных (CNYRUBF и NAU3) уже работают в боевом, нареканий нет. А "торговать на всю котлету" - наивернейший способ остаться без штанов, причём НА ЛЮБЫХ тикерах. Наконец, маневрирование ресурсами между тикерами на все 146% задача скрипта.
Владимир, Я вот Вас ни как не пойму, зачем все передергиваете?
Цитата
Владимир написал: VPM, У меня сейчас запущены в тестовом режиме 43 тикера, хочу погонять месячишко, чтобы посмотреть, заслуживают ли они того, чтобы торговать ими в боевом режиме. По первому впечатлению, половина из них годится для этого, но пока ещё и недели не прошло.
А как же это. "Повторяю: НЕ БЫЛО за мно никаких "конечных решений".
А здесь,
Цитата
Владимир написал: А "торговать на всю котлету" - наивернейший способ остаться без штанов, причём НА ЛЮБЫХ тикерах
Я ведь показал расчет
Цитата
VPM написал: local FreeMoney = cur_cost() -- Возвращает доступные средстваlocal E = FreeMoney*fraction; -- fraction - разрешение на использование средств (доля)
fraction - разрешение на использование средств (доля).
Цитата
VPM написал: local RiskDay = round(E*RiskDay*0.01,2); -- Задаем риск на торговый день
это риск на торговый день, Причем тут "бабушкины котлеты"?
Цитата
Владимир написал: Наконец, маневрирование ресурсами между тикерами на все 146% задача скрипта.
Задача проекта не соревнование с Вашим скриптом, 1)
Цитата
VPM написал: Здесь главная цель достигнута, Все можно подключить не зависимо к движку, и Все работает!
2) и главное
Цитата
VPM написал: Но Напомню, задача теста состоит выяснить насколько стабильна работа Фреймворка.
Столкнувшись с тем что, в моем рабочем скрипте, на больших Таймфремах на одно событие стало приходит несколько приказов, начел исправлять, вспомнил о данной разработке, где все уже за меня решено, способами мне не доступными, теперь проверяю на ошибки, чем их больше вылезет сей час тем лучше, тем спокойней будет дальше. Есть замечания милости просмм.
Цитата
Владимир написал: У меня сейчас запущены в тестовом режиме 43 тикера
А на это я Вам свое мнение сообщал; Изначально неверно сформулирована задача.
VPM, А подумать? К тому же, я тыщу раз говорил открытым текстом: список тикеров, которыми ему вообще разрешено торговать и сумму, которой ему дозволено распоряжаться, определяю я. А уж чем и как из этого списка он будет торговать, решает он.
Да плевать мне на Ваши расчёты и прочую лабуду вроде "Мани Менеджмента" или "распределение весов в портфеле и количество контрактов на сделку" или "риски на торговый день". Не царское это дело, скрипт и сам справится. А задача у меня не только верно сформулирована, но уже реализована, отлажена и работает прямо сейчас - и в тестовом режиме, и в боевом.
Владимир написал: А подумать? К тому же, я тыщу раз говорил открытым текстом: список тикеров, которыми ему вообще разрешено торговать и сумму, которой ему дозволено распоряжаться, определяю я
Подумал.
Цитата
Владимир написал: Повторяю: НЕ БЫЛО за мно никаких "конечных решений". Я дал ему денег - И ВСЁ!
Владимир написал: НЕ БЫЛО за мно никаких "конечных решений"
А вопрос-то интересный. Допустим, есть программа поиска простых чисел и записи их в файл. Какое число является простым, программа решает сама, но алгоритм поиска задал человек. Да и решение запускать программу, или нет, принимает тоже он. Так от кого зависит, будут в файле простые числа, или нет? Кто принимает "конечное решение"?
Zvlos, И что тут "интересного"? Алгоритм поиска простых чисел тупейший и известный ещё до появления Решета Эратосфена. Мало того, он полностью детерминированный и никак не зависит от входных данных. Ежу понятно, что простые числа ищет программа, у "сапиенса" на это просто мозгофф не хватит. А "будут в файле простые числа, или нет" вообще никакого отношения к поиску простых чисел не имеет - это вообще другая задача.
Смена стратегии на трендовую в торговой системе HT, (да уже можно заявлять о торговой системе), дает возможность сосредоточиться на усовершенствовании TS не отвлекаясь на сделки.
HT ведет себя прекрасно - замечаний нет.
Цитата
VPM написал: Сколько открывать SmartOrder? Которая на прямую упираемся "что делать с открытыми позициями во время пере запусков" и как их согласовывать с SmartOrder?
Присвоил вес каждому инструменту, предварительно рассчитал количество в торговой позиции согласно этому кол. открываю SmartOrder. Во время пере запусков согласовываю с кол. открытых SmartOrder с разрешенным количеством.
В силу определенной тенденции открываем поз. по тренду. Если позиция растет количество контрактов растет. Если позиция падает количество контрактов уменьшается.
И так стает вопрос как поступить. Вариант 1: HT встроить в рабочий скрипт. Вариант 2: До работать данный проект.
Выбор - развить данный.
Все вынес на отдельный счет.
RM: local RiskDay = round(E*RiskDay*0.01,2); -- Задаем риск на торговый день Вынесен в отдельный скрипт, если достигнута просадка все сбросит.
Сделок маловато, добавим бумагу и средовую стратегию, все это легко делается.
Добавлю сбор статистики по сделкам для оценки торговых стратегий. Но в таком состоянии это бессмысленно, так как стратегия реверсная, нужен более вразумительный выход из позиции.
OrderSmart[trans_id]:update(feed[i].last, 0);
Я просто не перестаю восхищаться насколько все лаконично реализовано!
При выполнении условия на закрытие цена просто будет догонять пока все не сбросит. Вперед!
VPM, Это было весь позавчерашний вечер, весь вчерашний день и всё сегодняшнее утро. Примерно час назад рынок ломанулся вниз, сейчас вроде как остановился. Мой скрипт очень неплохо на этом заработал.
VPM написал: Фондовый рынок просто выкупают, правда непонятно кто гребет, но мы сними
Цитата
Владимир написал: Примерно час назад рынок ломанулся вниз, сейчас вроде как остановился.
Похоже на выходные закрываются, или что вышло?
Цитата
Владимир написал: Это было весь позавчерашний вечер, весь вчерашний день и всё сегодняшнее утро.
Ну вот говорили не проблем со связью.
После общения с провайдером, как в прошлом инженер, делаю вывод "канал сквозняком сдуло" Так как связь есть но она не работает, Роутер поближе, витую пару наготове!
VPM, Что-то мне подсказывает, что поведение программы определяется программистом. Моя ведёт себя очень даже солидно. Вчера под 80 сделок, сегодня под 70. Это в боевом режиме - в тестовом более пяти сотен. Оба портфеля прекрасно сбалансированы, обоим поведение рынка очень даже по душе, оба понятия не имеют, что там "только коррекция на рынке акций РФ", да их это и не интересует.
VPM, Господи, канал-то здесь при чём? Там объёмы просто смехотворные. У меня, правда, оптика много лет, но в гостях прекрасно работает и через вайфай. Хоть сто там тикеров, хоть тысяча. И к разработчикам уже много месяцев нет никаких претензий. А если "в понедельник начнут выкупать", значит, скрипт начнёт продавать (сейчас у него небольшой перегруз по покупкам). Или во вторник. Или прямо сейчас - когда надо, тогда и продаст. Или купит. Главное, руками ничего не трогать, не путаться у него под ногами.
"Ни когда не было и вот опять". Подскажите что я не так делаю?
Хочу снять активную заявку по trans_id, вот вызов:
if active then KillOrders_id( trans_id ) end
Но получаю: "Ошибка: ord.sec_code CNYRUBF; Не указан режим транзакции"
Вот сама функция:
function KillOrders_id(trans_id)
local NumberOf = getNumberOf("orders") for i = 0, NumberOf - 1 do local ord = getItem("orders", i) local ord_status = get_order_status(ord.flags)
if ord_status and ord_status~='' and ord_status == "active" --and ord.sec_code == symbol --and ord.account == account and ord.trans_id == trans_id --trans_id NUMBER Идентификатор транзакции then
local trans_id = get_trans_id(); Log:trace( "KillOrders trans_id: ".."; status= ".. tostring(ord_status).."; trans_id= ".. tostring(trans_id) ) local trans_params = { --ACCOUNT=account, --CLIENT_CODE=client, CLASSCODE = ord.cllas_code, TRANS_ID = tostring(trans_id), ACTION = "KILL_ORDER", ORDER_KEY = tostring(ord.order_num) } local res = sendTransaction(trans_params) if 0 < string_len(res) then Log:info('KillOrders_id - Ошибка: '.."ord.sec_code "..tostring(ord.sec_code)..'; '..res,1) end end end end
VPM, Если ордер не активный, то и снимать нечего. У него есть уже trans_id, по которому эту заявку ПОДАВАЛИ, а нужен НОВЫЙ trans_id, по которому её СНИМАЮТ.
Владимир, Вот рабочий код: TC=TC+1; -- заносим в таблицу для формирования транзакций A.TRANS_ID=tostring(TC);-- данные по снимаемой заявке A.ACTION="KILL_ORDER"; A.ORDER_KEY=tostring(s.order_num); l=sendTransaction(A); -- и отправляем её в Квик
VPM, Я не знаю, что такое get_trans_id(), зачем здесь local и при чём здесь фильтр, я привёл полностью рабочий код, который за сегодня уже снял 4 заявки из 32 возможных. CLASSCODE тоже нафиг не нужен - по номеру заявки и так сообразит, что почём.