СергейК

Читают

User-icon
24

Записи

18

Улучшение внешнего вида некоторых таблиц на новом Rusbonds через расширение для Хрома

Не знаю, как на смартфонах, но на обычном компе в новом Rusbonds.ru таблицы с купонами, офертами и пр. частенько показываются с горизонтальной прокруткой, что не очень удобно. Конечно, это зависит от ширины монитора, ну моего не хватает. Плюс к тому там листание по 15 и столбец с примечанием с правого края, так что интересная информация по ставке купонов и офертам сложно доступна — надо кликать на иконке в правом нижнем углу, для чего надо прокручиваться бог знает куда. Когда-нибудь они это исправят, а пока что я, пользуясь расширением для Хрома «User Javascript and CSS», написал некий код, к-й эту ситуацию частично исправляет. Я уже ранее использовал это расширение для улучшения этого сайта и других, о чём писал. Изначально таблица с купонами выглядит как-то так:
Улучшение внешнего вида некоторых таблиц на новом Rusbonds через расширение для Хрома

Это пример с вот этой страницы. Вообще там желательно логиниться, но конкретно это можно посмотреть и так. После оптимизации таблица выглядит так:

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

Как получить квала по активам в ВТБ за счёт квала в Открытии брокер

В ОБ я квал и большинство рублёвых облигаций там, но всё же в ВТБ тоже что-то иногда покупаю, так что квал не помешает. Пришёл в ВТБ, сказали, что нужна выписка из депозитария, не старее, чем 3 дня. Ок, сделал в ОБ, привёз. Говорят надо, чтобы дата была либо сегодня, либо вчера, про 3 дня неправильно. И ещё, в выписке только Фио и № счёта, паспортных данных нет, пусть добавят.

Попытка №2. Получаю ещё 1 выписку. Вообще в ОБ не так просто получить свежую выписку, в лучшем случае это будет сегодня вечером за вчера. Так что остаётся только вечер, успеть сложно, но можно. Ок, мне в ОБ даже подсказали подъехать в их специальный офис на Курской, там я взял выписку, а через речку ВТБ, так что я успел за 15 минут до 19 часов : ).

Поговорили, оказалось, что это не подходит, т.к. в выписке слишком много позиций, сложно всё посчитать. С этим спорить сложно, надо было мне сделать не все позиции, а только 4 главные. Зато выяснилось, что бумажку можно не получать, достаточно скана – а ОБ скан тоже присылает. Сотрудница (Эльвира, чей-то отзыв) очень доброжелательная, дала свою визитку.



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

Ссылки на внешние сайты без подтверждения

Если для просмотра этого сайта вы пользуетесь компьютером (а не смартфоном), и у вас браузер Хром, и вам не нравится каждый раз подтверждать переход по внешним ссылкам (как мне), то вы можете установить расширение Хрома "User JavaScript and CSS" (для Firefox аналог возможно тоже есть, не в курсе) и сделать с помощью него настройку для сайта smart-lab.ru, содержащую указанный ниже код на javascript. Он перехватывает клики на ссылках и меняет адрес ссылки так, чтобы сразу попасть на внешний сайт, без страницы подтверждения. Есть промежуточный вариант, в к-м нужно раскомментировать переменную WhiteHosts, содержащую список доверенных доменов. В этом варианте переходы только на эти домены не будут требовать подтверждения, а на все остальные будут. Конечно, если вы убираете подтверждение, вся ответственность за переходы на какие-то зловредные сайты будет на вас. 

//WhiteHosts='moex.com cbr.ru banki.ru youtube.com vk.com facebook.com';

function FixLinksMD(e){
var o=e.srcElement; 

if (o.tagName!='A' || o.pathname!='/r.php') return;
var pos1, pos2, s=o.search, href, M, dmn;

pos1=s.indexOf('u='); if (pos1==-1) return;
pos1+=2; pos2=s.lastIndexOf('&s='); if (pos2==-1) pos2=s.length; 

href=decodeURIComponent(s.substring(pos1, pos2));

if (window.WhiteHosts){
	M=href.match('https?://([^/]+)');
	if (M){
		dmn=M[1];
		if (dmn.substr(0, 4)=='www.') dmn=dmn.substr(4);
		
		if (!WhiteHosts.match("\\b"+dmn+"\\b")) return;
		}
	}

o.href=decodeURIComponent(href);
}

document.body.addEventListener('mousedown', FixLinksMD, false);


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

Открытие брокер: Программа лояльности: подарочные карты 5ки

Писал о плохом, надо писать и о хорошем. А то получается, чуть что — сразу «говноброкер», а когда всё нормально, отзывы не пишут, создаётся ложное впечатление. 

Есть у ОБ такая программа, как я понял, толком она заработала с декабря 2020, раньше хоть и была, но баллов я не видел. Там начисления разных типов, просто Bonus Back (кэшбэк), раз в год за весь год, после дня рождения — 1 месяц 50% кэшбэк за все сделки и т.п. В общем, я подождал месяц после ДР, чтобы побольше стало, и дальше эти баллы можно поменять на что-то. Там в каталоге есть много всяких товаров, но это всё не вариант, потому что когда тебе что-то надо, ты просто берёшь и это покупаешь, не ждёшь, пока накопятся баллы. И ты выбираешь лучший товар по лучшей цене, а не тот ограниченный список, к-й тебе покажут за бонусы. Поэтому для меня вариант — это только подарочные карты. Там есть разные магазины, но как я понял по описанию, реально использовать только карты 5ки, потому что у других (Перекрёсток / ВкусВилл / Озон) есть дурацкие ограничения типа можно использовать только 1 раз, а если сумма покупки меньше номинала карты, то остаток сгорает или (Перекрёсток) при оплате нужно назвать какой-то заветный код, к-й не так-то просто и получить, если ты купил карту не сам, да и вообще неудобно. 

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

Автологин для квика на javascript

Надоело логиниться в квик каждый день по 10 раз, всё время за логином-паролем лазить в файл и копипастить. Сделал скрипт, к-й это автоматизирует. Работает на javascript, так что от версии Windows зависеть не должно.

Сам скрипт кладётся в файл типа C:\Util\Js\Q.js или куда угодно, только не у всех на виду. На этот скрипт делается ярлык, он кладётся на рабочий стол куда-то в угол, и ему прописывается горячая клавиша типа Ctrl-Alt-X или любая другая буква. После этого вы запускаете квик, появляется окно логина, нажимаете Ctrl-Alt-X и через полсекунды оно срабатывает. Важно, что ярлык должен быть на рабочем столе, иначе горячая клавиша не работает. 

Вообще вводить данные в другую программу можно двумя способами: copy&paste и эмуляция клавиш. Я в данном случае пошёл по второму пути, хотя и первый тоже реализуем и даже чем-то лучше, т.к. там не надо парится с языком. Из-за этого, если вы хотите использовать этот скрипт, нужно проверить ряд моментов и при необходимости внести исправления. 

⦁ В варианте, к-й я выкладываю, логин/пароль должны быть прописаны прямо в скрипте, но можно и читать из файла. У меня дома рабочий вариант вообще ищет их в rtf-файле где много всяких данных. Если логин/пароль положить во внешний файл, то их можно конечно и закодировать. 
⦁ Чтобы отработало правильно, надо чтобы текущий язык ввода (по сути язык ввода по умолчанию в системе) в квике был русский. Если это не так, то вначале надо поменять bEngSystem=true
⦁ У меня логин русский, а пароль английский, так что между ними производится переключение клавиатуры. Если у вас что угодно из этого не так, надо в нужных местах убрать или добавить переменную LangSwitch, к-я содержит клавиши «Alt-Shift». Если у вас опять же язык переключается по-другому, там надо прописать другие клавиши.
⦁ У меня вводится и логин и пароль. Если у вас вводится только пароль, то поменять тоже нужно и не сложно. 

В общем, можно было бы написать более универсальную версию, чтобы определяеть, когда надо переключать языки автоматом, но мне не нужно, а кому надо разберутся. Или же можно переписать через copy&paste. Делать полностью автоматизированный логин, когда вообще ничего нажимать не нужно я не хочу, потому что тогда любой, кто получит доступ к вашему компьютеру сможет получить доступ и к вашим деньгам, просто кликнув на квике. Так хоть комбинацию клавиш знать надо. 

bEngSystem=false; //язык системы по умолчанию
LangSwitch="%+!";

WshShell=WScript.CreateObject("WScript.Shell");
InitKeys();
KeysSeq=GetData();
if (KeysSeq) EnterData(KeysSeq);

//------------------------------------------------------------------------

function GetData(){
//(Возможно) читаем данные из файла и преобразуем в последовательность клавиш
//"!" означает паузу для специальных клавиш, к-е требуют время обработки
var DataFN, oStream, Data, Pos1, Pos2, Line;

if (0){ //данные в файле
	DataFN='C:/...';
	FSO=new ActiveXObject("Scripting.FileSystemObject"); 
	oStream=FSO.OpenTextFile(DataFN, 1); Line=oStream.ReadAll(); oStream.Close();
	}
else Line='имя:password';

//Tab должен быть и вначале, потому что при фокусировке квика текущее поле - список серверов
Line="{Tab}!"+Line.replace(/:/g, "{Tab}!"+LangSwitch); 
//Переключение языка в самом начале если логин русский
if (bEngSystem) Line=LangSwitch+Line; 
//конвертация русских символов
Line=Line.replace(/[А-Яа-я]/g, RusCB);

return Line;
}

function EnterData(KeysSeq){
var ret;

WScript.Sleep(300); //Пауза позволяет убрать руки от клавиатуры до того, как скрипт начал работать

ret=WshShell.AppActivate("Идентификация пользователя"); if (ret==0) return;
WScript.Sleep(100); 

aSeq=KeysSeq.split('!');
for(var i=0; i<aSeq.length; i++){
	Seq=aSeq[i]; 
	if (Seq!=''){
		WshShell.SendKeys(Seq); WScript.Sleep(100); 
		}
	}

WshShell.SendKeys("{Enter}");
//WshShell.SendKeys("%+"); WScript.Sleep(100); //switch to Russian
//WshShell.SendKeys("{Tab}"); WScript.Sleep(100); 
//WshShell.SendKeys("^V"); WScript.Sleep(100); //paste
}

function RusCB(s){
var n, ch, i;

if (s.length==1){
	ch=s;
	}
else{ //rtf
	//код символа в Ansi
	s=s.substr(2); n=parseInt(s, 16); ch=String.fromCharCode(n);
	}

//Преобразовать в Utf и найти в русских клавишах
i=RusKeys.indexOf(Ansi2Utf(ch));
//Найти соотв. латинскую клавишу
return LatKeys.charAt(i);
}

//------------------------------------------------------------------------

function Ansi2UtfN(Code){
if (Code>=192 && Code<=255) Code+=848;
else if (Code==168) Code=1025; else if (Code==184) Code=1105;
return String.fromCharCode(Code);
}

function Utf2AnsiN(Code){
if (Code>=1040 && Code<=1103) Code-=848;
else if (Code==1025) Code=168; else if (Code==1105) Code=184;
return String.fromCharCode(Code);
}

function Ansi2Utf(Str, bRev){
var Buf='', Ch, Res='', c=0, L, n, f;

L=Str.length; f=(!bRev ? Ansi2UtfN : Utf2AnsiN);
for(n=0; n<L; n++){
	Ch=Str.charCodeAt(n); Buf+=f(Ch); c++;
	if (c>=100){Res+=Buf; Buf=''; c=0;}
	}
return Res+Buf;
}

//------------------------------------------------------------------------

function alert(S){WScript.Echo(S);}

function InitKeys(){
//Проблема в том, что влияет текущий язык в той программе!
//Можно нажимать только английские клавиши. Если надо нажимать русские, надо вычислить какие им соответствуют английские
RusKeys="йцукенгшщзхъфывапролджэячсмитьбю"; LatKeys="qwertyuiop[]asdfghjkl;'zxcvbnm,.";
RusKeys=RusKeys+RusKeys.toUpperCase(); LatKeys=LatKeys+LatKeys.toUpperCase();
}

Есть другие решения: Автологин для Quik 8 x64.
  • обсудить на форуме:
  • QUIK

ЛДВ с корпоративными еврооблигациями стоимостью больше 100%

Есть неочевидный аспект, вызванный валютной переоценкой. Не знаю, как у других, но у меня было ложное впечатление, что если ты держишь бумаги 3 года, ЛДВ спасает и от прибыли от разницы цен погашения и покупки, и от валютной переоценки. И тогда доходность к погашению с учётом налога можно грубо посчитать как TaxYtm=Ytm*0,87 (Ytm — просто доходность к погашению). Это так потому, что налогом облагаются купоны, и это работает для рублёвых облигаций, а также для государственных еврооблигаций. 

Но если цена облигации выше 100%, а таких большинство, то при погашении возникает убыток, к-й может сальдироваться с другой прибылью и тем самым косвенно повышать доходность. Этот убыток при погашении является важной частью итоговой доходности. Из-за того, что он вступает в силу позже, итоговая доходность всё же несколько снижается, но не существенно. Однако, в зависимости от цены/срока до погашения конкретной бумаги, валютная переоценка за счёт увеличения финреза в рублях может частично или полностью отменять его эффект, т.о., негативно влияя на доходность с учётом налога. Важно, что это увеличение финреза не контролируется ЛДВ, т.к. общий финрез остается отрицательным, а ЛДВ применимо только к положительному.



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

Открытие брокер: еврооблигации с плечом

Да не обидится на меня брокер, ведь в конце концов мне всё выплатили и даже немного компенсировали их косяки, но мне хочется поделиться опытом.

Итак, с 15.08.2018 у них появилась возможность покупать сабж. Косяки начались сразу: со всех, у кого были Rus-28 (и кажется Единый брокерский счёт) начали брать комиссию «Предоставление информации по риск-поддержке открытой позиции», с меня лично около 2200р в день. Эта комиссия относится к СР, на к-м я ничего не делал и, если посчитать через 20%, то получалось, что у меня была нехватка ГО в районе 6 лимонов. Глюк начался с четверга 16.08, в пятницу я про него сообщил, а в Пн 20.08 его исправили и все деньги вернули, но за те выходные я изучил тарифы и регламент намного лучше, чем до этого, а ночью мне плохо спалось. Казалось, что они так и будут списывать у меня эту комиссию и так все деньги и спишут. 2-й раз этот глюк вылез уже в конце октября, предположительно при обновлении системы из-за исправления другого глюка, но исправили в тот же день.



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

Доходность к погашению (Yield to maturity, YTM)

Давно хотел понять, что такое доходность к погашению, но всё никак руки не доходили. Одно дело, когда тебе квик/сайт ММВБ показывает какое-то число, типа 5.25%, и вроде оно и должно быть правильным, но что за этим стоит? И что это означает на практике? В инете есть сложные формулы доходности, и (если сможешь разобраться) они вроде считают приблизительно то же самое, но, опять же, почему они именно такие, как они получены? Хочется, чтобы этот процент, какой бы он ни был, можно было напрямую сравнивать со ставками банковских вкладов, потому что это просто и понятно.

Зачем нужно уметь считать доходность самому? 

  1. Чтобы проверить, что она на самом деле такая.
  2. Чтобы учесть налог на купон для корпоративных бумаг, т.к. в квике он не учитывается.
  3. Чтобы учесть комиссию.
  4. Чтобы посчитать доходность для бумаг, по к-м нет торгов на бирже (есть на внебирже) и поэтому в квике показывается 0.
  5. Можно посчитать для любой цены или даты.

Сразу скажу, что самый простой способ посчитать доходность – это использовать функцию ДОХОД в Excel. Для примера я буду использовать еврооблигацию GAZPR-34 на 10.01.18 с ценой 137.5 и НКД 17,7292. В данном случае ф-я ДОХОД получает 4,284% (тут учитывается налог), но при этом она требует очень мало параметров:



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

теги блога СергейК

....все тэги



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