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

по

Простой дивидендный индекс, обгоняющий S&P 500 по доходности (Dow Jones High Yeld Select 10 Index (MUT))

    • 26 марта 2021, 18:59
    • |
    • d4ni3l
  • Еще
Привет, смарт-лаб! Мой первый пост!

Разбирался с индексами и ETF. Хотелось найти что-то довольно простое и эффективное на рынок США, что можно было бы не сложно собрать на долгосрок неквалу, и что создавало бы денежный поток. Конечно, в первую очередь в голову приходят ЕТФы на SP500 (FXUS, VTBA), и индекс Dow Jones Industial Average. Но ЕТФы не платят дивиденды и имеют комиссию, собрать DJI на СПБ теперь возможно, но будет стоить около 5000$ (или 4500$ на 90% индекса).
Нашел интересное ответвление индекса Dow Jones, основанное на выборке из 10 компаний «Dow Jones High Yeld Select 10 Index», тикер MUT (price) и MUTR (total return). 
Состав индекса найти не удалось, но по открытой документации можно рассчитать какие в нем находятся компании. Что и будет сделано в топике.

Страница индекса:
www.spglobal.com/spdji/en/indices/strategy/dow-jones-high-yield-select-10-index/#overview

Сравнение динамики total return с SPXTR и DJITR после мирового кризиса 2008 года
Простой дивидендный индекс, обгоняющий S&P 500 по доходности (Dow Jones High Yeld Select 10 Index (MUT))

Неплохо! Всего лишь 10 акций, которые значительно обгоняют SP500!

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

Автологин для квика на 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

Добавь в свою торговлю Telegram-Контроль

Добавь в свою торговлю Telegram-Контроль

 Quik
TelegramMessenger

Цель:

Оперативное информирование трейдера о событиях в его торговом терминале Quik.

Что умеет:

Посылать сообщения из  Quik трейдеру в Telegram, а так же получать от трейдера и вводить в Quik  пароль и  Pin-код.

 

Функции Quik Telegram Messenger

 Отправляет сообщения трейдеру из Quik в Telegram на смартфон и на компьютер в любую точку мира

 Сообщает о потере и восстановлении связи с сервером Quik

 Сообщает об изменениях позиций инструментов в портфеле:

  • акции, облигации фондового рынка,
  • фьючерсы срочного рынка,
  • опционы

 Сообщает о деньгах и дневной прибыли по счетам

 Авто-Логин  Quik и ввод PIN-кода Quik через Telegram

 Гибкая настройка режима работы, режим ночного сна



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

для торгующих на СПб

я уже упоминал ранее что отфильтровал ВСЕ бумаги торгующиеся на спб по критериям — цена и перспективы
цена — от пары долларов до сотни.
перспективы — всё то что не падает годами, не продолжало падать после марта прошлого года, не продолжало 
падать после ноября прошлого года

фильтровал то что втб даёт торговать ( а он даёт не всё что есть на спб )

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



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

Данные из QUIK в Python. Построение Дельта графика.

Данные из QUIK в Python. Построение Дельта графика.Построение нестандартных графиков в Python при помощи библиотеки finplot.
Можно строить почти любые нестандартные графики: Range, Renco, Delta.
В качестве примера скрипт для построения Дельта графика.
График строиться с момента запуска по поступающим данным из таблицы обезличенных сделок.
Для получения данных из КВИКа используется PythonServer Евгения Шибаева (огромное спасибо автору!!!)

Тапками не кидайтесь, программировать только учусь.

# В КВИКе запускаем луа-скрипт QuikLuaPython.lua
import socket
import threading
from datetime import datetime, timezone
import pandas as pd
import finplot as fplt

fplt.display_timezone = timezone.utc


class DeltaBar():
    def __init__(self):
        self.df = pd.DataFrame(columns='date_time open high low close delta delta_time_sec'.split(' '))
        self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0]

    def parser(self, parse):
        if parse[0] == '1' and parse[1] == 'RIH1':
            if abs(self.df.iloc[len(self.df) - 1]['delta']) >= 500:
                self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0]  # Добавляем строку в DF

            self.df.iloc[len(self.df) - 1]['close'] = float(parse[4])  # Записываем последнюю цену как цену close бара

            if self.df.iloc[len(self.df) - 1]['date_time'] == 0:
                self.df.iloc[len(self.df) - 1]['date_time'] = \
                    datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f").replace(microsecond=0)

            if self.df.iloc[len(self.df) - 1]['open'] == 0:
                self.df.iloc[len(self.df) - 1]['open'] = float(parse[4])

            if float(parse[4]) > self.df.iloc[len(self.df) - 1]['high']:
                self.df.iloc[len(self.df) - 1]['high'] = float(parse[4])

            if (float(parse[4]) < self.df.iloc[len(self.df) - 1]['low']) or \
                    (self.df.iloc[len(self.df) - 1]['low'] == 0):
                self.df.iloc[len(self.df) - 1]['low'] = float(parse[4])

            if parse[5] == '1026':
                self.df.iloc[len(self.df) - 1]['delta'] += float(parse[6])

            if parse[5] == '1025':
                self.df.iloc[len(self.df) - 1]['delta'] -= float(parse[6])

            self.df.iloc[len(self.df) - 1]['delta_time_sec'] = \
                datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f") - \
                self.df.iloc[len(self.df) - 1]['date_time']
            self.df.iloc[len(self.df) - 1]['delta_time_sec'] = self.df.iloc[len(self.df) - 1]['delta_time_sec'].seconds


def service():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1', 3587))  # Хост-этот компьютер, порт - 3587
    while True:
        res = sock.recv(2048).decode('utf-8')
        if res == '<qstp>\n':  # строка приходит от клиента при остановке луа-скрипта в КВИКе
            break
        else:
            delta_bar.parser(res.split(' '))  # Здесь вызываете свой парсер. Для примера функция: parser (parse)
    sock.close()


def update():

    df = delta_bar.df
    # Меняем индекс и делаем его типом datetime
    df = df.set_index(pd.to_datetime(df['date_time'], format='%Y-%m-%d %H:%M:%S'))
    # print(delta_bar.df)

    # pick columns for our three data sources: candlesticks and TD
    candlesticks = df['open close high low'.split()]
    volumes = df['open close delta_time_sec'.split()]
    if not plots:
        # first time we create the plots
        global ax
        plots.append(fplt.candlestick_ochl(candlesticks))
        plots.append(fplt.volume_ocv(volumes, ax=ax.overlay()))
    else:
        # every time after we just update the data sources on each plot
        plots[0].update_data(candlesticks)
        plots[1].update_data(volumes)


if __name__ == '__main__':
    delta_bar = DeltaBar()
    # Запускаем сервер в своем потоке
    t = threading.Thread(name='service', target=service)
    t.start()

    plots = []
    ax = fplt.create_plot('RIH1', init_zoom_periods=100, maximize=False)
    update()
    fplt.timer_callback(update, 2.0)  # update (using synchronous rest call) every N seconds

    fplt.show()
  • обсудить на форуме:
  • QUIK

Третья простая модель на вход в моей торговле

Эту модель встречал у разных авторов. Одни называют ее Усилие, другие — Импульс, третьи — Моментум и т.д. Я буду называть ее Усилие.

Сама модель может состоять из одного бара, двух или трех баров для 5 мин таймфрейма. Главное — увидеть сильное движение цены на объеме.


1. Торговля в рендже

Третья простая модель на вход в моей торговле

Третья простая модель на вход в моей торговле

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

Снижаться будем 2-3 года

    • 28 октября 2020, 22:29
    • |
    • GOLD
      Популярный автор
  • Еще
Друзья, не спешите набивать портфель, увидев падение на -3%.

Высока вероятность, что люди, контролирующие финансовую систему США, будут действовать так же, как в предыдущие 2 раза за последние 20 лет. Последствия пропаганды коронавирусной опасности позволят им провести очередное изматывающее снижение рынка с целью скупки бумаг. Далеко не каждый инвестор выдержит такое нудное, медленное, беспросветное снижение в течении 2-3 лет:

Снижаться будем 2-3 года

Даже самые упёртые начнут продавать. После этого, рынок «сам собой» начнет расти… но уже в пользу новых владельцев бумаг. Летом я уже писал об этом. Но повторить не помешает.

Задайте себе вопрос:

Вы готовы к 2-3-летнему снижению цен?

Цены могут вернутся на прежние уровни только через 7-8 лет. Вы их тупо потеряете.

Драгметаллы на Мосбирже

    • 31 июля 2020, 18:35
    • |
    • Mr. A
  • Еще
Драгметаллы на МосбиржеЯ уже как-то писал, что в своё время повёлся на армагеддонщиков в отношении всех бумажных валют и загорелся идеей инвестиций в золото и (особенно) серебро. Как сейчас помню: дело было в 2006 году, и озарение снизошло на меня после прочтения весьма убедительной книжки Д.Тёрка и Д.Рубино «Крах доллара и как извлечь из него выгоду» — ещё той, первой редакции.

Тем не менее, у меня как-то не особенно получилось заработать за все эти 14 лет, хотя я всегда держал позицию в серебре — в том или ином виде и количестве. И так уж вышло, что основной урон нанёс мне именно иной вид: фьючерсы на срочном рынке FORTS. Году так в 2013-м я потерял на них практически половину тогдашнего портфеля. Кошмар какой-то, честное слово!



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

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

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

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

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