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

по

Почему я торгую опционами (в основном календари)

    • 02 августа 2018, 20:47
    • |
    • FZF
  • Еще
Самые любимые мои позиции на календарях. Это просто удовольствие за которое получаешь немножечко денег.
Сегодня сделал небольшую прибыль, но без каких-либо напрягов.  такая приятненькая позиция:
Почему я торгую опционами (в основном календари)
Смысл в том, что был маленький арбитраж по волатильности. Я его оцениваю в процентах одной серии относительно другой.
Сегодня я нарушил свои правила и влез в позицию где арбитраж был всего 5,5 %. Обычно я дожидаюсь 10%.
Позиция в цифрах выглядит так:
Почему я торгую опционами (в основном календари)

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

Как купить квартиру за одну месячную зарплату?

    • 09 июля 2018, 20:16
    • |
    • NKT
  • Еще
«Эффективный менеджмент» градообразующего предприятия АО «Интауголь» принял решение о его закрытии. Практически в каждой семье Инты кто-то остался без работы. Люди поставлены перед простым выбором — или умереть или продать за бесценок свои квартиры и переехать куда-то, где ещё есть работа. 
А теперь  взгляните на картинку с ценами и попробуйте хотя бы на секунду представить степень отчаяния и жгучей досады, когда ты понимаешь, что у тебя нет ничего — работы, будущего и твой главный семейный актив обесценился.
Вот реальный пример- 60 тысяч российских рублей
www.avito.ru/inta/kvartiry/1-k_kvartira_36_m_45_et._618495955

Дельта-нейтральность через матожидание

Возникла тут одна идея — как можно было бы добиваться дельта-нейтральности опционной позиции. Хотел бы поделиться, может, получится интересное обсуждение. Но сначала — предыстория вопроса.

Итак, допустим, мы торгуем какую-то дельта-нейтральную стратегию. Это может быть и покупка-продажа волатильности, и котирование ММ, и календарный арбитраж между разными сериями или еще какая. Главное, после открытия опционной позиции (по выгодным, как нам кажется, ценам), нужно добавить фьючерсов в позу (лонг или шорт), чтобы минимально зависеть от того, куда пойдет базовый актив (БА). Как это сделать? Самое простое — посчитать дельту по Блеку-Шоулзу (БШ) и выровнять эту дельту соответствующим количеством фьючерсов. Рассмотрим на примере покупки волатильности:
Дельта-нейтральность через матожидание

Здесь дельта БШ равна нулю и, по идее, нам все равно, куда пойдет БА. Правда будет сильная зависимость от веги, но этот риск здесь рассматривать не будем, только риск от движения БА. Судя по картинке и по тому, что дельта БШ = 0 — у нас нет такого риска. Но если мы в реале откроем эту позу, то обнаружим, что есть почти 100% корреляция эквити с БА. Если она положительная (растет БА — растет PnL, падает БА — падает PnL), то, значит, у позы фактически положительная дельта. Если корреляция отрицательная (растет БА — падает PnL, и наоборот), то фактически у нас отрицательная дельта. Несмотря на то, что БШ показывает нам нулевую дельту. Перефразируя известное выражение, можно было бы сказать так:



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

Искажения, связанные с поведением и принятием решений все известные в мире в одном посте ..........


                                                   Искажения, связанные с поведением и принятием решений все известные в мире в одном посте ..........

В когнитивной науке под когнити́вными искаже́ниями понимаются систематические ошибки в мышлении или шаблонные отклонения, которые возникают на основе дисфункциональных убеждений, внедренных в когнитивные схемы, и легко обнаруживаются при анализе автоматических мыслей[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

Дивидендные истории в России. Статистика закрытия гэпов (автор Spydell)

копипаст. Оригинал тут: http://spydell.livejournal.com/642950.html 

В этом году стремительность закрытия дивидендных гэпов поражает, но как обстояли дела раньше? Сколько времени требуется для закрытия див.гэпа?
Акциям Газпрома с 2007 по 2011 везло, гэп закрывали в тот же день, но и дивиденды никогда не превышали 2%. Как только выросли дивиденды, так и начались сложности. В 2012 году при дивах в 8.97 руб и отсечке на уровне 165 руб потребовалось 89 торговых дней, чтобы вернуться на тот же уровень. В 2013 44 дня, в 2014 80 дней, в 2015 31 день, а в прошлом году 80 торговых дней. Другими словами, чтобы за 5 лет отбить дивиденды в Газпроме в совокупности на 37.25 рублей необходимо было 324 торговых дня. Если в прошлые 5 лет вы бы инвестировали в Газпром фиксированную сумму в рублях, например, 1 млн руб в последний день перед закрытием реестра, то примерно за 16 календарных месяцев смогли бы получить около 250 тыс рублей.
Газпром
Это один из худших показателей среди всех крупных компаний на ММВБ. Газпром отличается тем, что всегда падает и очень неохотно растет. Однако, это все равно заметно выше любого вида депозита в банках.

В таблице «дни» — это количество торговых дней после закрытия реестра, в течение которых акция закрывала дивидендных гэп. «минимум» — минимальная достигнутая цена в процессе закрытия гэапа, а «мин (%)» — величина падения в % от закрытия реестра до самого минимума в дивидендном гэпе. На примере Газпрома с 2012 по 2014 инвесторы терпели в худший момент около 17% убытка от последней котировки перед закрытием реестра.

У Сбербанка раньше были низкие дивы, поэтому и закрытие гэпов стремительное за исключением 2014 года, когда попали на негативную конъюнктуру. Именно в этот момент США и ЕС начали вводить санкции против банковского сектора, чуть позже начался коллапс рубля и банковской системы России, а потом отходняк.
Сбербанк
Инвестируя фиксированную сумму в Сбербанк, можно было бы получить около 10% доходности примерно за календарный год ожидания. Статистику смазывает 2014. В таблице лимит 226 дней – это значит, что котировки не достигли предыдущего закрытия реестра до момент но момента истечения года. В целом, раньше Сбер был не самым выгодным в контексте дивидендной доходности.

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

COT Report в TSlab

Здравствуйте коллеги. Было много споров по поводу результативности отчетов Cоt и их предсказательной силы… и вот я как-то давно решил в протестировать все это дело в TSlab, в любом случае мои результаты не интересны, так как серьезные ребята все перепроверят сами если захотят) Я лишь хотел показать как впихнуть эти отчеты в TSlab.
Итак:
TSlab переваривает такой вот формат данных:

<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
SUGAR,W,19870126,000000,8.0900000,8.3200000,7.4000000,7.7400000,1

Путем некоторых преобразований можно просто заменить OHLC на данные из отчетов
Например:

<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
SUGAR,W,19951101,000000,158825.0000000,20013.0000000,-35139.0000000,15127.0000000,1

получается что:
<OPEN> — это будет OI
<HIGH>   — Comm NetPosition
<LOW>    - NonComm NetPosition
<CLOSE> — NonReportable NetPosition

Вот пример простой системы на какао:
COT Report в TSlab



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

Майним Эфириум

Майним Эфириум
На волне хайпа вокруг криптовалют заинтересовался майнингом и решил наконец попробовать себя в этом деле.

Биткоин отпал сразу т. к. для его добычи нужны специализированные ASIC-и, заточенные под алгоритм SHA-256 или Scrypt.

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

Прежде чем начинать майнинг, нужно убедиться в прибыльности этого процесса. Идём на страницу Etherium Mining Profitability Calculator, выбираем валюту, задаём характеристики своей видеокарты и смотрим расчётный профит от поиска хэшей. Оценить производительность некоторых видеокарт в добыче эфира можно в статье Ethereum Mining GPU Performance Roundup. Вкратце:

1) Майнить лучше на видеокартах AMD, нежели NVidia.

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

Практика направленной торговли опционами на акции. Часть 3. Управление позицией

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

 

Лучшее управление позицией – это заключать только прибыльные сделки, и не делать убыточных. Я серьезно. И так и пытаюсь действовать.

В смысле при закрытии позиции (отдельной леги или всей комбинации) я стараюсь, чтобы каждая сделка была в плюс. Согласитесь, что тогда и в целом у меня будет прибыльная торговля, если каждая сделка будет в плюс! :-)

Но это все же не управление позицией, а закрытие сделок. Вопрос в том, как подвести все наши опционы к прибыли.

 

Управление позицией – это то, чего не бывает c акциями. Что ты будешь делать, если ты купил акцию и играешь на её повышение, а цена упала? Закрывать или усредняться, больше ничего. Если усредняться, так это по сути не управление позицией, а открытие новой сделки по тому же тикеру, с новой ценой. Ведь на риски и профит по ранее открытой позиции ты никак не повлиял, вместо этого ты открыл новую сделку по тому же тикеру. И еще непонятно, хорошо это или плохо. А важно, что это действие потребовало добавления капитала, т.е. начиная с определенного момента падения и оно станет недоступным, с точки зрения риск-менеджмента. Итого ты фактически можешь только закрыть позицию – признать убыток, и ничего больше. Или тебе надо для работы с акциями делать что-то фьючем или опционами, в общем опять же приходим к опционам.



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

Подрoбный aнaлиз стакана нa nyse/nasdaq

Еще одно видеo, с фишкaми пo стaкaну (level2) нa Aмeрикaнскoм фoндoвoм рынкe (nyse/nasdaq

P.S. Ктo eщe нe видeл бeсплaтный и очeнь пoдрoбный кyрс пo стaкaну смoтрите тут http://smart-lab.ru/blog/385472.php



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