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

по

ОБЗОР VWAP (VOLUME WEIGHTED AVERAGE PRICE)

VWAP — это внутридневный расчет, используемый в основном HFT алгоритмами и институциональными трейдерами для оценки того, где акции торгуются относительно среднего значения объема за день. Внутридневные трейдеры также используют VWAP для оценки направления рынка и фильтрации торговых сигналов. Перед использованием VWAP, необходимо понять, как он рассчитывается, как его интерпретировать и использовать, а также какие недостатки у этого инструмента.

Как рассчитывается VWAP?

VWAP (Volume Weighted Average Price) — это аббревиатура от Средневзвешенной цены по объему. На первый взгляд, вы можете думать, что VWAP — это всего лишь индикатор средней цены. Но VWAP — это нечто большее.

Индикатор скользящей средней чаще всего основан только на одной цене (закрытия) актива, и он никогда не даст вам точной информации об истинной средней цене. Чтобы определить истинную среднюю цену акции (или другого актива), вам необходимо фактическое количество транзакций по целому ряду цен. Это то, что может делать VWAP.



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

Новые санкции - действительно, что то серьезное или как обычно ?

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

Я полагаю, что последние действия США — это на порядки более серьезно и болезненно, чем то, что было ранее. 
Не буду пересказывать содержание этого документа. Думаю, все его просмотрели. 
Решил внимательнейшим образом сам перечитать первоисточник. А не комментарии. 
Честно говоря — говоря простым языком, прифигел. 
Очень и очень жестко.

Что принципиально нового- 
1. Теперь — это закон. Не указ президента. А именно закон. То есть ОЧЕНЬ НАДОЛГО. 
БЕЗ НАДЕЖД НА ОТМЕНУ В ТЕЧЕНИЕ ГОДА — двух.

2. Данный пакет санкций как мне видится, ставит крест практически на ЛЮБЫХ НОВЫХ ТЕХНОЛОГИЯХ, которые могли бы поступить в Россию. Дело в том, что строго говоря, Практически любая технология может быть по желанию США объявлена технологией санкционного назначения. Более того, любой человек, гражданин любой страны мира, любая компания, поставляющая данные технологии может иметь очень серьезные последствия.



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

Равновесие Нэша. Как рынки становятся убыточными

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

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

В чём дело, какие причины? Глобальный и/или региональный экономический кризис? Нет. Просто много конкурентов? Нет. Конкуренты всегда были, есть и будут на рынках. Новые ниши потребления быстро заполняются производителями и торговцами.

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



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

Код робота на 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

а чего рынок ждет?

все новости пересмотрел, ничего нет такого важного… до 24 еще времени полно… до экспиры пара дней…

продолжение поста про зож

Ок, по просьбе трудящихся продолжаем нашу передачу на крипторадио про зож.  smart-lab.ru/blog/409478.php
всё основано на собственном опыте и в результате анализа десятков книг по теме.


1. Позитивчик.
Как-то не хочется заниматься миссионерством, но вообщем нужно мыслить позитивно. Как это делать это вопрос даже не на миллион баксов. Давно был такой фильм «секрет» — о силе наших намерений и позитива, возможно кому-то он покажется сладкой приторной фигнёй, ок, мне он тоже таким в своё время показался. Позитив не приведёт к исполнению всех желаний но в целом он улучшит качество жизни и здоровье значительно.

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

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

2 грааля, без регистрации и смс!

Здарова трейдуны!
Буду палить для вас 2 мега грааля!
Очень много постов написано на смарте о стрессе трейдера, как с ним бороться и т.д. и т.п.
Есть еще один метод, вы наверно о нем слышали, Раскраски антистресс!
Почему именно они? Да потому, что тут как и в трейдинге нужно терпение, внимательность, и всякой остальной белеберды о которой пишут в книгах на форумах, вообщем то чем забивают вам головы остальные мега трейдуны. Но ближе к делу, вот пример раскраски антистресс, если кто не знает:
2 грааля, без регистрации и смс!

Вообщем вы раскрашиваете, и успокаиватесь, и можете смело торговать. Рекомендую заниматься этим во время сделки.
Много кто рекомендует, войти в зделку, поставить стопы, и отойти от терминала. Но ведь натоящий трейдер, не может этого сделать, но и тежело смотреть как кукл сбивает ваши стопы, вот как раз в это время вам нужна раскраска антистрес!
Вот он и есть грааль антистресса!

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

Наш рынок стал деревянным? Что будет завтра?

Итак, утром в 10:40  мы отметили в отдельном посте только что показанные хаи 1924.5, и совершенно правильно предположили их хаями дня. казалось бы, если хаи дня состоялись в первом часе торгов, а после этого нефть ушла на -3.5%, то мы получили прибыль на взятые шорты?))

Наш рынок стал деревянным? Что будет завтра?

Нет, наш рынок не таков. Он отказался торговаться сегодня адекватно, играть нефть, и что бы то ни было делать рыночным образом.

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

Что же ждать дальше?

На мой взгляд, амеры завтра не просто падают, а умирают. Вопрос — устоит ли завтра 2380 по фсипу — открыт.

И наш рынок должен практически через 20-40 минут с начала сессии начать валиться, причем падать до конца дня. И самое смешное, что до конца недели падать. И потом до среды. Если устоим у 1920 больше часа, надо будет думать.

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

Почему нельзя строить пирамиду РЕПО на фьючерсе ОФЗ

Все материалы подготовленные биржей по фьючерсам на ОФЗ были составлены до 2014г.
То есть до кризиса падения доллара и роста ключевой ставки.На сегодняшний день кривая купонного дохода по ОФЗ и кривая ключевой ставки Перевернута.
Поэтому многие стратегии которые декларирует биржа не работают, по крайней мере пока.

Вот так выглядят материалы с биржи ММВБ — это было до кризиса 2014г.
Почему нельзя строить пирамиду РЕПО на фьючерсе ОФЗ
А вот так выглядит ситуация сейчас.

Почему нельзя строить пирамиду РЕПО на фьючерсе ОФЗ

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

Anton Kreil

Волей случая мне довелось присутствовать на 2х дневном семинаре данного трейдера в далеком 2012 году.
И вот ютуб сегодня предложил посмотреть новую небольшую 2х часовую презентацию Энтона в university of westminster.
Думаю сие видео может вас заинтересовать господа смартлабовцы.
Что могу сказать, за пять лет, мистер Крэил обзавелся добротным животом, личным телохранителем, и взял в менторы своей компании моего одногруппника. Где я свернул не туда??

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