Избранное трейдера Двоечник

по

Торгуем, как Ларри!

Мой предыдущий пост 100 лучших советских фильмов снесли в оффтоп, поэтому его никто не увидел. Посему о книгах :-)
Книгу Ларри Вильямса «Долгосрочные секреты краткосрочной торговли» я перечитал раз десять, не меньше. Можно уверенно сказать, что это моя настольная книга о трейдинге. Наряду с книгами Э.Лефевра «Воспоминания биржевого спекулянта» и Б.Вильямса «Торговый хаос». Больше почитать о трейдинге я ничего посоветовать не могу. Ах, да, ещё Линда Рашке и Александр Элдер (Виктор Сперандео и Томас Демарк на любителя). Но это всё. Хотя я прочёл более сотни книг о трейдинге, пришёл к выводу, что этого вполне достаточно, чтобы найти свой торговый Грааль.
Сделаю важную оговорку. Два года назад я закончил свою читательскую карьеру (после того, как нашёл свой торговый Грааль, я прекратил читать всё, что касается трейдинга), но именно после этого вдруг стали издаваться книги наших могучих смартлабовцев:
1. Тимофей Мартынов — «Механизм трейдинга»

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

QLua: таблица крупных "склеенных" обезличенных сделок

    • 03 апреля 2020, 15:06
    • |
    • _sk_
  • Еще
Иногда хочется наблюдать за ситуациями, когда участники торгов исполняют по рынку крупные заявки. Конечно, можно смотреть на обычную ленту обезличенных сделок с настроенными фильтрами на размер сделки, но ведь можно написать специальный QLua-скрипт, который будет отбирать сделки, являющиеся результатом исполнения.

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

Если суммарный объём не менее какой-то границы, которую можно задать для каждого инструмента индивидуально, такие «склеенные» сделки выводятся в таблице. В ней указаны:
— суммарный объём;
— количество обезличенных сделок, которые были склеены;
— начальная цена и конечная цена;

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

Скрипт lua Баланс покупок/продаж

Всем привет. Переделал первоначальную версию скрипта. Исправил некоторые ошибки и немного расширил функционал. Теперь скрипт может сохранять данные в текстовый файл, который потом можно анализировать в другой программе (например exсel). Также, в отличии от первого варианта, скрипт показывает в таблице усредненную цену, по которой прошли сделки. В первом варианте отображалась цена последней сделки. И в скрипте добавлен показ накопленной дельты за все время пока скрипт работает.

TICER = "SBER";
CLASS_CODE = "TQBR";
FilePath = getScriptPath() .. "\\export.txt";--путь к файлу
save = false;--сохранять данные в файл если false нет, true да

f = nil;
stopped = false;
t_id = nil
H = -1;
M = -1;
VSELL = 0;
VBUY  = 0;
CDelta = 0;
CountTrans = 0;
PriceTrans = 0.0; 
t = "";
function OnInit()
    CountTrans = 0;
        if save then f = io.open(FilePath,"w"); end
        CreateTable();
end 

function main() 
        while not stopped do 
          if IsWindowClosed(t_id) then
         stopped = true;
      end       
          sleep(10);
        end
end

function CreateTable()
   t_id = AllocTable(); 
   AddColumn(t_id, 0, "Время", true, QTABLE_STRING_TYPE, 10);
   AddColumn(t_id, 1, "BUY", true, QTABLE_INT_TYPE, 10);
   AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 10);
   AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 10);   
   AddColumn(t_id, 4, "AVG Цена", true, QTABLE_DOUBLE_TYPE, 15);
   AddColumn(t_id, 5, "Накопленная Дельта", true, QTABLE_INT_TYPE, 15);
   AddColumn(t_id, 6, "Кол-во сделок", true, QTABLE_DOUBLE_TYPE, 12);   
   tab = CreateWindow(t_id);
   local NAME = tostring(getParamEx(CLASS_CODE,TICER,"LONGNAME").param_image);
   SetWindowCaption(t_id, TICER.." ("..NAME..") Баланс покупок/продаж");
   SetTableNotificationCallback(t_id, EventCallBack);
end

function Calc(alltrade)
        if bit.test(alltrade.flags, 0) then VSELL = VSELL+alltrade.qty;  --Продажа
        else VBUY  = VBUY+alltrade.qty;  end                            
        CountTrans = CountTrans+1;
        PriceTrans = PriceTrans+alltrade.price;                 
end

function OnAllTrade(alltrade)    
        if alltrade.sec_code == TICER then      
                local Rows, Col = GetTableSize(t_id);
                
                if H==-1 or H~= alltrade.datetime.hour then 
                        H = alltrade.datetime.hour;
                        M = alltrade.datetime.min;
                        t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);
                end
                if M==alltrade.datetime.min then
                        Calc(alltrade);
                else                                    
                M=alltrade.datetime.min;        
                        InsertRow(t_id, -1);                                               
                        local Delta = VBUY-VSELL;
                        Price = PriceTrans/CountTrans;
                        SetCell(t_id, Rows, 6, tostring(CountTrans));                   
                        SetCell(t_id, Rows, 0, t);
                        SetCell(t_id, Rows, 1, tostring(VBUY));
                        SetCell(t_id, Rows, 2, tostring(VSELL));                           
                        SetCell(t_id, Rows, 3, tostring(Delta));
                        local SEC_SCALE = tostring(getParamEx(CLASS_CODE,TICER,"SEC_SCALE").param_value);
                        SEC_SCALE = string.format("%.0f",SEC_SCALE);                    
                        SetCell(t_id, Rows, 4, string.format("%."..SEC_SCALE.."f", tostring(Price)));
                   if Rows>=2 then
                           local OldPrice = tonumber(GetCell(t_id,Rows-1,4).image);
                           if OldPrice>Price then 
                                        Red(Rows,4); 
                           else 
                                        Green(Rows,4);
                           end
                           CDelta = tonumber(GetCell(t_id,Rows-1,5).image);
                           CDelta = CDelta + Delta;                        
                        else 
                          CDelta = Delta;
                        end
                        SetCell(t_id, Rows, 5, tostring(CDelta));
                    if Delta<0 then Red(Rows,3); end
                    if Delta>0 then Green(Rows,3); end
                    if CDelta<0 then Red(Rows,5); end
                    if CDelta>0 then Green(Rows,5); end                                                   
                   if save then
                                local Str = tostring(H)..";"..tostring(M)..";"..tostring(VBUY)..";"..tostring(VSELL)..";"
                                                ..tostring(Delta)..";"..tostring(Price)..";"..tostring(CDelta);
                           Str=Str.."\n";
                           SaveFile(Str);
                        end
                t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);                        
                    VBUY = 0;VSELL = 0;
                        PriceTrans = 0;
                        CountTrans = 0;
                        Calc(alltrade);
                end
        end --if alltrade.sec_code == TICER then        
end

function SaveFile(Str)
        if f ~= nil then 
                f:write(Str);           
                f:flush();                               
        end
end

function Red(row,col)
        SetColor(t_id, row, col, RGB(255,0,0), RGB(0,0,0), RGB(255,0,0), RGB(0,0,0));
end
function Yellow(row,col)
        SetColor(t_id, row, col, RGB(240,240,0), RGB(0,0,0), RGB(240,240,0), RGB(0,0,0));
end
function Green(row,col)
        SetColor(t_id, row, col, RGB(0,200,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0));
end


function EventCallBack(t_id, msg, par1, par2)
   if msg==QTABLE_CLOSE then
     OnStop();
   end;
end

function OnStop(s)
  if f ~= nil then f:close(); end
  if t_id ~= nil then
    DestroyTable (t_id);
  end;
  stopped = true;
end




Стратегия Поплавок. Робот-тестер на Луа и Питоне с описанием.

    • 16 марта 2020, 19:49
    • |
    • Albus
  • Еще
--ВВЕДЕНИЕ--
Пост будет полезен только разработчикам алгоритмических стратегий. Здесь нет прорывных идей. На истории стратегия прибыльная, но опыт показывает, что эта прибыльность иллюзорна и не гарантирует успех в будущем. По любой стратегии можно найти комбинацию параметров, которая прибыльна на прошлых свечках. Но радоваться, что ты нашёл Грааль, рано. На будущих сделках эти параметры скорее всего будут убыточными.
Тем не менее, подгонка под исторические данные — штука интересная, поэтому пишу этот пост. В нём вы найдёте рабочий тестер для описанной стратегии, который можете использовать как захотите. 

---ОПИСАНИЕ СТРАТЕГИИ---
Назовём её «Поплавок», потому что это стратегия выныривания из зоны перепроданности.
1. Ждём, когда индикатор RSI сформирует двойное дно.
2. Оба дна должны быть ниже какого-то горизонтального порога по RSI, например 25.
3. Подъём (выныривание) выше этого порога мы считаем признаком разворота и покупаем.
4. Прибыль забираем, когда акция дорастёт до (к примеру) уровня 50 по RSI. Скрипт умеет подбирать и этот параметр. Часто наилучшим вариантом будет продавать при RSI = 70 или даже RSI = 80, то есть уже в состоянии сильной перекупленности. Но эту фразу не воспринимайте как рекомендательную, ведь все эти прогоны на истории ищут лучший вариант в прошлом, но это не гарантирует успеха в будущем.

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

Общий финансовый анализ на Python (Часть 1)

    • 09 марта 2020, 16:43
    • |
    • Aleks
  • Еще

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

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

import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt

sber = yf.download('SBER.ME','2016-01-01')

Доходность

Данная величина представляет собой процентное изменение стоимости акции за один торговый день. Оно не учитывает дивиденды и комиссии. Его легко рассчитать используя функцию pct_change () из пакета Pandas.

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

# Скорректированая цена закрытия`
daily_close = sber[['Adj Close']]

# Дневная доходность
daily_pct_change = daily_close.pct_change()

# Заменить NA значения на 0
daily_pct_change.fillna(0, inplace=True)

print(daily_pct_change.head())

# Дневная лог доходность
daily_log_returns = np.log(daily_close.pct_change()+1)

print(daily_log_returns.head())


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

QUIK. Реальные шаги для ускорения работы терминала.

    • 07 марта 2020, 16:22
    • |
    • SaOLin
  • Еще

Последние две недели на всех мировых рынках резко повысилась активность, количество биржевых данных выросло в 2-3 раза. Из-за этого у многих пользователей терминал QUIK начал безбожно тормозить и виснуть. Сервера брокеров также с трудом переваривают повышение нагрузки и наплыв клиентов, желающих что-либо купить-продать (по слухам кто-то из брокеров висел аж целую неделю))) ).

На Смарт-Лабе появилось несколько постов с советами как избавиться от тормозов. И меня сильно поразила неадекватность предлагаемых действий. Люди готовы покупать новое железо за бешеные деньги, создавать какие-то командные файлы и заниматься прочей ерундой. А нужно всего лишь включить голову и разобраться в причинах тормозов. Когда программисты разрабатывают какую-либо программу, они всегда оптимизируют ее для работы на определенном «средне статистическом» компьютере, закладывая при этом кратный запас по производительности. Если вдруг эта программа (QUIK) начинает неадекватно тормозить и виснуть на обычном современном компьютере — значит дело почти наверняка не в железе, и даже не в самой программе, а в ее конфигурации (настройках). Т.е. нам нужно правильно настроить терминал QUIK , а уже потом апгрейдить железо, менять туда-обратно версии и бухтеть на Смарт-лабе.



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

RUSЕ ЕTF Единственный ЕТF который платит дивиденды.

prostguide.ru
Здравствуйте, уважаемые читатели! В данной статье мы разберем, что такое RUSE ETF его состав и дивидендную составляющую.
Как и большинство ETF — RUSE является хорошим способом получить готовый инвестиционный портфель за небольшие деньги. На данный момент, RUSE — это единственный состоящий из российских акций ETF, который выплачивает дивиденды своим держателям. По составу, данный биржевой фонд полностью повторяет собой Индекс РТС, включая в себя акции таких компаний как Лукоил, Газпром и Сбербанк.
RUSЕ ЕTF Единственный ЕТF который платит дивиденды.



График цены RUSE 

График RUSE ETF 

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

ИНСТРУКЦИЯ ПО ДИВИДЕНДНОМУ ТРЕЙДИНГУ v2.0

Всем доброе утро! Ранее размещал на телеграмм-канале Дивиденды 2020 инструкцию по дивидендному трейдингу, решил поделиться ею и с вами.

 

ИНСТРУКЦИЯ ПО ДИВИДЕНДНОМУ ТРЕЙДИНГУ v2.0

⛔НЕ ЯВЛЯЕТСЯ РЕКОМЕНДАЦИЕЙ К ИНВЕСТИРОВАНИЮ⛔

1 В дивидендном трейдинге важен источник получения информации.

• Первоисточник информации это сущфакты Интерфакс. Оперативно получать важные новости можно с помощью телеграмм-бота @FlashTraderNewsBot

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

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

ШАГИ:

1. В последнем годовом отчете эмитента читаем чем занимается компания, выясняем понимаете ли вы бизнес этой компании:

✔исходя из чего получает прибыль,

✔постоянно ли потребляется товара/услуга потребителями,

✔кто потребитель,



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

Знание — сила. Хорошие книги для инвесторов

Наш прошлый материал — подборка полезных сайтов для инвесторов и трейдеров — был чисто практическим. Сегодня поговорим о теории.

Собрали для вас список книг об инвестициях, которые точно заслуживают внимания, и разделили их на несколько групп по темам. А чтобы вам было удобнее, добавили ссылки на последние издания этих книг в различных магазинах.


Введение в тему и инвестиции в целом

Бернстайн У., «Манифест инвестора».
Хорошее введение в тему инвестиций для тех, кто только заинтересовался фондовым рынком. Автор объясняет, как связаны доходность и риск, как создать разумный портфель и почему инвестиции в индексные фонды почти наверняка окажутся лучше, чем отбор отдельных бумаг и активная торговля ими.
Ozon | Litres



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

Прибыльный страховой бизнес на дому

Открыли две позиции- первый это динамический дельтахедж, где страхуется малейший риск, а второй- стреддл… или пассивное страхование
Прибыльный страховой бизнес на дому



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

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