Избранное трейдера Трейдер Вася

по

Золотые правила откатов.

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

Для примера взяты последние данные Сбербанка, в часовом формате(1 свеча — 1 час)

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

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

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



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

Код робота на LUA для QUIK

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

Предназначается для новичков в алготрейдинге, что-то типа болванки.

Важно: выставление заявок я закомментировал, поэтому можете смело запускать этот скрит, он не натворит ужаса по счету.

require"QL"

log = "sbrf.log"
seccode = "SRM6"
lots_in_trade = 80
accnt = ""
better = -5
chart = "sberbankxxx"
is_run = true
prev_datetime = {}
len = 100
basis = 9
k_bal = {0,1,2,3}
sell = false
buy = false
id = 0
first = true

function trade_signal(shift)
        number_of_candles = getNumCandles(chart)
        bars_temp,res,legend = getCandlesByIndex(chart,0,number_of_candles-2*len-shift,2*len)
        bars={}

        i=len
        j=2*len
        while i>=1 do
                if bars_temp[j-1].datetime.hour>=10 then
                        sk=true
                        if bars_temp[j-1].datetime.hour==18 and bars_temp[j-1].datetime.min==45 then
                                sk=false
                        end
                        if sk then
                                bars[i]=bars_temp[j-1]
                                i=i-1
                        end
                end
                j=j-1
        end

        t = len+1

        do_sell = false
        do_buy = true

        value = 0
        if do_sell then value = 1 end
        if do_buy then value = -1 end
        toLog(log,"value="..value.." on candle: "..bars[len].datetime.year.."-"..bars[len].datetime.month.."-"..bars[len].datetime.day.." "..bars[len].datetime.hour..":"..bars[len].datetime.min.."   O="..bars[len].open.." H="..bars[len].high.." L="..bars[len].low.." C="..bars[len].close.." V="..bars[len].volume)
        return value
end

function mysplit(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end

function OnInit(path)
        log=getScriptPath()..'\\'..log
        toLog(log,"==========OnInit: START")
        toLog(log,"==========OnInit: FINISH")
end

function OnStop()
        is_run = false
        toLog(log,"==========OnStop: script finished manually")
end

function CheckBit(flags, bit)
   -- Проверяет, что переданные аргументы являются числами
   if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!"); end;
   if type(bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!"); end;
   local RevBitsStr  = ""; -- Перевернутое (задом наперед) строковое представление двоичного представления переданного десятичного числа (flags)
   local Fmod = 0; -- Остаток от деления
   local Go = true; -- Флаг работы цикла
   while Go do
      Fmod = math.fmod(flags, 2); -- Остаток от деления
      flags = math.floor(flags/2); -- Оставляет для следующей итерации цикла только целую часть от деления
      RevBitsStr = RevBitsStr ..tostring(Fmod); -- Добавляет справа остаток от деления
      if flags == 0 then Go = false; end; -- Если был последний бит, завершает цикл
   end;
   -- Возвращает значение бита
   local Result = RevBitsStr :sub(bit+1,bit+1);
   if Result == "0" then return 0;
   elseif Result == "1" then return 1;
   else return nil;
   end;
end;

function killorders(ccode,scode)
    for i=0,getNumberOf("orders")-1,1 do
        local t=getItem("orders", i)
        if t ~= nil and type(t) == "table" then
            if( t.seccode == scode and CheckBit(t.flags, 0) == 1) then
                local transaction={
                    ["TRANS_ID"]=tostring(math.random(2000000000)),
                    ["ACTION"]="KILL_ORDER",
                    ["CLASSCODE"]=ccode,
                    ["SECCODE"]=scode,
                                        ["ACCOUNT"] = accnt,
                    ["ORDER_KEY"]=tostring(t.ordernum),
                }
                                res=sendTransaction(transaction)
            end
        end
    end
end

function killstoporders(ccode,scode)
    for i=0,getNumberOf("stop_orders")-1,1 do
        local t=getItem("stop_orders", i)
        if t ~= nil and type(t) == "table" then
            if( t.seccode == scode and CheckBit(t.flags, 0) == 1) then
                local transaction={
                    ["TRANS_ID"]=tostring(math.random(2000000000)),
                    ["ACTION"]="KILL_STOP_ORDER",
                    ["CLASSCODE"]=ccode,
                    ["SECCODE"]=scode,
                                        ["ACCOUNT"] = accnt,
                    ["STOP_ORDER_KEY"]=tostring(t.ordernum),
                }
                                res=sendTransaction(transaction)
            end
        end
    end
end


function main()
        toLog(log,"==========main: START")
        while is_run do
                if isConnected() == 1 then
                        ss = getInfoParam("SERVERTIME")
                        if string.len(ss) >= 5 then
                                hh = mysplit(ss,":")
                                str=hh[1]..hh[2]
                                h = tonumber(str)
                                if (h>=1000 and h<1400) or (h>=1405 and h<1845) or (h>=1905 and h<2350) then
                                        if first then
                                                for ti = 50,2,-1 do     trade_signal(ti) end
                                                if buy and not sell then message(seccode.." Current state: green and buy",1) end
                                                if sell and not buy then message(seccode.." Current state: red and sell",1) end
                                                if buy and sell then message(seccode.." ERROR: green and red",1) end
                                                if not buy and not sell then message(seccode.." WARNING: nothing",1) end
                                                first = false
                                        end
                                        prev_candle = getPrevCandle(chart,0)
                                        if not isEqual(prev_candle.datetime,prev_datetime) then
                                                current_value = trade_signal(1)

                                                if current_value ~= 0 then
                                                        optn = "B"
                                                        if current_value==1 then optn = "S" end
                                                        curvol=0
                                                        no=getNumberOf("FUTURES_CLIENT_HOLDING")
                                                        if no>0 then
                                                                for i=0,no-1,1 do
                                                                        im=getItem("FUTURES_CLIENT_HOLDING", i)
                                                                        if im.sec_code==seccode then
                                                                        curvol=im.totalnet
                                                                        end
                                                                end
                                                        end
                                                        trvol = -current_value*lots_in_trade-curvol
                                                        if trvol ~= 0 then
                                                                killorders("SPBFUT",seccode)
                                                                killstoporders("SPBFUT",seccode)
                                                                f = io.open(getScriptPath().."\\sbrf2_pos.txt","r")
                                                                sbrf2_pos=f:read("*n")
                                                                f:close()
                                                                f = io.open(getScriptPath().."\\sbrf3_pos.txt","r")
                                                                sbrf3_pos=f:read("*n")
                                                                f:close()
                                                                pr,n,l = getCandlesByIndex ("futsber", 0, getNumCandles("futsber")-1, 1)
                                                                local trans =
                                                                {
                                                                        ["ACTION"] = "NEW_ORDER",
                                                                        ["CLASSCODE"] = "SPBFUT",
                                                                        ["SECCODE"] = seccode,
                                                                        ["ACCOUNT"] = accnt,
                                                                        ["OPERATION"] = optn,
                                                                        ["PRICE"] = toPrice(seccode,pr[0].close+current_value*better),
                                                                        ["QUANTITY"] = tostring(math.abs(curvol-sbrf2_pos-sbrf3_pos)),
                                                                        ["TRANS_ID"] = tostring(getTradeDate().month*100+getTradeDate().day+id)
                                                                }
                                                                id = id+1
                                                                --res = sendTransaction(trans)
                                                                message(seccode.." Send : " .. res, 2)
                                                                toLog(log,"Send: ".. res)
                                                                for btr=0,200,5 do
                                                                        local trans =
                                                                        {
                                                                                ["ACTION"] = "NEW_STOP_ORDER",
                                                                                ["CLASSCODE"] = "SPBFUT",
                                                                                ["SECCODE"] = seccode,
                                                                                ["ACCOUNT"] = accnt,
                                                                                ["OPERATION"] = optn,
                                                                                ["PRICE"] = toPrice(seccode,pr[0].close-current_value*btr),
                                                                                ["STOPPRICE"] = toPrice(seccode,pr[0].close-current_value*(btr+better)),
                                                                                ["QUANTITY"] = tostring(6),
                                                                                ["TRANS_ID"] = tostring(getTradeDate().month*100+getTradeDate().day+id),
                                                                                ["EXPIRY_DATE"] = "GTC"
                                                                        }
                                                                        id = id+1
                                                                        --res = sendTransaction(trans)
                                                                        message(seccode.." Send : " .. res, 2)
                                                                        toLog(log,"Send: ".. res)
                                                                end
                                                                if current_value == 1 then
                                                                        message(seccode..' RED: buy->sell',1)
                                                                        toLog(log,"RED signal")
                                                                else
                                                                        message(seccode..' GREEN: sell->buy',1)
                                                                        toLog(log,"GREEN signal")
                                                                end
                                                        else
                                                                if current_value == 1 then
                                                                        message(seccode..' RED: buy->sell',1)
                                                                        toLog(log,"RED signal, but nothing to do")
                                                                else
                                                                        message(seccode..' GREEN: sell->buy',1)
                                                                        toLog(log,"GREEN signal, but nothing to do")
                                                                end
                                                        end
                                                else
                                                        if buy and not sell then toLog(log,"Nothing to do. Current state: green and buy",1) end
                                                        if sell and not buy then toLog(log,"Nothing to do. Current state: red and sell",1) end
                                                        if buy and sell then toLog(log,"Nothing to do. ERROR: green and red",1) end
                                                        if not buy and not sell then toLog(log,"Nothing to do. WARNING: nothing",1) end
                                                end
                                                prev_datetime = prev_candle.datetime
                                        end
                                end
                        end
                end
                sleep(5*1000)
        end
        toLog(log,"==========main: FINISH")
end
  • обсудить на форуме:
  • Quik Lua

Prophet Facebook

У Facebook есть библиотека Prophet для анализа временных рядов, подробно можно посмотреть тут https://research.fb.com/prophet-forecasting-at-scale/ а также тут https://facebookincubator.github.io/prophet/docs/quick_start.html

Потестил библиотечку для анализа котировок к примеру акций Газпром. 

Обучал модель на данных 2012/2017-02 тестировал на участке 2017-03/2017-06

График дневных доходностей и предсказанные значения

Prophet Facebook
Стратегия простая, если предсказанное значение выше нуля то покупаем, если ниже то продаем.

Prophet Facebook

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

Рейтинг Брокеров - Лучшие Брокеры и Инвестиционные компании 2017 (КТО ТВОЙ БРОКЕР?) Smart-lab

Рейтинг Брокеров - Лучшие Брокеры и Инвестиционные компании 2017 (КТО ТВОЙ БРОКЕР?) Smart-lab

Открытие Брокер
БКС Брокер
ФИНАМ
АТОН
Уралсиб
ВТБ 24
Алор
Солид
Церих
КИТ Финанс
КапиталЪ
Ситибанк
Промсвязьбанк
Россельхозбанк
Ренессанс
Сбербанк
Альфа-Банк
Связь-Банк
Всего проголосовало: 212
Рейтинг брокеров по количеству клиентов на 1 января 2017 годаРейтинг брокеров по чиленности клиентовРейтинг брокеров по обороту на 1 января 2017 года.Рейтинг брокеров по обороту

Рейтинги составлены по данным Московской биржи. При этом в оба списка попали только 10 компаний. По факту – это и есть те самые топовые брокеры.
Брокеры, лидирующие в рейтингах по обороту и количеству клиентов

тайм фреймы, частица моего грааля!

Много было разговоров, на каких же тайм фреймах работать, У меня решилось само по себе!
Ответ, на всех! И сделано у меня просто. Дело в том что чем старше тайм фрейм тем глобальнее уровень, именно так распределены приоритеты моих  ботов. То  есть, если цена дошла до более старших уровней, бот с меньшим тайм фреймом отключается,  включается бот со старшим тайм фреймом и более глобальном уровнем! После того как волатильность падает, старшие боты отработали глобальное движение, рынок успокоился, приоритет переходит вновь на младшие тайм фреймы! Система показала более устойчивый эквити работая на таком принципе.
тайм фреймы, частица моего грааля!



Беспощадные дивидендные гэпы 2017

Чтобы посмотреть, какие бумаги отсеклись на этой неделе, я иду в раздел дивиденды 2017. Там внизу есть ссылка История выплаченных дивидендов

В пятницу собрание акционеров Селигдара отказалось выплачивать дивиденды по префам.
Предполагаемая ДД была 17.7%, бумага упала на 25% после отмены
Беспощадные дивидендные гэпы 2017
Беспощадные дивидендные гэпы 2017

Красноярскэнергосбыт ао
Дата отсечки: 8 июня.
Дивиденд = 0,444344266 руб
Дивдоходность = 11%
Дивигэп >11%, в моменте проскок составлял 38%!
График: http://smart-lab.ru/g/MOEX:KRSB/D/
Беспощадные дивидендные гэпы 2017
По префам такой же дивиденд, похожая ДД и такой же гэп:
http://smart-lab.ru/g/MOEX:KRSBP/D/ 

Рязаньэнергосбыт-преф.
Дата отсечки: 8 июня.
Дивиденд: 0,146965124 руб
ДД=5,7%
Дивидендный гэп = не оценить точно, бумага неликвидна.
График: http://smart-lab.ru/g/MOEX:RZSB/D/ 


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

Философия следования за ценой!

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

Вроде бы просто: Цена растёт мы покупаем, цена падает мы продаём — это принцип следования за трендом.
Цена падает и нащупывает поддержку, диапазон цен снижается, цена разворачивается и мы покупаем — это принцип контртренда.

Заранее, хочу сказать, что это моё личное мнение и оно естественно субъективно.
На точность и верность своего суждения, я не претендую!

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

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

Интервью, которые я взял вчера на ПМЭФ 2017. Часть 2.

Интервью первого дня тут: http://smart-lab.ru/blog/401770.php

Президент школы управления Сколково Андрей Шаронов

Андрей Дубовсков, президент МТС


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

Постимпериализм

Ленин был очень умен, но он не учел некоторых вещей.
Во-первых, его очевидная ошибка в том, что он полагал, что империализм допустит революционную ситуацию. А тем более, после опыта октября.
Империализм быстро приспособился к текущим реалиям, и немного сменил парадигму: повысил уровень благосостояния пролетариата и внушил ему мысль о равных возможностях, истребил профсоюзное движение и прочие формы объединений, произвел «реформы образования», позаботился о «правильности» СМИ, вспомнил древнеримское «хлеба и зрелищ».
Второй ошибкой Ленина был сам анализ империализма, он недооценивал его возможности. В частности, он думал, по-всей видимости, что капиталист способен только лишь удовлетворять спрос, однако, на деле оказалось, что он способен не только его удовлетворять, но и создавать. Причем не только материальный, но и «духовный»: голливудская киноиндустрия тому свидетельство. Империализм способен сам создавать несуществующие(без его участия) проблемы и предлагать решения, это порождает спрос на решение таких проблем.

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

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