Избранное трейдера Фыва

по

Приносит же!

Приносит же!
Перспективная китайская статистика и бегство из доллара оказались весьма недолговечными факторами роста нефтяных цен. После резкого подъема во вторник последовал откат, вернув рынок к стартовому положению. Цены продолжают оставаться чувствительным к данным по добыче в США, однако устойчивое снижение коммерческих запасов (данные EIA , API ) похоже исчерпало себя как положительный катализатор для рынка. 

С середины апреля нефть стабильно убывала из коммерческих хранилищ США, однако цены двигались по наклонной вниз игнорируя традиционно положительные сигналы. Рынки вероятно объясняли для себя сокращение запасов сезонными факторами, такими как рост потребления топлива в летние месяцы и в целом переключились на довольно простую математику — сокращение производства ОПЕК vs. совокупный рост добычи в США, Ливии и Нигерии. За три месяца американские нефтяники увеличили добычу на 150К баррелей, в Ливии добыча увеличилась с 500К в начале апреля до более чем 1М баррелей, сдерживать добычу в Нигерии также пока не удается. Согласно прогнозу EIA  производство сланцевиков в августе увеличится еще примерно на 100К баррелей. Сравнивая динамику производства в США и странах участниках ОПЕК с неограниченной добычей, последние вносят вклад в перенасыщение рынка существенно больше. Возможность ОПЕК договориться со своими же участниками  - Ливией и Нигерией выглядит более реалистичной нежели чем с США, поэтому заждавшимся быкам есть на что надеяться. К другими положительным факторам можно отнести новости-триггеры, как то улучшение экономической конъюнктуры в экономиках Азии, основных потребителей углеводородов и перебои в поставках, носящих кратковременный эффект.  

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

В России зафиксирован беспрецедентно негативный платежный баланс с 1998 года

В России зафиксирован беспрецедентно негативный платежный баланс с 1998 года 

В РФ наблюдается существенное ухудшение баланса валютных доходов. Повышение потребностей населения и бизнеса в импортных товарах и путешествиях за рубеж на фоне «миграции» дивидендов к иностранным держателям отечественных акций нивелировали объем поступившей в страну валюты. 

По данным Центробанка, в минувшем июне зафиксировано отрицательное сальдо платежного баланса (разница между валютными потоками внутрь и за пределы страны) – российская экономика потеряла на $4 млрд. больше, нежели смогла заработать. Это рекордный показатель с 1998 года, когда случился памятный дефолт. Июньский провал «съел» приток валюты за два последних весенних месяца, что увело квартальное сальдо в небольшой минус (-$300 млн).

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

Минфин разъясняет

По мотивам http://smart-lab.ru/blog/405934.php. Получил ответ из Минфина РФ. Отвечают, что изменений в закон в части ПИФов и ETF не было.
Сам ответ:
Минфин разъясняет
Минфин разъясняет

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

Сентябрь проведет экзамен рублю

За июль-декабрь 2017 г. тридцати крупнейшим компаниям России предстоит выплатить по внешним долгам 14,8 млрд долларов, подсчитали в Центральном банке.

Согласно графику предстоящих выплат в в июле компании направят на погашение долгов 1,5 млрд долларов. Самые крупные выплаты намечены на сентябрь – 5,2 млрд. В декабре им необходимо будет отдать 2,7 млрд долларов.

Однако не вся эта задолженность получена от внешних контрагентов, 5,4 млрд долларов из 14,8 млрд предоставлены внутри группы компаний, то есть выданы либо материнской, либо дочерней, либо входящей в консорциум организацией. К примеру, в сентябре из 5,2 млрд долларов, лишь 2,1 млрд взяты у посторонних структур.

Сентябрь проведет экзамен рублю
Как правило, данные виды кредитов пролонгируются или реструктуризируются. И, в принципе, эти обязательства нельзя полностью считать внешними, так как по сути отдавать придется самим себе.

“С учётом корректировок на внутригрупповое финансирование выплаты крупнейших компаний в 3-4 кварталах 2017 г. будут довольно равномерными и в среднем за месяц составят около 1,5 млрд. дол. (что на треть меньше, чем в аналогичном периоде годом ранее)”, отметил регулятор.



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

Ситуация на текущий момент

Ситуация на текущий момент


​Вчера индекс ММВБ закрыл день белой свечкой. Индекс открылся на локальной поддержке 1930, выполнив сою первую цель по снижению, и после короткой борьбы смог ее удержать, после чего отправился тестировать пробитое ранее сопротивление 1947 (на утро 1945), которое со второй попытки пробил и закрылся выше, что может говорить об окончании коррекции и начале новой волны роста до своей основной пока цели — 1990. Однако это пока под вопросом, поэтому сперва лучше подождать теста сверху пробитого сопротивления и в случае успеха начинать покупки. Напомню. что от 1990 пока ждем более глубокой коррекции с целью 1850. 

Ситуация на утро выглядит нейтрально:

СиПи выполнил свою первую цель  роста 2466 и пробил ее, поэтому здесь можно ждать продолжения роста с целями 2483 и 2510 в случае пробоя. Локальная поддержка, пробой которой отменяет сценарий располагается на отметке 2453, пробой которой можно продавать с целями 2430 и 2400.



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

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

Кривая доходности казначейских обязательств США инвертировалась

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

Доходность казначейских облигаций США

Доходность казначейских обязательств с погашением 19 октября начала резко расти, что привело к инвертированию кривой доходности.

Кривая доходности казначейских облигаций США



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

Запрет открытия шорта по опционам put

Народ — что за шляпа накрыла?!

Опционы колл по газпрому продал без проблем
Опционы пут в шорт не дают продать ни одного контракта — ГО позволяет

Вот что пишет квик — «Ошибка создания заявки. [GW][315] „Запрет Трейдера на открытие позиций по клиентскому счету.“

Открывашка

У кого какой полет?!

P.S.: Весь 2015 и 2016 продавал и никаких запретов не было.

Когда ранили, но не убили

Начинается «морской бой» на нашем фондю, новая партия. Прошлую, перед отсечками (до 18.07), я доблестно проиграл. Зафиксировал вчера убыток в Алросе,  и сегодня получил пяткой в нос от Аэрофлота.

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

Итак, на закрытии сегодня:

Татнефть 386.5, у меня шорт средняя 385.2

Сбербанк 164.34 у меня шорт средняя 163.8

Северсталь 860, у меня шорт средняя 859.2

Аэрофлот 212.7, у меня средняя под 214.

Казалось бы, все неплохо, однако суммарный убыток от Алросы и Аэрофлота -6.5% из-за отсечек, и надо его закрывать, тогда счет выйдет к хаям.

Нарисовал себе табличку, слева бумаги, справа по столбцам цены через каждый -1%, чтобы можно было сразу видеть, кто кого опережает в снижении, и перекладываться, задача приехать на отметку -6% в 2-3 бумагах, и обязательно с аэрофлотом)) его ждет 190, а не 200.

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

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


Рука дрогнула... Итоги


1 июня интуитивно купил 85 лотов Газпрома по 117,98 ( smart-lab.ru/blog/401693.php ).
22 июня докупил еще 167 лотов по цене 119,55 с целью 135 ( smart-lab.ru/blog/405801.php ).
Средняя цена покупки = (850*117,98+1670*119,55)/2520 = 119,02

Сегодня продал все 252 лота по цене 119,65.

Результат:
1. Величина полученных дивидендов = 8,0397*2520=20260 руб.
2. Величина полученных дивидендов за вычетом НДФЛ = 20260*0,87=17626 руб.
3. Прибыль, полученная при продаже бумаги = (119,65-117,98)*850+(119,65-119,55)*2520=1671 руб. 
4. Величина прибыли за вычетом НДФЛ = 1671*0,87=1454 руб.
5. Суммарно получено чистой прибыли = 17626+1454=19080 руб.
6. Срок удержания (отсчитанный от даты между первой и второй покупками) = 56 дней.


7. Результат сделок в %% = 19080/(2520*119,02)*100%=6,36%.

8. Результат в %% годовых = (6,36/56)*365=41,45%.


ВЫВОДЫ.

Несмотря на то, что целевая цена не была достигнута, можно констатировать следующее:

1. Интуитивная торговля может быть прибыльной (когда она базируется на здравом смысле).
2. Покупка под дивиденды может дать неплохой результат даже на такой гнилой бумаге, как Газик.



Всем успехов в торгах.)



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

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