Избранное трейдера dimaz07
Покупаем 20 ликвидных акций, которые по нашему субъективному мнению будут расти в перспективе нескольких ближайших недель.
Каждый день в конце торговой сессии удаляем из списка акции, которые показали убыточные дни подряд с общим значением, допустим -0.5% и ниже.
Например, с начала покупки бумага показала вчера первый минус на уровне -0.3 и сегодня на уровне -0.4, в сумме -0.7, что меньше -0.5, значит сегодня её продаём.
Или бумага сегодня первый раз с начала «рыбалки» показала убыток -0.6, значит тоже продаём.
Полученные средства в этот же день в равных долях распределяем по оставшимся бумагам в портфеле.
Продолжаем подобное действие до того дня, когда придётся продать последнюю бумагу из списка, которая аккумулировала в себе все средства
Считаем прибыль/убыток и снова закидываем «невод».
Стратегия простая и в то же время эффективная.
В портфеле всегда только самые «сильные» в моменте бумаги, из которых выжимается весь потенциал среднесрочного движения.
Если попадаем на дивидендную отсечку Т-2, то бумагу естественно придётся продать по установленному правилу, но позже получим дивиденды примерно равные уровню падения.
Можно поиграться с параметрами, например 30 бумаг и дневной убыток больше «рыночного шума», допустим -1% и ниже.
Начало покупок можно выбирать по дневным свечам Хейкен Аши на индексе ММВБ, которые очень точно показывают зарождающиеся тренды.
Например, вчера была первая зелёная свеча после серии красных, следовательно сегодня уже получили бы прибыль.
Я написал два поста про волатильность в рамках тем по развитию финансовой грамотности. Я показал, что ценовую волатильность можно измерять с помощью показателя Average True Range (ATR) и с помощью него неплохо можно выставлять ордера на ограничения потерь (stop loss). Полезно тем, кто активно торгует.
Второй показатель волатильности — это стандартное (среднеквадратичное) отклонение. Применяется для показателей доходности актива и удобен при составление своего портфеля и его последующей оптимизации. (Кстати, на встречи в прошлую субботу в рамках вебинара из курса ТРИ КИТА ИНВЕСТИЦИЙ, я как раз показывал как с помощью Excel можно искать оптимальный портфель для себя, зная доходность и волатильность. В эту субботу я покажу как использовать бету для составления собственного портфеля и как его оптимизировать, а также поговорим о пассивных и активных стратегиях управления портфелем. Кому интересно научиться инвестировать на уровне профессионала — присоединяйтесь. Действует скидка❗️
Procent - величина зигзага в % k - коэффизиент ширины канала Ext - =0-канал стоится по средним =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
Одинокий боец идущий в огонь в рукопашную или взвод роботов не знающий страха, у кого больше шансов выжить?
Всех приветствую!
Не планировал писать квартальные отчеты, однако! Ожидания прошлого года оправдались. Затишье сменилось лютой волатильностью, которая за первый квартал почти удвоила счет +95%.
Общая эквити тут.
Я уже писал, что у меня сделана C++ DLL, которая получает данные из Lua и пишет их в БД SQLite. Уже писал также, что DLL под Lua делается на раз, и даже приводил коды и шаблон проекта простенькой C++ DLL. Посмотрело несколько тысяч, скачало, аж 12 человек, применят от силы двое. КПД постов, прямо скажем, оч низкий.)
В DLL реализована как связь с Lua, и будет реализована сама стратегия, вот только не решил какая из них. Повторять старые стратегии на новой для меня платформе Quik уже неинтересно, а новых моделей АТС отработано уже несколько. Все моделируется в Python. Часть стратегий не требует сложной математики, и могут быть легко перенесены непосредственно на С++. Другие непосредственно в DLL перенесены быть не могут, т.к. используют пакеты Python — всяческие регрессии и машинное обучение.
В общем, получилось, что DLL является шаблоном для любой стратегии. Все необходимые для АТС данные доступны АТС — реал-тайм данные поступают в DLL непосредственно из терминала, а необходимая история пишется DLL в БД SQLite и читается АТС из базы данных.
Уже и не знаю, сколько раз это было написано, в том числе и здесь, но повторю еще раз.Торгуя опционы, Вы торгуете гамму и вегу. Т.е., прогнозируете будущую волатильность базового актива и IV. Тета — это просто последствия Вашей гамма-ставки.Если ставите на то, что в ближайшие n-дней диапазон движения актива будет меньше, чем за последние n-дней, то создаете позицию с отрицательной гаммой. Соответственно, тета позиции будет положительной.