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

по

Про Абхазию (часть 2)

Пацаны, пишу продолжение моего отдыха в Абхазии. Начало здесь  (часть 1).
 Итак, в пятницу утром в 8 часов выехали из Москвы на автомобиле- Тойота!
Ехали по трассе М4.  Дорога была более менее пустая. В воронежской области очень много платных участков.
Для легкового транспорта минимальная цена.В общей сложности заплатили 1200 рублей. 
В Ростовской области  и далее до Лазаревской  (Краснодарский край) платных дорог не было.
По пути останавливались два раза покушать в Понпончиковых точках питания. Это федеральная сеть питания.
Цены дорогие. Чебурек -89 рублей, пончик -27 рублей. Чай- 300 грамм кипятка один пакетики 15 грамм сахара-57 рублей.
Все это рассчитано на богатых смердов. Сливающие трейдеры даже и не суйтесь на федеральную трассу М4.
   Приехали в Лазаревскую в 13-00 в субботу. Мой водила два часа поспал перед Ростовом. 
На пути встретили четыре легкие аварии. Фура завалилась в кювет, и три штуки легковых машин поцеловались  друг с другом и все это в Краснодарском крае.

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

Почему лонг надо торговать на споте, а шорт на фьючерсе

Сразу оговорюсь, что утверждение, вынесенное в заголовок, не касается внутридневных операций, речь идет о позициях от нескольких дней до нескольких недель.  Итак перед вами график подневной доходности простейшей синтетической облигации «лонг  Сбербанк — шорт ближайший фьючерс на Сбербанк» с учетом расходов на перевкладывания из фьючерса во фьючерс за день до экспирации, дивидентов и средств ГО и вариационной маржи, необходимых для поддержания шортовой позиции.

Почему лонг надо торговать на споте, а шорт на фьючерсе

Он означает разницу в доходности (к номиналу) между «купил и держи» акцию сбера (с учетом дивидендов) и «купил и держи» ближний фьючерс на сбер или, если перевернуть формулу разницу в доходности (опять же к номиналу) «продал и жди» ближний фьючерс на сбер и «продал и жди» акцию сбера без учета платы за шорты(!). В принципе в этом графике для «купил и держи» нет ничего удивительного, так как обладатель такой позиции во фьючерсе может легко компенсировать эту разницу, разместив средства, свободные от ГО и вармаржи под безрисковую ставку (кроме «скачка» на графике под стрелкой, о котором ниже).  А что делать держателю шорта на споте? У него ведь нет свободных средств, да и еще к тому же эта отрицательная для него разница совсем не учитывает комиссию брокера за шорты. Получается «двойной удар» по счету.

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

Про ММВБ и инфляцию за 10 лет

Вот ведь «незадача»: смотрим с 2007-го — да крупная победа инфляции над индексом. А смотрим с октября 2008-го и уже победа индекса над инфляцией даже без дивов. Можем другую начальную точку взять — декабрь 2014-го и о, чудо, опять индекс ММВБ лучше инфляции. И где же мы проиграли инфляции? Это ж очевидно: 2007-октябрь 2008 и  апрель 2011-декабрь 2014. А что там было в первом случае? Всем известный кризис. А во втором? Снижение рейтинга США, потом греческий кризис, ну и наша доморощенная монетарная борьба с инфляцией (о последней, как причине отсутствия роста я писал еще летом 2012-го ). Так вот в чем «собака то порылась» в нашем отставании.

P. S. Чтобы никто не заподозрил, что «поза давит», сразу скажу, что 25-го перед вечерним клирингом занесла меня нелегкая в лонг по Си. А система «длинная», раньше, чем через 3 дня редко выходит (до 25-го июля с 23-го июня в ауте просидела). И рад бы написать что-нибудь «гадкое» про рубль, но истина дороже: на растущих нефти и евро меня из этой позы с прибылью не выпустят. Так именно эти два фактора «всему голова» сейчас, а не политический «шум». А вот прогнозов по нефти и евро у меня нет и быть не может.

Трейдер о шахматах, детях, программировании, дорогах и Костроме

Гонял на шахматные соревнования в Кострому.  Написал свое овервью по этому поводу.



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

Уровень знания на смарт-лабе

Увидел ТУТ пост значит на нашем любимом смарт-лабе.

Название будоражит — Банки исключают из пищевой цепочки!

Среди лайкнувших есть г-н Олейник, что весьма странно....

Речь идет о денежном рынке МБ, о РЕПО с ЦК. Автор заканчивает пост словами - Лед тронулся господа, те банки что мы знали лет через 5 изменятся до неузнаваемости или вымрут.  Комментарии комментировать не будем.

Ох… а то, что рынок РЕПО с ЦК существует уже ни один год — никто видимо не знает, автор точно. И причем тут банки? Сегодня это брокерский бизнес. Звонишь брокеру (если есть такая услуга и договоренность) и говоришь — хочу РЕПО с ЦК. Есть остатки? — размещай, т.ч. скорее уж брокеров выжимают, а не банки. Наверное, если биржа сделает прямой доступ к СВОП-ам, то появится аналогичный пост. То что сегодня СВОП-ы доступы давно для всех (через брокера) тоже для многих загадка:-) Для тех кто не в теме, РЕПО это деньги-бумаги (условно), а СВОП-ы это деньги-деньги. 

Да и кого выжимают? Те у кого есть 3 млрд рублей (кажется столько прописали) да им любой брокер с минимальным интересом даст эти сервисы. Реально компании, дай Бог 0,3% наварят из крупняка на прямом доступе. Только необходимый штат и структура может их и сожрет. Ну а те кто поменьше — не получат ничего.

В общем учите мат часть. Звоните брокерам и требуйте РЕПО с ЦК и СВОПЫ, если есть хотя бы 5 млн рублей на счете и будет Вам счастье. Иметь свободный кэш овернайт и давать им пользоваться брокеру, а не получать с него % — вверх идиотизма:-)

С добрым утром!

Блокчейн в биткоине. Что это такое простыми словами. Теория. Урок 1

Разбираем что такое БЛОКЧЕЙН простыми словами. Это основы пока что идут только. Смотрите на накажем канале youtube полный видеокурс о криптовалютах.


SWT-МЕТОД. 1. Классический технический анализ

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

СОДЕРЖАНИЕ

1.1. Аналитическая поддержка торговых операций
1.2. Что такое тренд в техническом анализе? Виды трендов
1.3. Глубина коррекции как критерий смены типа тренда
1.4. Фигуры технического анализа как критерий смены типа тренда
1.5. Проблемы классического технического анализа


1.1. Аналитическая поддержка торговых операций

SWT-МЕТОД. 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

К теме ДУ

Коль это столь «злободневно» вставлю свои «пять копеек».
ДУ с точки зрения учредителя управления:
1. Без риска на рынке можно получить только безрисковую ставку. Все, кто утверждает иное, в лучшем случае лохи, в худшем мошенники.
2. Хотите иметь доходность выше безрисковой ставки — допускайте риск.
3. Не хотите рисковать самостоятельно — отдавайте в ДУ с оговоренным риском.

Почему услуга ДУ не должна существовать для тех, кто подходит под все три пункта?

ДУ с точки зрения управляющего

1. Возможность развития бизнеса.
2. При выполнении параметров оговоренного  риска безрисковый актив, в отличии от кредита, ставка которого заведомо выше безрисковой, а значит ее покрытие — заведомый риск.

Таким образом при соблюдении и совпадении вышеуказанных пунктов услуга ДУ взаимовыгодна. А почему взаимовыгодная услуга не имеет права на существование? Никто не предлагает тащить в ДУ тех, кто готов самостоятельно рисковать на рынке.

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