Избранное трейдера Майкл Бьюрри
Всем привет. Поставь знак хорошо и подпишись на мой блог, если моя статья была полезна тебе. Спасибо, мне это действительно поможет!
«95% всех трейдеров терпят неудачу». По крайней мере, именно такая статистика чаще всего приводится в интернете. Однако именно эта цифра не доказана научно. Исследования показывают, что фактическая доля проигрышей даже выше.
Продолжают торговать в течение трех лет только 13%. Если вы торгуете уже более трех лет, то вы можете считать себя особенными!
Через пять лет на рынке остается только 7%.На прибыльные акции приходится 60% продаж, на убыточные — 40%.
Прибыль среднестатистического индивидуального инвестора отстает от рыночного индекса на 1,5% в год. Активные трейдеры отстают от индекса на 6,5% в год. Внутридневные трейдеры, добивавшиеся хороших результатов в прошлом, продолжают получать прибыль и в дальнейшем. В то же время только около 1% внутридневных трейдеров способны добиваться прогнозируемой прибыли за вычетом сборов.
Мы запустили телеграм-канал @tinkoff_invest_official в сентябре 2019-го и думали, что наберем 30 тысяч подписчиков за год. Прошло десять месяцев — и на нашем канале 50 тысяч подписчиков. Мы не потратили на продвижение ни рубля.
Мы решили честно рассказать, как мы работаем с контентом и трафиком, какими принципами руководствуемся и каких ошибок стараемся избегать. Возможно, наши советы больше подойдут корпоративным каналам, а не авторским, но кто знает, может, все будет наоборот. Поехали!
Конкуренция сумасшедшая. Раскрутить канал в Телеграме с каждым годом становится все сложнее. Только в 2019-м было зарегистрировано 133 800 каналов на русском. Теперь, после отмены блокировки Телеграма в России, логично ожидать, что эти цифры вырастут в несколько раз. И все, кто раньше боялся гнева Роскомнадзора, пойдут создавать свои каналы, зарабатывать, продвигать личный бренд, находить клиентов. А значит, Телеграм станет еще перспективнее и интереснее.
Сегодня я решил написать пост для тех, кто только начинает изучать трейдинг.
Когда я разбираю сделки, то движения измеряю в пунктах.
Но как перевести пункты в рубли?
На Московской бирже торгуются фьючерсы на акции, индексы, валюту, облигации, процентные ставки и на товары. У контрактов может различаться стоимость пункта.
Запомним понятие “шаг цены”. Шаг цены – это минимальное расстояние, на которое может изменяться цена.
Примеры.
Сбербанк. Шаг цены = 1 (20100, 20101 и т.д.)
Нефть. Шаг цены = 0,01 (40,00; 40,01и т.д.)
РТС. Шаг цены = 10 (121000, 121010 и т.д.)
Для перевода пунктов в рубли нам надо знать, сколько стоит шаг цены. А стоимость шага, это и есть стоимость пункта (но на фьючерсе РТС шаг цены = 10пунктов, поэтому стоимость 1 пункта = стоимость шага цены РТС / 10 )
Для фьючерсов на акции стоимость шага = 1 рубль.
К примеру. Вы открыли лонг по Сбербанку. Входили по 20100. Позицию закрыли по 20200. Итого с одного контракта в сделке вы заработали 100 пунктов или 100 р.
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
Алгоритм данной торговли был описан уважаемым Гном (https://smart-lab.ru/blog/499606.php) и, поскольку я являюсь любителем различных теорий Мартингейла и усреднения, написал робота по этой стратегии.
Подробно на алгоритме останавливаться не буду — читайте по ссылке у Гнома, там очень хорошо всё расписано.
Здесь — немного измененная реализация. Отличие в том, что позиции открываются не через равные промежутки цены, а чуть шире: еще должно прийти хотя бы минимальное подтверждение, что дальше не полетит (в данном случае использован вход обратно в канал Боллинджера, но это несложно поменять на что угодно).
Если полетит против нас вертикально, мы хотя бы не будет бессмысленно открывать кучу сделок на мгновенной длинной вертикальной палке.
Итак, представляю: «Судак-Тудак» Универсальный (одновременно для акций и фьючерсов).
Если хотите добавить инструменты (а они добавляются в массив aTickerList), не забудьте вписать их данные в массивы:
Всех приветствую!
Первый год публичной алго торговли закончился с результатом +100%.
Первый пост о моем пути к алготрейдингу тут
В этом посте подробно разберу результаты за прошлый год, а также попытаюсь ответить на вопрос – одурачен ли я случайностью?
На рисунке изменение депозита и фьючерса долл./руб.
Все системы торговали на фьючерсе долл./руб. Примерно 75% систем работают на волатильности, остальные пытаются поймать тренд. В начале года затишье, которое к концу марта привело к просадке в 30%. Ну а дальше роботы оседлали взрыв рынка. 8 августа вывел 10% от первоначального депо, в этот же период был удержан НДФЛ на всю сумму накопившегося дохода.
Красным цветом выделил зоны, где алгоритмы не смогли заработать на волатильности. То есть движения были, но они были «плохими». В эти периоды дневные свечи имели большие тени как с верху, так и снизу. Поэтому, не смотря на хорошую волатильность их возило по стопам. Зеленые зоны – экстремально низкая волатильность и сильные просадки.