Блог им. Nikitka
-- --СКРИПТ Niki для smart-lab.ru 260321 ревизия --------------------------------------- -- Флаг для поддержания работы функции main is_run=true fut_limit_old =0 fut_limit_max =0 kgo_old =0.5 function main( ... ) -- чудотворная функция внутри которой все работает --"r": режим чтения (по умолчанию); --"w": режим записи; --"a": режим добавления; --"r+": режим обновления, все предыдущие данные сохраняются; --"w+": режим обновления, все предыдущие данные стираются; --"a+": режим добавления и обновления, предыдущие данные сохраняются, запись разрешена только в конец файла. b бинарные файлы -- Пытается открыть файл в режиме "чтения/записи" f = io.open(getScriptPath().."\\Limits.txt","a"); -- Если файл не существует if f == nil then -- Создает файл в режиме "записи" f = io.open(getScriptPath().."\\Limits.txt","w"); -- Закрывает файл f:close(); -- Открывает уже существующий файл в режиме "чтения/записи" f = io.open(getScriptPath().."\\Limits.txt","a"); end; while is_run do sleep(1000) -- 1000 = 1 секунда --волшебная пауза в работе скрипта if getFuturesLimit("A111", "A111111", 0, "SUR") ~= nil then -- защита от пустых таблиц -- впишите ваши данные из Квика -- %c - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11) -- %x - дата (пример, 09/16/98) -- %X - время (пример, 23:48:10) seconds = os.time(); -- в seconds будет значение 1427052491 date1 = os.date("%x",seconds); -- %c - дата (по-умолчанию) (пример, 03/22/15 22:28:11) time1 = os.date("%X",seconds); -- %c - время (по-умолчанию) (пример, 03/22/15 22:28:11) --[[ liquidity_coef --NUMBER Коэффициент ликвидности cbp_prev_limit --NUMBER Предыдущий лимит открытых позиций на спот-рынке» cbplimit --NUMBER Лимит открытых позиций cbplused --NUMBER Текущие чистые позиции cbplplanned --NUMBER Плановые чистые позиции varmargin --NUMBER Вариационная маржа accruedint --NUMBER Накопленный доход cbplused_for_orders --NUMBER Текущие чистые позиции (под заявки) cbplused_for_positions --NUMBER Текущие чистые позиции (под открытые позиции) options_premium --NUMBER Премия по опционам ts_comission --NUMBER Биржевые сборы kgo --NUMBER Коэффициент клиентского гарантийного обеспечения currcode --STRING Валюта, в которой транслируется ограничение real_varmargin --NUMBER Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены --]] fut_limit = getFuturesLimit("A111", "A111111", 0, "SUR").cbplused_for_positions -- NUMBER Текущие чистые позиции (под открытые позиции) -- впишите ваши данные из Квика varmargin = getFuturesLimit("A111", "A111111", 0, "SUR").varmargin -- впишите ваши данные из Квика accruedint = getFuturesLimit("A111", "A111111", 0, "SUR").accruedint -- впишите ваши данные из Квика ts_comission = getFuturesLimit("A111", "A111111", 0, "SUR").ts_comission -- впишите ваши данные из Квика kgo = getFuturesLimit("A111", "A111111", 0, "SUR").kgo -- впишите ваши данные из Квика profit = varmargin + accruedint; --if math.abs(fut_limit-fut_limit_old) > 10000 then -- каждые 10000 рублей изменения ГО, слишком частый файл печати if math.abs(fut_limit-fut_limit_old) > 100000 then -- каждые 100000 рублей изменения ГО, настраиваем под себя. open_lim = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit --NUMBER Лимит открытых позиций f:write( tostring(date1).." "..tostring(time1).." ".."ГО: "..tostring(fut_limit).." ".."Профит: "..tostring(profit).." ".."Комис: "..tostring(ts_comission).." ".. "КГО: "..tostring(kgo).." Lim: "..tostring(open_lim).. "\n"); -- "\n" признак конца строки --f:write( tostring(date1).. " " ..tostring(time1).. " " .. "BID: " .. tostring(res_trans) .. " " .. "ASK: " .. tostring(MXU8ask_vol) .. "\n"); -- "\n" признак конца строки -- Сохраняет изменения в файле на диск f:flush(); fut_limit_old = fut_limit; end if fut_limit_max == 0 then fut_limit_max = fut_limit; end if ( math.abs(fut_limit-fut_limit_max) > 1000000 and fut_limit>0 ) then -- настраиваем под себя message( tostring(fut_limit) ) ----сообщение в Квик-- --message( tostring(time1) ) ---------------------------------------- отправляем сообщение в Телеграмм-- pos_free = getFuturesLimit("A111", "A111111", 0, "SUR").cbplplanned --NUMBER ГО свободных денег от позы без пониженного ГО open_lim = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit --NUMBER Лимит открытых позиций tg_message = tostring(open_lim).." ГО:"..tostring(fut_limit).." Поза:"..tostring(open_lim-pos_free) os.execute('curl "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ') -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм ---------------------------------------- -- Пример строки https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text= + Привет Квик! ---------------------------------------- fut_limit_max = fut_limit; end if math.abs(kgo-kgo_old) > 0 then ---------------------------------------- отправляем сообщение в телеграмм tg_message = tostring(kgo).." Внимание! Изменился коэффициент КГО" os.execute('curl "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ') -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм ---------------------------------------- -- Пример строки https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text= + Привет Квик! ---------------------------------------- kgo_old = kgo; end end end f:close(); -- закрываем файл печати. end -- Остановка скрипта из Квика function OnStop(stop_flag) is_run=false end
новичком…
Используете? Зачем?
торгует и торгует. Телеграм то причем здесь? Чего вы туда шлете?
Можете свой код написать, смайлики будет вам рассылать например -))
удобно, каждый день куча смайликов, настроение позитив -)))
вот я удивляюсь публике. Вроде простой вопрос задаешь, а получаешь какие-то странные ответы совершенно о другом. Ну да ладно, не хотите делиться опытом и не надо.
Когда я вижу в коде что-то типа Sleep(1000), дальше уже не смотрю :)
то есть много сообщений отправляете? С самим телеграммом нет проблем при этом? Он, как мне кажется, тоже не очень надежный.
я не про тормоза, я про то, что сообщение отправили, но не доставили. Или доставили, но не всплыло уведомление и прочие баги.
Сам использую СМС через sms.ru, как оповещение И дублирую сообщением в почту с необходимой информацией.
Отправляю только ошибки, поэтому гарантированно и быстро получить информацию в приоритете.
Единственная проблема этой системы в том, что через sms.ru всего 5 сообщений в день на бесплатном тарифе.
В чем вы видите неправоту или вред использования sleep?
Искренне интересен ответ.
Только напишите еще, что необходимо установить curl на рабочее место.
Плюс постоянно будет мелькать окно терминала, при выполнении команды.
Взаимодейтствовать с внешним миром можно и так github.com/nick-nh/qlua/tree/master/telegramQuik
Посмотрю сам код — напишу свое мнение дополнительно.
Посмотрел код, правда не запускал. Нормально все. Только для чайников может быть было бы лучше расшифровать ваши переменные «A111» и «A111111» в вызове функции getFuturesLimit?
И один глупый вопрос )))... вы, случайно, не связаны с ресурсом quikluacsharp.ru ? Там есть похожий пример, но на другую тему. В вопросе нет никакого подвоха — банальное любопытство...
Удачи
Это абсолютно нормально. Смысл изобретать велосипед.
А комментарии писать в коде — это вообще правильно. Многие ленятся (в том числе — по правде — я в их числе), а потом в своих же кодах по новой разбираться приходится )))
Комменты нужны да)
Сам иногда смотрю на свой луа код, написанный несколько лет назад, смотрю 30 сек и потом «чёёё....?» ))))
Приходится вспоминать)
Еще табуляцию люблю четкую делать как на реферат)
Тут дажа 8 квик, от версии к версии сильно луа зависим. Паэтаму кто начинает, луча сразу брать самый новый 8.12 квик. Там две луа сразу. Надо самую новую выбирать, понятное дело луу.
curl_setopt — Set an option for a cURL transfer
Description ¶
curl_setopt ( CurlHandle$handle
, int$option
, mixed$value
) : boolSets an option on the given cURL session handle.
CURLOPT_NOPROGRESS :
true
to disable the progress meter for cURL transfersТ.е. задавая curl_setopt "TRUE" мы отключаем индикатор хода выполнения для cURL передач.
Правда, сам не пробовал, могу ошибаться.
да ну, там же есть Sleep(1000), чтобы
Но что касается маркетдаты и или её анализа, тут у квика боль. Вот и получается что позы, сделки мы свои видим, заявки выставлять можем, как то можем все это контролить в луа. А самого главного-истории маркетдаты считай нет. Ну как бы есть, но считай нет.
И конечно же в самом луа нет никаких методов анализа как в пайтон.
В итоге получаем квиковское луа отличное средство для начинающих, можно всякие окошки всплывать, в файлик писать много всяких данных, сделки позы контролировать. Заявки можно ставить. И да это работает. И вероятно для совсем не программистов, для такого ручного автоматизатора это очень даже подходит.
Но если вы хорошо программируете, и хотите писать полноценное алго, то квик здесь скорее помеха, чем помощник.
Вы написали, что "… квик+луа не предназначены для алготорговли...". Алготорговля бывает разной. Для высокочастотного метода — согласен, такая связка не очень подходит, хотя еще важен момент — где географически размещен ваш комп (если в стойке за стеной серверов биржи, то проблем, наверное, не будет). А у вас какие рассуждения на этот счет?
Еще одно ваше утверждение: "… истории маркетдаты считай нет". Хотел бы прояснить, что конкретно вы имели ввиду.
В вопросах нет никаких подвохов. Интересует ваше мнение. Кстати, по вашим комментариям вы не очень похожи на «новичка в вопросах программирования» — как вы сами про себя написали ))))
На мой взгляд алго стоит на трех китах:
Маркетдата и видимо не сырая, а вероятно каким то образом предобработаннная. На языке датасайнс — фичи.
Анализ даты — в первую очередь это инструменты и технологии анализа, визуализации, тестирования результата, отбора работающего и тд. Проще говоря фитинг даты, ну или датасайнс -)))
Исполнение нафиченного алгоритма — в реальности, реализация найденного прибыльного алгоритма на конкретной вариации маркетдаты (фичь) в боевой среде, с целью получить максимально точное, а самое главное безотказное (надежное) решение по выставлению заявок, контролю заявок и позиций.
Любой неправильно реализованный элемент из этих трех, либо сильно снижает эффективность найденных стратегий в бою, либо вообще не позволяет найти хоть что-нибудь действительно работающее.
Безусловно большинство начинающих алгописателей идет по самому простому пути, вижу свечки, беру сму или несколько смы, и погнали. Но это всего лишь один из вариантов фитинга, самый простой, самый доступный. Но как мы с вами понимаем, этим рынок не ограничивается, есть 100500 вариантов фитинга чего бы то ни было, при этом без смы вообще, и тд и тп. Одни только нейросети бесконечно бездонная тема, а кроме них, и деревья, и кучу всяких статистико-математических методов, всяких фурье вейвлетов, и прочая прочая.
Собственно Квик крайне ограничен в первом пункте, полностью отсутствует второй, ну и есть, аж несколько, на мой взгляд неплохих, но не гибких, реализаций третьего. Из это сразу вытекает следствие что луа песочницей, алго в квике не ограничиваяется, появляются разного рода решения квик+внешнее приложение, ну а там рукой подать до внешнее приложение без Квика. Но опять же повторюсь, как мелкотравчатая автоматизация для не программистов Квик очень и очень хорош. А как мы понимаем, подавляющее большинство пользователей Квика, программистами не являются!
Заставили вы меня погуглить эти новомодные «data science, feature selection» and so on. )))) Вы сам, случайно, не из этой сферы?
Интересно смотреть, как обычные этапы исследовательской работы выделяются в новые отдельные направления и сопутствующие им профессии. Ну, это так — возрастное, не обращайте внимания. ))) Я, кстати, не являюсь профессиональным программистом.
А теперь по сути.
Начну с «big data». Какие огромные массивы данных имеются ввиду в нашем случае? Если мы говорим об историческом периоде (ретроперспективе) — то необходимость существенно длительного отступа назад по интервалам — весьма сомнительна. Грубо говоря, для торговли в марте 2021 года вряд ли вам действительно требуются данные за январь 1921 года. Другой вариант — желание связать динамику показателей разных активов. Но количество таких активов в разумном подходе ограничено. Более того, если есть связь динамики показателей разных активов, то ее проще учитывать явно — численно.
Потребность в огромных массивах может возникнуть в случае использования в качестве исходных данных для нейросети банально ВСЕГО ДОСТУПНОГО НАБОРА ИНФОРМАЦИИ. Этот случай я оставлю без комментариев, хотя хочется сказать, что это тупиковый путь на нынешнем этапе.
Насчет способов обработки данных. По моему убеждению, способ обработки (подготовки) данных выбирается исходя из метода решения задачи (т.е. расчетный численный метод). Если бы существовало точное решение задачи трейдинга, то можно было бы говорить о том, что в торговом терминале это решение надо представить набором стандартных способов решений, отличающихся методами численного решения (как индикаторы представлены, например). Но такого точного решения не существует. Обычно в алготрейдинге используют свое численно выраженное решение. При этом, используемое решение является лишь решением частного случая задачи трейдинга. Или вообще используют какую-то найденную взаимозависимость (неэффективность). А вот если метода решения задачи у исследователя вообще нет, то и возникает потребность в разных способах обработки данных — опять мы попадаем на случай использования нейросетей. Случай, когда одновременно используется несколько численных методов решений мне представляется нерациональным.
К квику у меня тоже много вопросов. В первую очередь, мне не нравится как устроена в квик+луа работа с заявками… Такое ощущение, что его писали посменно несколько программистов, которые еще и не всегда общались между собою ))) К сожалению, мне квик сравнить не с чем — банально на других терминалах не работал.
Пока мне удается оставаться в рамках «квик+луа», не используя внешние приложения.
Что же касается алго инфраструктуры, то обычно путь развития выглядит примерно так:
Квик+луа
Квик луа и стороннее приложение. Или уход от квика на алтернативы типа метатрейдера тслаба, стокшарпа, и прочая прочая. Сюда же наверное можно добавить доступ через сервера брокера своим или сторонним приложением.
Прямой доступ к бирже через интернет, плаза на фортс. Это уже требует небольшой ежемесячной платы. Тут как свое приложение может быть так и стороннее.
Аренда брокерской железки в зоне колокаций, свой или чужой софт.
Ну и самый дорогой вариант колокация своего железа и софта на бирже.