Избранное трейдера protorus

по

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


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

Про ботов в телеге здесь  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


( Читать дальше )
  • обсудить на форуме:
  • QUIK

Индикатор разницы объемов по положительным и отрицательным барам

Индикатор разницы объемов по положительным и отрицательным барам
--[[
MA volumn up down
--]]
Settings=              
        {                          
            Name = "MAV2_m",   -- indicator name
            per=10,               -- period			
            line=                                     
                {                               
                    {  
                        Name = "MA",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,0)
                    },
					{  
                        Name = "MA2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,255)
                    }	
                }
       }


function Init()   
  mav1 = {}
  mav2 = {}  
  return 2
end


function OnCalculate(index)
  
  per = Settings.per
  
  if index > 1 then 
    curv = C(index)
    prevv = C(index-1)	
  else 
    curv = C(index)
    prevv = C(index)	
  end   
 
  if curv - prevv > 0 then 
    if index > 1 then 
      mav1[index] = mav1[index-1] + V(index)
	  mav2[index] = mav2[index-1] 
    else 
      mav1[index] = V(index)  
	  mav2[index] = 0
    end    
  else 
    if index > 1 then 
	  mav1[index] = mav1[index-1]
      mav2[index] = mav2[index-1] + V(index)
    else 
	  mav1[index] = 0
      mav2[index] = V(index)  
    end 
  end 
  
  if index > per then
    vv1 = mav1[index] - mav1[index-per]
	vv2 = mav2[index] - mav2[index-per]
  else 
    vv1 = 0
	vv2 = 0
  end   

  return 0, vv1 - vv2

end

MAV2 индикатор объемов положительных и отрицательных баров

MAV2 индикатор объемов положительных и отрицательных баров
--[[
MA volumn up down
--]]
Settings=              
        {                          
            Name = "MAV2",   -- indicator name
            per=10,               -- period			
            line=                                     
                {                               
                    {  
                        Name = "MA",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,255)
                    },
                    {  
                        Name = "MA2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0,0)
                    }						
                }
       }


function Init()   
  mav1 = {}
  mav2 = {}  
  return 2
end


function OnCalculate(index)
  
  per = Settings.per
  
  if index > 1 then 
    curv = C(index)
    prevv = C(index-1)	
  else 
    curv = C(index)
    prevv = C(index)	
  end   
 
  if curv - prevv > 0 then 
    if index > 1 then 
      mav1[index] = mav1[index-1] + V(index)
	  mav2[index] = mav2[index-1] 
    else 
      mav1[index] = V(index)  
	  mav2[index] = 0
    end    
  else 
    if index > 1 then 
	  mav1[index] = mav1[index-1]
      mav2[index] = mav2[index-1] + V(index)
    else 
	  mav1[index] = 0
      mav2[index] = V(index)  
    end 
  end 
  
  if index > per then
    vv1 = mav1[index] - mav1[index-per]
	vv2 = mav2[index] - mav2[index-per]
  else 
    vv1 = 0
	vv2 = 0
  end   

  return vv1, vv2

end

QLua скринер стакана. Или стакан к празднику!

Всем привет, и желаю здравствовать!
Вчера один наш коллега попросил решить простенькую задачу — отображать стаканный спред в моменте, то есть (best_ask_price+best_bid_brice)/2 с помощью луа-скрипта. Вот такой был диалог:
QLua скринер стакана. Или стакан к празднику!
Чего уж проще, выдался час свободного времени решил помочь. Но походу разработки, пришли идеи сделать, что-то типа скринера стакана с дополнительной информацией, которая, возможно будет полезна для анализа.
А идеи возникли следующие: добавить для мониторинга объем всех бидов и асков, разницу (дельту) между объемами покупок и продаж. Но это можно теперь наблюдать даже на графике в Квике(не прошло и 15-ти лет). А вот следующая идея показалась мне интересной. Рассчитывать в моменте VWP (Volume Weighted Price) цену взвешенную на объем для бидов и асков по отдельности. Чтобы было понятно о чем идет речь покажу это на примере стакана в Jatotrader для RIZ0:
QLua скринер стакана. Или стакан к празднику!

( Читать дальше )

Логгер крупных сделок

Неожиданно, сделал удобный для себя инструмент мониторинга за рынком. Простой логгер. При запуске подгружает всю таблицу обезличенных сделок за весь день и по каждому инструменту ищет крупные сделки которые и отражает в таблице. После загрузки, работает в режиме реального времени, также отражая крупные обезличенные сделки. «Крупные» — это сделки, размер которых в 30-ть раз превышает средний размер сделки по инструменту. Значение коэффициента можно исправить в тексте скрипта.
Логгер крупных сделок

  Выложил, скачать бесплатно можно отсюда: https://кбс.онлайн/soft.html#as10

  • обсудить на форуме:
  • Quik Lua

сальдирование убтков по фьючерсам

всем привет!

есть прибыль по фьбчерсу rtsi-9.20 (код дохода 1532) например 2 млн рублей
но есть и убыток по фьючерсу usd-9.20 (код дохода 1535) например 1 млн рублей

в итоге брокер начисляет налог на сумму 2 млн рублей (вся прибыль по ришке и никак не учитывает убыток по сишке) или 260 тыс рублей

можно ли сальдировать данные истории или как-то получить вычер?


Робот на quik XoraX боковик на lua (обновление 0.1.140 )

    • 03 августа 2020, 23:36
    • |
    • XoraX
  • Еще
Веерная продажа и конфиг для фьючерса SI

Раньше робот умел торговать только в рамках определённого диапазона, купил и сразу же купленные контракты продал.
Мы продумали как сделать так чтобы увеличить профит
Веерная продажа:
Теперь робот понимает, что покупая 4 контракта по цене 40$ он выставит на продажу по цене 40$ + 0.05 центов с шагом 0.05(настраиваемое) на количество контрактов. 
Если робот продал один контракт и цена упала на 0.1$(до 40$), то робот не будет покупать 4 контракта, а купит 1 контракт и вернёт позицию на место. Это увеличивает профит и регулирует риски.
Робот на quik XoraX боковик на lua (обновление 0.1.140 )

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

Робот на quik XoraX боковик на lua (обновление 0.1.140 )

( Читать дальше )

QLua скринер, или то, о чём мечтал Weddy!

Всем, привет!
Мечты сбываются (и не только у Газпрома)! Weddy, надеюсь этим постом я полностью закрываю ваше ТЗ.
QLua скринер, или то, о чём мечтал Weddy!
Суть скринера в вышеизложенном пожелании. Т.к. первый и второй скринеры не удовлетворяли требованиям ТЗ Weddy.
Надеюсь, теперь все ок. Выглядит так:
QLua скринер, или то, о чём мечтал Weddy!

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

QLua скринер. Обновление.

Всем привет!
В продолжение топика «QLua скринер в 10 строк кода. Или „за базар отвечаю“, можно качать обнулённый обновлённый скринер.
Выглядит так в статике:
QLua скринер. Обновление.
А так в динамике.
Если в прошлом скринере отображалось изменение текущей цены от цен закрытия за соответствующее количество торговых сессий (список „срезов“ задается пользователем), то в этом будет две таблицы. Первая таблица — изменение текущей цены от предыдущих хаев (чуть не оговорился...) за N-торговых сессий, вторая — от предыдущих лоёв.
В первой таблице от минимумов выделена строка с длинными ОФЗ. Видно, что минимум цены за 30 торговых сессий был на прошлой сессии.
А во второй таблице, мы видим, что Яндекс и Магнит обновили сегодня свои максимумы за последние 90 торговых сессий.
Таким образом, техзадание (ТЗ) участника тусовки Weddy практически выполнено, остается доделать, как он просил, тот же функционал, только относительно списка заданных дат.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

....все тэги
UPDONW
Новый дизайн