Блог им. Nikitka

Как отправлять сообщения из Квика в Телеграм! И писать в файлик разную дребедень!


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

Про ботов в телеге здесь  https://core.telegram.org/bots
в гугле  куча инфы  и примеров, как чего куда и зачем.


--
--СКРИПТ 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



Код сохранить в обычном текстовом редакторе,  назвать его 1111.lua  помесить в папочку  Quik\Lua script
Код необходимо отредактировать,  подставить ваши данные  из Квика, и ваши данные из телеграмм бота.
Немножко поднастроить,  и можно запускать -))

Код простой, и вполне может являться  пособием  для  начинающих луа писателей.
Первая часть кода, создает файлик, получает и  сохраняет данные  в  файлик, в  папке со скриптом.
Вторая  часть кода, отправляет месседжи в Квик, всплывает окошко квика,  и в  телегу.

Удачи вам, начинающие  луа писатели.



Тимофею,  файлик скрипта  прикрепить не шмогла! Нетути кнопачкав таких!





  • обсудить на форуме:
  • QUIK
  • Ключевые слова:
  • QUIK
★34
48 комментариев
И что именно мы увидим в телеге?
avatar
Igr, что в  коде напишите то и увидите,  в  данном примере, несколько значений по срочному  рынку
Алексей Никитин, ну как пример — этот код ужасен, стоило вынести  саму отсылку то (os.execute) в отдельную функцию, тогда ее легко вставлять в другие свои проекты. 

avatar
Petr S, я буду только за если вы нам  тут напишите пример
Как отравлять сообщения

новичком… 
avatar
Stig, спасибо -))  исправил
Интересен опыт практического применения.
Используете? Зачем?
Дмитрий Овчинников, чтобы всю неделю не  открывать терминал. Самоиграйка  торгует.
Алексей Никитин, 
торгует и торгует. Телеграм то причем здесь? Чего вы туда шлете? 
Дмитрий Овчинников, смотрите код там усе написано, чего куда и кому -))))
Можете свой  код написать, смайлики будет вам  рассылать например -))

удобно, каждый день куча смайликов, настроение позитив -)))
Алексей Никитин, 
вот я удивляюсь публике. Вроде простой вопрос задаешь, а получаешь какие-то странные ответы совершенно о другом. Ну да ладно, не хотите делиться опытом и не надо. 
смотрите код там усе написано
Когда я вижу в коде что-то типа Sleep(1000), дальше уже не смотрю :)
Дмитрий Овчинников, это супер спец защита от квика, а не то вдруг ентот квик вспотеет от скриптовых запросов. 

Дмитрий Овчинников, за ГО смотрю в телеге, чтобы перелимита не возникало )))) а то всяко бывает )))
Алексей Никитин, 
то есть много сообщений отправляете? С самим телеграммом нет проблем при этом? Он, как мне кажется, тоже не очень надежный. 
Дмитрий Овчинников, никаких не замечал тормозов со стороны телеги. Понятно что если слать сотню сообщений то ктож их читать будет. Ну штук 5 в день еще терпимо прочитать. 10 уже перебор. Не интересно читать. Поэтому в файлик пишем часто. А в телегу редко.
Алексей Никитин, 
я не про тормоза, я про то, что сообщение отправили, но не доставили. Или доставили, но не всплыло уведомление и прочие баги.

Сам использую СМС через sms.ru, как оповещение И дублирую сообщением в почту с необходимой информацией.

Отправляю только ошибки, поэтому гарантированно и быстро получить информацию в приоритете.

Единственная проблема этой системы в том, что через sms.ru всего 5 сообщений в день на бесплатном тарифе.
Дмитрий Овчинников, не замечал потерь сообщений в телегу. Спамить не пробовал, может если штук 10 в цикле отправить что то и потеряется, незнаю. Никаких защит непланирую ставит, и контроля доставки тоже. Но не удивлюсь если в телега апи енто есть. Но я даже не стал внешнюю http библиотеку прикручивать, обошелся системным курлом. Но если кто хочет помочь, улучшит мой чуда скрипт без курла, буду рад )))
Дмитрий Овчинников, я через телегу отправляю сообщения (и фото) уже года два. оперативность намного выше чем у смс, теряется намного меньше (вообще особо и не упомню когда терялось последний раз)
avatar
Дмитрий Овчинников, Можете пояснить свое высказывание "… Когда я вижу в коде что-то типа Sleep(1000), дальше уже не смотрю..."?
   В чем вы видите неправоту или вред использования sleep?
   Искренне интересен ответ.

Только напишите еще, что необходимо установить curl на рабочее место.

Плюс постоянно будет мелькать окно терминала, при выполнении команды.

Взаимодейтствовать с внешним миром можно и так github.com/nick-nh/qlua/tree/master/telegramQuik

avatar
nicknh, ну у вас очень модный гитхаб проект. Я как самый новичек в мире, в ентом ничего не понимаю. Вот кое как луа скриптик наковырял. На том ентузиазма и заканчивается
Алексей Никитин, главное не останавливаться. Если решение работает и устраивает, значит оно правильное.
avatar
nicknh, ничего не устанавливал, у моей шлынодс10 усе работает из каропки.  Окошко да мелькает, так кто ж его смотрит ))) там в скрипте и квиковое окошко мелькает. Целых два мелькающих окошка )))
этот скрипт уже полгода работает, без перрыфав и выхадных!!!
Спасибо, здесь не часто делятся практическими наработками. 
Посмотрю сам код — напишу свое мнение дополнительно.
Владимиров Владимир, надо бы у тимофея выпросить луа обменник кодом )))
Алексей Никитин, 
Посмотрел код, правда не запускал. Нормально все. Только для чайников может быть было бы лучше расшифровать ваши переменные «A111» и «A111111» в вызове функции getFuturesLimit?
   И один глупый вопрос )))...  вы, случайно, не связаны с ресурсом quikluacsharp.ru ?  Там есть похожий пример, но на другую тему. В вопросе нет никакого подвоха — банальное любопытство...
Удачи
Владимиров Владимир, я как начинающий  луа писатель, загуглил все что смог -)))
Алексей Никитин, Приятно встретить честного человека. По нынешним временам — не часто удается. 
   Это абсолютно нормально. Смысл изобретать велосипед. 
А комментарии писать в коде — это вообще правильно. Многие ленятся (в том числе — по правде — я в их числе), а потом в своих же кодах по новой разбираться приходится ))) 
Владимиров Владимир, 

Комменты нужны да)
Сам иногда смотрю на свой луа код, написанный несколько лет назад, смотрю 30 сек и потом «чёёё....?» ))))
Приходится вспоминать)
Еще табуляцию люблю четкую делать как на реферат)

avatar
У меня с этим курлом один раз был такой баг. Чернющее окошко всплыло и почему-то зависло и не исчезало само. Обычно оно дольше секунды не висит. А тут всплыло и квик при этом завис вместе с этим окошком… Я пришел, по крестику ткнул, черное окошко исчезло и квик зафурычил, а пока я черное окошко не прибил, квик даже данные не получал и ничаво в этом квике не происходило как бы. После этого бага оставил только запись в файл у себя.
avatar
Sergey Pavlov, окошко всплыло, вы его тыкнули оно встало на паузу. Жмем пробел снимается с паузы. Надо проверить неужто луа застряла при этом и весь квик на паузу поставила. По случаю проверю. У меня квик 8.12
Алексей Никитин, у меня было на 7 квике. Около года он мне в телегу всё это слал. Раз в 5 минут посылка. Каждый раз окошко cmd, само вылезло, само исчезло. Как автомат. Потом смотрю, в телеге уже полчаса как нет сообщений, полез на комп, а там зависший квик и поверх него черное окошко висит, я его закрыл и всё дальше зафурычило. Ладно бы только посылка зависла, но там эта гадость квика через луа подвесила. Может всё это уже неактуально для восьмой версии. 
avatar
Sergey Pavlov, ну 7 квик, энтож доренволюционный.
Тут дажа 8 квик, от версии к версии сильно луа зависим. Паэтаму кто начинает, луча сразу брать самый новый 8.12 квик. Там две луа сразу. Надо самую новую выбирать, понятное дело луу. 
Sergey Pavlov, Можно отключить вывод исполнения командной строки на экран, задавая опцию curl_setopt
curl_setopt — Set an option for a cURL transfer

Description ¶

curl_setopt ( CurlHandle $handle , int $option , mixed $value ) : bool

Sets an option on the given cURL session handle.
CURLOPT_NOPROGRESS :     true to disable the progress meter for cURL transfers
Т.е. задавая curl_setopt "TRUE" мы отключаем индикатор хода выполнения для cURL передач. 

   Правда, сам не пробовал, могу ошибаться. 

Sergey Pavlov, поэтому и нельзя вызывать команды операционной системы из квика)
avatar
bascomo, 
да ну, там же есть Sleep(1000), чтобы 
а не то вдруг ентот квик вспотеет от скриптовых запросов. 
Дмитрий Овчинников, а при чем тут слип? Слип — он про другое. Про гениальное архитектурное решение разработчиков квика)
avatar
Eugene Logunov, я в ентом не понимаю. От смартлап понимаю. У смартлабе все просто, на моем мониторе 32 дюйма, смартлаб узенькая полосочка по центру. Вот у ту полосочку можно писать, и читать. Очень просто все на смартлапе! Правда, видно плохо, слишком узенькая полосочка. И фоточки мелкие всего 500*500. Но я уж привык, скрин делаю, увеличиваю потом смартлап у редакторе на весь экран, и читаю.
Вот сегодня, думал файлик выложить, переименовав его в фоточку. Потом решил не заморачиваться,  просто скопипастил текст скрипта. И что удивительно. Текст поместился в узенькую полосочку целиком. )))
Бомба) Теперь давай торговый скрипт))
avatar
bascomo, торговый скрипт, оно конечно хорошо, но по моему опыту, квик+луа не предназначены для алготорговли. Автоматизация заявок, да реальна. Человек сидит, за всем следит, в нужный момент включает скрипт на набор позы, или на разгрузку позы.
Но что касается маркетдаты и или её анализа, тут у квика боль. Вот и получается что позы, сделки мы свои видим, заявки выставлять можем, как то можем все это контролить в луа. А самого главного-истории маркетдаты считай нет. Ну как бы есть, но считай нет.
И конечно же в самом луа нет никаких методов анализа как в пайтон.
В итоге получаем квиковское луа отличное средство для начинающих, можно всякие окошки всплывать, в файлик писать много всяких данных, сделки позы контролировать. Заявки можно ставить. И да это работает. И вероятно для совсем не программистов, для такого ручного автоматизатора это очень даже подходит.
Но если вы хорошо программируете, и хотите писать полноценное алго, то квик здесь скорее помеха, чем помощник.
Алексей Никитин, Хотел бы обменяться мнениями.
   Вы написали, что "… квик+луа не предназначены для алготорговли...". Алготорговля бывает разной. Для высокочастотного метода — согласен, такая связка не очень подходит, хотя еще важен момент — где географически размещен ваш комп (если в стойке за стеной серверов биржи, то проблем, наверное, не будет). А у вас какие рассуждения на этот счет?
    Еще одно ваше утверждение: "… истории маркетдаты считай нет". Хотел бы прояснить, что конкретно вы имели ввиду.
   В вопросах нет никаких подвохов. Интересует ваше мнение. Кстати, по вашим комментариям вы не очень похожи на «новичка в вопросах программирования» — как вы сами про себя написали ))))
Владимиров Владимир, я конечно не  большой специалист, но попробую мое мнение высказать.
На мой взгляд алго стоит на  трех китах:
    Маркетдата  и видимо не сырая, а вероятно каким то образом предобработаннная. На языке датасайнс — фичи.
    Анализ даты — в первую очередь это инструменты  и технологии анализа, визуализации, тестирования  результата, отбора работающего и тд. Проще говоря фитинг даты, ну или датасайнс -)))
    Исполнение нафиченного алгоритма — в реальности, реализация найденного прибыльного алгоритма на конкретной вариации маркетдаты (фичь) в  боевой среде, с целью получить максимально точное,  а самое главное безотказное (надежное) решение по выставлению заявок, контролю заявок и позиций.

Любой неправильно реализованный элемент из этих трех, либо сильно снижает эффективность найденных стратегий в  бою, либо вообще  не  позволяет найти  хоть что-нибудь действительно работающее.

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

Собственно Квик крайне ограничен в  первом пункте,  полностью отсутствует второй,  ну и есть, аж несколько, на мой взгляд неплохих, но не гибких,  реализаций третьего. Из это сразу вытекает следствие что луа песочницей, алго в квике не ограничиваяется,  появляются разного рода решения квик+внешнее приложение, ну а  там рукой подать до внешнее приложение  без Квика.  Но опять же повторюсь,  как  мелкотравчатая  автоматизация  для не программистов  Квик  очень и  очень хорош. А как мы  понимаем,  подавляющее  большинство пользователей Квика, программистами  не являются!
Алексей Никитин, Спасибо за ответ.
   Заставили вы меня погуглить эти новомодные «data science, feature selection» and so on. )))) Вы сам, случайно, не из этой сферы?
   Интересно смотреть, как обычные этапы исследовательской работы выделяются в новые отдельные направления и сопутствующие им профессии. Ну, это так — возрастное, не обращайте внимания. ))) Я, кстати, не являюсь профессиональным программистом.
   А теперь по сути. 
   Начну с «big data». Какие огромные массивы данных имеются ввиду в нашем случае? Если мы говорим об историческом периоде (ретроперспективе) — то необходимость существенно длительного отступа назад по интервалам — весьма сомнительна. Грубо говоря, для торговли в марте 2021 года вряд ли вам действительно требуются данные за январь 1921 года. Другой вариант — желание связать динамику показателей разных активов. Но количество таких активов в разумном подходе ограничено. Более того, если есть связь динамики показателей разных активов, то ее проще учитывать явно — численно.
   Потребность в огромных массивах может возникнуть в случае использования в качестве исходных данных для нейросети банально ВСЕГО ДОСТУПНОГО НАБОРА ИНФОРМАЦИИ. Этот случай я оставлю без комментариев, хотя хочется сказать, что это тупиковый путь на нынешнем этапе.
   Насчет способов обработки данных. По моему убеждению, способ обработки (подготовки) данных выбирается исходя из метода решения задачи (т.е. расчетный численный метод). Если бы существовало точное решение задачи трейдинга, то можно было бы говорить о том, что в торговом терминале это решение надо представить набором стандартных способов решений, отличающихся методами численного решения (как индикаторы представлены, например). Но такого точного решения не существует. Обычно в алготрейдинге используют свое численно выраженное решение. При этом, используемое решение является лишь решением частного случая задачи трейдинга. Или вообще используют какую-то найденную взаимозависимость (неэффективность). А вот если метода решения задачи у исследователя вообще нет, то и возникает потребность в разных способах обработки данных — опять мы попадаем на случай использования нейросетей. Случай, когда одновременно используется несколько численных методов решений мне представляется нерациональным.
   К квику у меня тоже много вопросов. В первую очередь, мне не нравится как устроена в квик+луа работа с заявками… Такое ощущение, что его писали посменно несколько программистов, которые еще и не всегда общались между собою )))   К сожалению, мне квик сравнить не с чем — банально на других терминалах не работал.   
   Пока мне удается оставаться в рамках  «квик+луа», не используя внешние приложения. 
Владимиров Владимир,  Про биг дату, в  нашей  области  данные конечно гиганские по размеру, например один день ордерлога фортс около 5  гигов, на фонде еще 5. и тд. Но несмотря  на  размер это не тянет на настоящую бигдату. Наши данные  слишком однообразны. Грубо говоря, у нас есть данные  про муровейник, но совершенно нет данных, про полянку, деревья, облака, погоду, мимоидущегочеловека,  пожар в  соседнем лесу, и тд и тп. С этой  точки  зрения биржевые данные бигдатой не являются.
 
Что же  касается алго инфраструктуры,  то обычно путь развития  выглядит примерно так:
Квик+луа
Квик  луа  и стороннее приложение.  Или уход от квика на  алтернативы  типа  метатрейдера тслаба, стокшарпа,  и прочая  прочая. Сюда же наверное можно добавить доступ через сервера брокера своим или сторонним приложением.
Прямой доступ к  бирже через интернет, плаза на  фортс. Это уже требует небольшой  ежемесячной платы. Тут как свое приложение может быть так  и стороннее.
Аренда брокерской железки в зоне колокаций, свой или чужой софт. 
Ну и самый дорогой  вариант колокация своего железа и софта на  бирже. 

Алексей, добрый день! а как можно с Вами связаться?
avatar

теги блога Алексей Никитин

....все тэги



UPDONW
Новый дизайн