Избранное трейдера R14
Как понять, какие компании стоит покупать, а какие нет? Что делать, если купленные вами акции выросли: продавать или подождать еще? Как посчитать дорого или дешево торгуется та или иная компания? На все эти вопросы помогает ответить стоимостный подход в инвестициях. Именно о нем мы сегодня поговорим.
Кому удобнее, есть видео-формат:
Покупаем 20 ликвидных акций, которые по нашему субъективному мнению будут расти в перспективе нескольких ближайших недель.
Каждый день в конце торговой сессии удаляем из списка акции, которые показали убыточные дни подряд с общим значением, допустим -0.5% и ниже.
Например, с начала покупки бумага показала вчера первый минус на уровне -0.3 и сегодня на уровне -0.4, в сумме -0.7, что меньше -0.5, значит сегодня её продаём.
Или бумага сегодня первый раз с начала «рыбалки» показала убыток -0.6, значит тоже продаём.
Полученные средства в этот же день в равных долях распределяем по оставшимся бумагам в портфеле.
Продолжаем подобное действие до того дня, когда придётся продать последнюю бумагу из списка, которая аккумулировала в себе все средства
Считаем прибыль/убыток и снова закидываем «невод».
Стратегия простая и в то же время эффективная.
В портфеле всегда только самые «сильные» в моменте бумаги, из которых выжимается весь потенциал среднесрочного движения.
Если попадаем на дивидендную отсечку Т-2, то бумагу естественно придётся продать по установленному правилу, но позже получим дивиденды примерно равные уровню падения.
Можно поиграться с параметрами, например 30 бумаг и дневной убыток больше «рыночного шума», допустим -1% и ниже.
Начало покупок можно выбирать по дневным свечам Хейкен Аши на индексе ММВБ, которые очень точно показывают зарождающиеся тренды.
Например, вчера была первая зелёная свеча после серии красных, следовательно сегодня уже получили бы прибыль.
TICER = "SBER"; CLASS_CODE = "TQBR"; FilePath = getScriptPath() .. "\\export.txt";--путь к файлу save = false;--сохранять данные в файл если false нет, true да f = nil; stopped = false; t_id = nil H = -1; M = -1; VSELL = 0; VBUY = 0; CDelta = 0; CountTrans = 0; PriceTrans = 0.0; t = ""; function OnInit() CountTrans = 0; if save then f = io.open(FilePath,"w"); end CreateTable(); end function main() while not stopped do if IsWindowClosed(t_id) then stopped = true; end sleep(10); end end function CreateTable() t_id = AllocTable(); AddColumn(t_id, 0, "Время", true, QTABLE_STRING_TYPE, 10); AddColumn(t_id, 1, "BUY", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 4, "AVG Цена", true, QTABLE_DOUBLE_TYPE, 15); AddColumn(t_id, 5, "Накопленная Дельта", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 6, "Кол-во сделок", true, QTABLE_DOUBLE_TYPE, 12); tab = CreateWindow(t_id); local NAME = tostring(getParamEx(CLASS_CODE,TICER,"LONGNAME").param_image); SetWindowCaption(t_id, TICER.." ("..NAME..") Баланс покупок/продаж"); SetTableNotificationCallback(t_id, EventCallBack); end function Calc(alltrade) if bit.test(alltrade.flags, 0) then VSELL = VSELL+alltrade.qty; --Продажа else VBUY = VBUY+alltrade.qty; end CountTrans = CountTrans+1; PriceTrans = PriceTrans+alltrade.price; end function OnAllTrade(alltrade) if alltrade.sec_code == TICER then local Rows, Col = GetTableSize(t_id); if H==-1 or H~= alltrade.datetime.hour then H = alltrade.datetime.hour; M = alltrade.datetime.min; t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); end if M==alltrade.datetime.min then Calc(alltrade); else M=alltrade.datetime.min; InsertRow(t_id, -1); local Delta = VBUY-VSELL; Price = PriceTrans/CountTrans; SetCell(t_id, Rows, 6, tostring(CountTrans)); SetCell(t_id, Rows, 0, t); SetCell(t_id, Rows, 1, tostring(VBUY)); SetCell(t_id, Rows, 2, tostring(VSELL)); SetCell(t_id, Rows, 3, tostring(Delta)); local SEC_SCALE = tostring(getParamEx(CLASS_CODE,TICER,"SEC_SCALE").param_value); SEC_SCALE = string.format("%.0f",SEC_SCALE); SetCell(t_id, Rows, 4, string.format("%."..SEC_SCALE.."f", tostring(Price))); if Rows>=2 then local OldPrice = tonumber(GetCell(t_id,Rows-1,4).image); if OldPrice>Price then Red(Rows,4); else Green(Rows,4); end CDelta = tonumber(GetCell(t_id,Rows-1,5).image); CDelta = CDelta + Delta; else CDelta = Delta; end SetCell(t_id, Rows, 5, tostring(CDelta)); if Delta<0 then Red(Rows,3); end if Delta>0 then Green(Rows,3); end if CDelta<0 then Red(Rows,5); end if CDelta>0 then Green(Rows,5); end if save then local Str = tostring(H)..";"..tostring(M)..";"..tostring(VBUY)..";"..tostring(VSELL)..";" ..tostring(Delta)..";"..tostring(Price)..";"..tostring(CDelta); Str=Str.."\n"; SaveFile(Str); end t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); VBUY = 0;VSELL = 0; PriceTrans = 0; CountTrans = 0; Calc(alltrade); end end --if alltrade.sec_code == TICER then end function SaveFile(Str) if f ~= nil then f:write(Str); f:flush(); end end function Red(row,col) SetColor(t_id, row, col, RGB(255,0,0), RGB(0,0,0), RGB(255,0,0), RGB(0,0,0)); end function Yellow(row,col) SetColor(t_id, row, col, RGB(240,240,0), RGB(0,0,0), RGB(240,240,0), RGB(0,0,0)); end function Green(row,col) SetColor(t_id, row, col, RGB(0,200,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0)); end function EventCallBack(t_id, msg, par1, par2) if msg==QTABLE_CLOSE then OnStop(); end; end function OnStop(s) if f ~= nil then f:close(); end if t_id ~= nil then DestroyTable (t_id); end; stopped = true; end
Дивиденды не учитываются изза того, что ещё не закончена разработка раздела Смартлаба «Портфель»