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

по

Ошибка «Не хватило памяти под объекты» (Quik)

Всем привет)

Может кому пригодиться.
Вот столкнулся сейчас с этой проблемкой… да… это не ново, такое уже когда-то бывало у меня… давно… так что, ничего страшного, никакой паники или растерянности.
Но сейчас был интересный нюанс)
Поэтому напишу обо всем, возможно кому и пригодится.

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

Во-первых, я, конечно, по классике этого случая, сперва удалил все файлы «*.log» и «*.dat» ( вообще пишут, что при этом не надо удалять файл «metastock.dat», но у меня его и не было...)
Заодно удалил и все файлы «wnd» из папки «WNDSAV», кроме последнего.
(естественно и очистил папку «archive» от файлов «dat»)

Уже этого может быть достаточно для того, чтобы Квик запустился...

Запускаю — программа открылась, ввожу пароль… есть соединение… приходит СМС… ввожу СМС… и бац — снова вылетела эта табличка. Облом…

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

Как легально вывести деньги с ИИС, не ломая его (без регистрации, СМС и костылей). Лайфхак!!!

Тема поста в заголовке, поэтому без лишней воды приступим.

Вводные данные:
— у вас открыт ИИС. Тип вычета А (т.е. возвращаем НДФЛ со взносов)
— в договоре с брокером вы указали, что получаете дивы и купоны на свой банковский!!! отдельный!!! счет (не ИИС).

Что делаем:
Шаг 1: загоняем деньги на ИИС.
Шаг 2: покупаем на ту сумму, что нужно вывести, облиги ВЭБа с ближайшей датой погашения.
Важно: не ближайшая дата выплата купона, а ближайшая дата погашения. Т.е. последняя выплата  = последний купон + номинал.

Шаг 3: ждем дату погашения, получаем последний купон и номинал облиги на свой банковский счет.

Что за хрень спросите вы? Объясняю.

В прошлом году я заметила, что номиналы по облигам ВЭБа при погашении мне приходят на банковский счет. Хотя все другие облиги погашаются так: купоны на банковский, номинал возвращается на ИИС. Но только не ВЭБ.

Справедливо рассудив, что такая петрушка не понравится налоговому органу и мне могут завернуть вычет, да еще и попросят вернуть предыдущие, я запулила вопрос в суппорт брокера и выяснилось следующее.

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

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


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

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

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

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