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

по

Таблица "Портфель" в QUIKе


    Представляю таблицу для портфельных инвестиций. В квике до сих пор такого нет. Цвет строки меняется если Прибыль%<>5%. Обновление каждые 5 сек.
Таблица "Портфель" в QUIKе

Для её создания необходимо:
1. Создать файл «tablePortfolio.txt» в папке «C:\QUIK\Scripts». Если папки нет, создать её.
2. Скопировать туда код скрипта
3. Сохранить, выбрав кодировку «ANSI», иначе вместо русских букв могут быть кракозябры.
4. Сменить расширение файла с ".txt" на ".lua"
5. Запустить скрипт командой Сервисы->Lua  скрипты->Добавить (выбрать файл tablePortfolio.lua) ->Запустить

Код скрипта:
IsRun = true
class_code="TQBR"

function main()
   -- Получает доступный id для создания
   t_id = AllocTable()   
   
   -- добавить столбцы
   AddColumn(t_id, 1, "Бумага",       true, QTABLE_STRING_TYPE, 20)
   AddColumn(t_id, 2, "Кол-во",       true, QTABLE_INT_TYPE,     7)
   AddColumn(t_id, 3, "Цена покупки", true, QTABLE_DOUBLE_TYPE, 14)
   AddColumn(t_id, 4, "Цена текущая", true, QTABLE_DOUBLE_TYPE,   14)
   AddColumn(t_id, 5, "Прибыль, р",   true, QTABLE_DOUBLE_TYPE,   14)
   AddColumn(t_id, 6, "Прибыль, %",   true, QTABLE_DOUBLE_TYPE, 14)
   t = CreateWindow(t_id)

   for iRow=1, getNumberOf("depo_limits")-1, 1 do
      rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам"            
      qtyBoughtLots  = tonumber(rowInPortfolioTable.currentbal)         
      limitKind = rowInPortfolioTable.limit_kind          
      if qtyBoughtLots>0 and limitKind<1 then      
         InsertRow(t_id, iRow)-- добавить новую строку вниз таблицы   
      end
   end
   local rows, columns = GetTableSize (t_id)
   InsertRow(t_id, rows+1) -- добавить новую строку вниз таблицы для "Итого"
   
   SetWindowCaption(t_id, "Портфель: прибыли и убытки    © ramirzaev@mail.ru") 

   -- исполнять цикл, пока пользователь не остановит скрипт или не закроет окно таблицы
   while IsRun do 
      if IsWindowClosed(t_id)==true then
         IsRun=false
      end

      local currentPrice=0
      local qtyBoughtLots=0
      local profitAbs = 0
      local profitPerc = 0
      local currentSecCode= ""
      local fullNameOfInstrument = ""
      local limitKind = 0
      local rowInPortfolioTable = {}    -- строка из таблицы "Лимиты по бумагам"
      local tableInstrument = {}    -- данные "Таблицы текущих торгов"
      local iRowInOutTable = 1
	  local totalInvest = 0
	  local totalPortfolio = 0
	  local totalProfit = 0
	  local totalPercent = 0

      for iRow=0, getNumberOf("depo_limits")-1, 1 do
         rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам"         
         
         qtyBoughtLots  = tonumber(rowInPortfolioTable.currentbal)
         
         limitKind = rowInPortfolioTable.limit_kind 
         
         if qtyBoughtLots>0 and limitKind<1    then      -- если кол-во лотов >0 и тип лимита T0
            currentSecCode = rowInPortfolioTable.sec_code
            fullNameOfInstrument =  tostring(getParamEx(class_code, currentSecCode, "SHORTNAME").param_image or "0") --"LONGNAME"
            avgPrice       = tonumber(rowInPortfolioTable.awg_position_price)                  
            currentPrice = GetAskPrice(currentSecCode)   
            profitAbs = (currentPrice-avgPrice)*qtyBoughtLots      
            profitPerc    = 100*currentPrice/avgPrice   - 100
			
			totalInvest = totalInvest + avgPrice*qtyBoughtLots  
			totalPortfolio = totalPortfolio + currentPrice*qtyBoughtLots   
            
            SetCell(t_id, iRowInOutTable, 1, fullNameOfInstrument) -- "Бумага"
            SetCell(t_id, iRowInOutTable, 2, tostring(qtyBoughtLots)) -- "Кол-во"RemoveZero(tostring(qtyBoughtLots)))
            SetCell(t_id, iRowInOutTable, 3, tostring( math_round(avgPrice, 3) ))  -- tostring(avgPrice))   -- "Цена покупки"
            SetCell(t_id, iRowInOutTable, 4, RemoveZero(tostring(currentPrice)))   -- "Цена текущая"
            SetCell(t_id, iRowInOutTable, 5, tostring( math_round( profitAbs, 0)) ) -- "Прибыль, р"
            SetCell(t_id, iRowInOutTable, 6, tostring(math_round(profitPerc, 1)) .."%") -- "Прибыль, %"
            
            if profitPerc >5 then       -- окрашиваем
               ColourRowInGreen(iRowInOutTable)
            elseif profitPerc<-5 then 
               ColourRowInRed(iRowInOutTable)
            else 
               ColourRowInYellow(iRowInOutTable)
            end   
            iRowInOutTable = iRowInOutTable+1
         end
      end
      totalProfit = totalPortfolio - totalInvest 
      totalPercent   = 100*totalProfit/totalInvest  
	  SetCell(t_id, iRowInOutTable, 1, "Итого") 
      SetCell(t_id, iRowInOutTable, 3, tostring( math_round(totalInvest, 0) ))  
      SetCell(t_id, iRowInOutTable, 4, tostring( math_round(totalPortfolio, 0)))  
      SetCell(t_id, iRowInOutTable, 5, tostring( math_round( totalProfit, 0)) ) 
      SetCell(t_id, iRowInOutTable, 6, tostring(math_round(totalPercent, 1)) .."%") 
	  
	  if profitPerc >5 then       -- окрашиваем
               ColourRowInGreen(iRowInOutTable)
            elseif profitPerc<-5 then 
               ColourRowInRed(iRowInOutTable)
            else 
               ColourRowInYellow(iRowInOutTable)
            end   
            iRowInOutTable = iRowInOutTable+1
      sleep(5000) -- пауза 5 сек.
      end
   --message("script table portfolio finished")
end


function ColourRowInRed(num_row)
   SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,150,150), RGB(0,0,0), RGB(255,150,150), RGB(0,0,0))
end
function ColourRowInYellow(num_row)
   SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,255,200), RGB(0,0,0), RGB(255,255,200), RGB(0,0,0))
end
function ColourRowInGreen(num_row)
   SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(150,255,150), RGB(0,0,0), RGB(150,255,150), RGB(0,0,0))
end
function GetAskPrice(inp_Sec_Code )
   local ask = tostring(getParamEx(class_code, inp_Sec_Code, "OFFER").param_value or 0)
   return ask
end
-- Округляет число до указанной точности
function math_round (num, idp)
   local mult = 10^(idp or 0)
   return math.floor(num * mult + 0.5) / mult
end
-- удаление точки и нулей после нее
function RemoveZero(str)
   while (string.sub(str,-1) == "0" and str ~= "0") do
      str = string.sub(str,1,-2)
   end
   if (string.sub(str,-1) == ".") then 
      str = string.sub(str,1,-2)
   end   
   return str
end
function OnStop()
   DestroyTable(t_id)
   IsRun = false   
end
  • обсудить на форуме:
  • QUIK

Риск и доходность: теория и практика

Если те, кто инвестирует в акции, заглянут в учебник, то могут увидеть презабавные вещи, типа портфельной теории Марковица, CAPM.

Хотя вроде бы теория должна помогать зарабатывать, но по факту её привлечение может быть контрпродуктивно. Наверно, поэтому тот же У.Баффет так скептически относится к CAPM.  

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

Проблема этой теории в том, что она противоречит самому верному принципу инвестирования — покупать на дне. А дно — это как обычно высокая волатильность  и большие страхи. Вся прелесть сильной волатильности в том, что она возникает либо при сильном росте, либо при сильном падении.

Вот разве отказались бы вы купить гос. компанию, которая раньше платила дивы в 7%, а после падения цены акций в два раза доходность стала уже 14%, причём сам бизнес компании и подход к выплате дивидендов не изменился?! Я бы не отказался.

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

Реальный рынок нефти против падения цены

В мире много оценок того, сколько нефти добывается в мире и сколько потребляется. Есть данные ОПЕК и данные компании British Petroleum, и эти оценки разнятся между собой. ОПЕК обычно отражает добычу именно нефти, тогда как данные BP, показывают более расширенную картину, учитывая и нефть и другие жидкие виды топлива, аналогичные нефти по назначению, например NGL (жидкое содержание природного газа) и другое. Поэтому чтобы понять, что происходит с балансом нефти в мире, более верным будет оценить именно данные British Petroleum. Причем для сопоставления спроса и предложения в мире, нужно учитывать так же и биотопливо.

Ниже в таблице, представлено то, как выглядит баланс спроса и предложения в нефти в мире по данным BP в миллионах тонн. 

Реальный рынок нефти против падения цены

В 2007 году, образовался дефицит нефти в объеме 51,2 млн. тонн, это тогда и привело к взлету цен на нефть. Далее последовал провал 2008 года, но после него, вплоть до 2013 года, баланс был отрицательный, что тогда и позволило ценам на нефть, устойчиво находиться выше отметки 100 долларов за баррель. В 2014 году, возник избыток нефти в объеме 51 млн. тонн. К 2015 году избыток увеличился до 98 млн. тонн. Поэтому, цены на нефть и обвалились тогда. 

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

Ключевая ставка ЦБ как инструмент для заработка: фьючерсы на RUONIA

Ключевая ставка ЦБ как инструмент для заработка: фьючерсы на RUONIA

В 1994 году в США был запущен фьючерс «Fed Funds», суть которого заключалась в котировании ожиданий по ключевой ставке рынком на определённую дату. С тех пор дериватив позволяет инвесторам хеджировать процентные риски, а спекулянтам отыгрывать изменение ставок в Америке. Российский срочный рынок тоже не стоит на месте: в 2016 году на Московской Бирже появился российский аналог «Fed Funds» —  фьючерс на ставку RUONIA, позволяющий «играть» с ключевой ставкой ЦБ.

RUONIA — это ставка, по которой крупнейшие российские банки выдают друг другу кредиты на срок 1 день (ставка overnight). Её расчёт осуществляется Банком России, подробнее о методике можно узнать на www.ruonia.ru/methodology.html. Как же связаны RUONIA и ключевая ставка? Всё достаточно просто: с помощью объявления ключевой ставки и кредитования под неё банков ЦБ влияет на стоимость межбанковских кредитов. Пример: ЦБ снизил ставку –> кредит для банков у ЦБ стал дешевле -> банки берут в долг у ЦБ -> кредитуют другие банки под меньшую ставку RUONIA, чтобы сделать своё предложение конкурентоспособным по сравнению с ключевой ставкой. То есть RUONIA процентов на 90 определяется ключевой ставкой, остальную её часть определяет объём ликвидности в банковском секторе. Если денег в банках в избытке, то RUONIA будет ниже ключевой, и наоборот. Таким образом, зная, какие решения будет принимать ЦБ и в каком состоянии находится ликвидность банковского сектора, Вы сможете с высокой точностью прогнозировать движения ставки RUONIA.

Фьючерс учитывает средневзвешенную ставку RUONIA за месяц дня его экспирации, а котировка формируется аналогично «Fed Funds»: 100 – ожидаемая рынком средневзвешенная ставка за конкретный месяц. То есть если Вы покупаете фьюч с датой экспирации 31.07.2017, Вам надо следить за средней RUONIA за июль. Наибольший интерес фьючерс на RUONIA представляет в месяцы после заседаний ЦБ: в ближайшее время любопытно будет отслеживать, как себя поведёт фьючерс на августовскую RUONIA до и после заседания Банка России 28 июля.

Изменение ключевой ставки влияет на RUONIA, но не каждый может точно предсказать действия ЦБ! Если Вы считаете, что в данный момент ожидания рынка ошибочны, что можно было часто видеть перед последними заседаниями, то этот инструмент для Вас. Если Вы уверены, что в пятницу ставка опустится до 8,75%, при том что рынок больше верит её сохранение на текущем уровне, так как ожидаемая RUONIA на 8.17 составляет 8,88 % (www.moex.com/a4103), то стоит купить фьючерс на RUONIA прямо сейчас. При этом можно быть уверены, что RUONIA опустится ниже ключевой ставки в условиях текущего избытка ликвидности в банковском секторе (см. последние обзоры денежного рынка). Текущая цена фьючерса на RUONIA 8.17 = 91,12, но раз Вы знаете, что в августе она будет ниже 91,25, я не удивлюсь, если уже сейчас Вы на сайте МосБиржи покупаете этот инструмент. Конечно же, если Ваши ожидания противоположны, ставку можно отыгрывать в другую сторону. Более того, можно отыгрывать и более дальние ставки: фьючерсы на RUONIA существуют на ставки на 12 месяцев вперёд. То есть если Вы лучше рынка прогнозируете, какой будет ключевая ставка в июне следующего года, можете реализовать своё ожидание с помощью дериватива.

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

Рантье на фондовом рынке 2

Моя предыдущая статья про рантье вызвала достаточно много обсуждений. Чтобы всем не писать там и не повторяться, я выскажу своё мнение на наиболее интересные на мой взгляд комментарии.

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

а) Я не буду давать многочисленные ссылки на исследования, можно просто примерно посчитать ручками. Предположим, что у Вас 10лет назад было 1млн.руб., и вы вложили в равных долях в 5 бумаг, например, в известные всем Газпром, Лукойл, Сбербанк, ГМК Норникель, МТС. Вот их дивиденды, взяты с сайта доход.ру для простоты:
  Дивиденды за 2006г.


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

Рантье на фондовом рынке

 
По сути, рантье — это тот, кто имеет относительно стабильный денежный поток, на который можно жить.

Среди основных подходов к ФР наиболее близок будет дивидендный. Причина этого проста — именно он даёт возможность получить денежный поток (пенсию), на которую можно жить.

В отличие от дивидендного подхода есть подход на базе прироста стоимости актива. Это, скажем так, основной подход на ФР. Его популярность заключается в том, что вы сразу видите дело своих рук в виде прироста стоимости портфеля. Для более глубокого понимания различий можно взять пример с недвижимостью. Те, кто обращают своё внимание почти полностью на получаемую аренду, — это как раз представители, условно дивидендного подхода, а те, кто покупают недвижку на стадии незавершёнки с целью продать её подороже по мере готовности, — это любители прироста стоимости.

Хотя дивидендный подход связан с приростом стоимости, но, тем не менее, здесь это второстепенно. Главное тут — это размер дивидендов, их постоянство и возможный прирост.

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

Стратегии доходной работы на ФР

 

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

  Итак, я на текущий момент могу выделить следующие стратегии, которые позволяют зарабатывать средства на ФР:

1) Стратегия, связанная с поиском и «окучиванием» своей ниши. Правда большинство их уже занято крупными игроками, поэтому для большинства трейдеров — это узкие ниши, неинтересные крупным игрокам по разным причинам, обычно из-за плохой ликвидности.

Например, одно время развлекался арбитражём между фьючерсами на ммвб и ртс с учетом курса доллара. Было это, правда, давненько. Тогда из-за низкой ликвидности фьючерса ммвб заработать 5%-10% в месяц почти что безрисково вполне можно было, но суммы там, естественно, были мелковаты.

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

Пересмотр портфеля акций. Июль 2017.

Подвожу итоги майского портфеля акций. smart-lab.ru/blog/396286.php. За два месяца портфель акций и индекс ММВБ снизились на 6,1%. 2017 год складывается пока неудачно для российских инвесторов. В августе 2017 года будет новый пересмотр портфеля. Мои рекомендации на текущий момент представлены в таблице. В качестве цены указана цена покупки/продажи или цена закрытия, если акция удерживается дальше.
Пересмотр портфеля акций. Июль 2017.

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

Статистика счета

Ниже представлено сравнение статистики торгового счета и индекса ММВБ с   1 февраля 2016 г. Из-за малой величины выборки (менее 3 лет) статистика на данный момент не значима.
Пересмотр портфеля акций. Июль 2017.
Пересмотр портфеля акций. Июль 2017.




Бюджет России в трех графиках

1. Президент России утвердил поправки в закон о федеральном бюджете на 2017 г. 
Бюджет России в трех графиках
В рамках новой редакции пересмотрена цена нефти с 40 до 45,6 долларов за баррель. Курс национальной валюты повышен до 64,2 рублей за доллар. Таким образом, теперь стоимость бочки нефти в бюджете на 2017 г. равна 2927 рублям. За период с января по май средняя цена барреля составила примерно 2964 рубля. По итогам пятницы стоимость бочки опустилась до 2830 рублей.



2. Согласно поправкам дефицит бюджета по итогам 2017 г. должен вырасти до 1,9 трлн рублей.
Бюджет России в трех графиках

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

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