Избранное трейдера Андрей из Сибири
--[[
индикатор:
канал на последнем зигзаге
индикатор строит канал по зигзагу, показывает слом тренда при выходе цены за границы канала
параметры:
Procent - величина зигзага в %
k - коэффизиент ширины канала
Ext - =0-канал стоится по средним =1-канал стоится по экстремуму
--]]
Settings=
{
Name = "Zigzag_channel_inc", -- название индикатора
Procent=5, -- величина зигзага в %
k=2, -- коэффизиент ширины канала
Ext=1, -- =0-канал стоится по средним =1-канал стоится по экстремуму
shif=0,
line=
{
{
Name = "zigzagline",
Type =TYPE_LINE,
Width = 1,
Color = RGB(120,90, 140)
},
{
Name = "cur1",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0, 0)
},
{
Name = "cur2",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,200, 200)
},
{
Name = "cur3",
Type =TYPE_LINE,
Width = 2,
Color = RGB(200,200, 0)
},
{
Name = "cur4",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0, 0)
},
{
Name = "cur5",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 255)
},
{
Name = "cur6",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "cur7",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "cur8",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "cur9",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "cur10",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "cur11",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 0)
},
{
Name = "cur12",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 0)
}
}
}
function Init()
y1 = nil
y2 = nil
y3 = nil
y4 = nil
x1 = 1
x2 = 1
x3 = 1
x4 = 1
oldindex = 1
a_01 = 0
b_01 = 0
a_02 = 0
b_02 = 0
vminus_01 = 0
vplus_01 = 0
vminus_02 = 0
vplus_02 = 0
vFrom_01 = 1
vTo_01 = 1
vFrom_02 = 1
vTo_02 = 1
vminus = 0
vplus = 0
vminus_n = 0
vplus_n = 0
ret = 0
last_ind = 1
v1=nil
v2=nil
v3=nil
v4=nil
v5=nil
v6=nil
v7=nil
v8=nil
v9=nil
v10=nil
v11=nil
v12=nil
v13=nil
return 13
end
function recalcline(num, index, rec)
if index == Size()-sh and rec == 0 then
for i = 1, index do
if m == 1 then
SetValue(i, 3, nil)
SetValue(i, 4, nil)
end
if m == 2 then
SetValue(i, 6, nil)
SetValue(i, 7, nil)
end
end
end
if index == Size()-sh or rec == 1 then
if num == 1 then
vFrom = 0 --[[ --]]
vTo = 0
if x3 < x2 then
vFrom = x3
vTo = x2
else
vFrom = x2
vTo = x3
end
end
if num == 2 then
vFrom = 0
vTo = 0
if x1 < x2 then
vFrom = x1
vTo = x2
else
vFrom = x2
vTo = x1
end
end
if vFrom < 1 then
vFrom = 1
end
a1 = 0
a2 = 0
a3 = 0
a4 = 0
n = 0
a = 0
b = 0
for i = vFrom, vTo do
n=n+1
a1 = a1+i*C(i)
a2 = a2+i
a3 = a3+C(i)
a4 = a4+i*i
end
if((n*a4 - a2*a2) ~= 0) then
-- if oldindex ~= Size() then
a = (n*a1 - a2*a3)/(n*a4 - a2*a2)
b = (a3 - a*a2)/n
vminus = 0
vplus = 0
vminus_n = 0
vplus_n = 0
for i = vFrom, index do
y = a*i + b
if C(i) < y and i <= vTo then
if ex == 0 then
vminus = vminus + y - C(i)
vminus_n = vminus_n + 1
else
if i == vFrom then
vminus = 0
end
if y-C(i) > vminus then
vminus = y-C(i)
end
end
end
if C(i) > y and i <= vTo then
if ex == 0 then
vplus = vplus + C(i) - y
vplus_n = vplus_n + 1
else
if i == vFrom then
vplus = 0
end
if C(i)-y > vplus then
vplus = C(i)-y
end
end
end
m = 0
if C(vTo) > C(vFrom) and y < C(vTo)+0.1*(C(vTo)-C(vFrom)) and y > C(vFrom)-0.1*(C(vTo)-C(vFrom)) then
m = 1
end
if C(vTo) < C(vFrom) and y < C(vFrom)+0.1*(C(vFrom)-C(vTo)) and y > C(vTo)-0.1*(C(vFrom)-C(vTo)) then
m = 1
end
if m == 1 then
--SetValue(i, 2, y)
end
end
--end
if ex == 0 then
if vminus_n ~= 0 then
vminus = kk*vminus/vminus_n
end
if vplus_n ~= 0 then
vplus = kk*vplus/vplus_n
end
end
end
if num == 1 then
a_01 = a
b_01 = b
vminus_01 = vminus
vplus_01 = vplus
vFrom_01 = vFrom
vTo_01 = vTo
end
if num == 2 then
a_02 = a
b_02 = b
vminus_02 = vminus
vplus_02 = vplus
vFrom_02 = vFrom
vTo_02 = vTo
end
return 1
end
return 0
end
function levels(x, y, num, index, rec)
if y ~= nil and x ~= 1 and (index ==Size() or rec==1) then
for i = 1, index do
if i >= x then
SetValue(i, num, y)
else
SetValue(i, num, nil)
end
end
end
end
function inclevels(x_1, y_1, x_2, y_2, y_3, index, num, rec)
if y_2 ~= nil and x_2 ~= 1 and (index ==Size() or rec==1) then
need = 1
for i = x_2+1, x_1-1 do
y = ((y_2 - y_1)*i - x_1*y_2 + x_2*y_1 )/(x_2-x_1)
if (y_1 < y_3 and C(i) < y ) or (y_1 > y_3 and C(i) > y ) then
need = 0
break
end
end
--need = 1
if need == 1 then
for i = x_2, index do
y = ((y_2 - y_1)*i - x_1*y_2 + x_2*y_1 )/(x_2-x_1)
if i >= x_2 then
if i > x_1 and (C(Size())*1.3 < y or C(Size())*0.7 > y) then
SetValue(i, num, nil)
else
SetValue(i, num, y)
end
else
SetValue(i, num, nil)
end
end
end
end
end
function OnCalculate(index)
de = Settings.Procent
kk = Settings.k
ex = Settings.Ext
sh = Settings.shif
v1=nil
v2=nil
v3=nil
v4=nil
v5=nil
v6=nil
v7=nil
v8=nil
v9=nil
v10=nil
v11=nil
v12=nil
if index > Size()-sh then
--return nil, nil, nil, nil, nil, nil, nil
return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 , v12, v13
end
vl = C(index)
if index == 1 then
y1 = vl
y2 = vl
else
if C(index) > y1*(1+de/100) and y1 < y2 then
x4 = x3
x3 = x2
x2 = x1
y4 = y3
y3 = y2
y2 = y1
x1 = index
y1 = C(index)
ret = recalcline(1, index, 0)
ret = recalcline(2, index, 0)
levels(x1, y1, 8, index, 0)
levels(x2, y2, 9, index, 0)
levels(x3, y3, 10, index, 0)
levels(x4, y4, 11, index, 0)
inclevels(x1, y1, x3, y3, y2, index, 12, 0)
inclevels(x2, y2, x4, y4, y3, index, 13, 0)
end
if C(index) > y1 and C(index) > y2 then
x1 = index
y1 = C(index)
end
if C(index) < y1*(1-de/100) and y1 > y2 then
x4 = x3
x3 = x2
x2 = x1
y4 = y3
y3 = y2
y2 = y1
x1 = index
y1 = C(index)
ret = recalcline(1, index, 0)
ret = recalcline(2, index, 0)
levels(x1, y1, 8, index, 0)
levels(x2, y2, 9, index, 0)
levels(x3, y3, 10, index, 0)
levels(x4, y4, 11, index, 0)
inclevels(x1, y1, x3, y3, y2, index, 12, 0)
inclevels(x2, y2, x4, y4, y3, index, 13, 0)
end
if C(index) < y1 and C(index) < y2 then
x1 = index
y1 = C(index)
end
end
--[[
if x1 ~= index then
curfrom = x1
curto = index
else
curfrom = x2
curto = x1
end
if curto ~= curfrom and curfrom ~= nil and curto ~= nil then
if C(curto) ~= nil and C(curfrom) ~= nil then
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, index do
curv = i*k + C(curto) - curto*k
SetValue(i, 1, curv)
end
end
end
--]]
if index == Size()-sh and ret == 0 then
ret = recalcline(1, index, 1)
ret = recalcline(2, index, 1)
levels(x1, y1, 8, index, 1)
levels(x2, y2, 9, index, 1)
levels(x3, y3, 10, index, 1)
levels(x4, y4, 11, index, 1)
inclevels(x1, y1, x3, y3, y2, index, 12, 1)
inclevels(x2, y2, x4, y4, y3, index, 13, 1)
end
if index == Size()-sh then --- and index ~= last_ind
if vTo_01 - vFrom_01 > 500 then
vFrom_01 = vTo_01-500
end
for i = vFrom_01, index do
y = a_01*i + b_01 + vplus_01
m = 0
if C(vTo_01) > C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then
m = 1
end
if C(vTo_01) < C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then
m = 1
end
if m == 1 then
SetValue(i, 3, y)
if i == index then
v3 = y
end
end
y = a_01*i + b_01 - vminus_01
m = 0
if C(vTo_01) > C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then
m = 1
end
if C(vTo_01) < C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then
m = 1
end
if m == 1 then
SetValue(i, 4, y)
if i == index then
v4 = y
end
end
end
if vTo_02 - vFrom_02 > 500 then
vFrom_02 = vTo_02-500
end
for i = vFrom_02, index do
y = a_02*i + b_02 + vplus_02
m = 0
if C(vTo_02) > C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then
m = 1
end
if C(vTo_02) < C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then
m = 1
end
if m == 1 then
SetValue(i, 6, y)
if i == index then
v6 = y
end
end
y = a_02*i + b_02 - vminus_02
m = 0
if C(vTo_02) > C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then
m = 1
end
if C(vTo_02) < C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then
m = 1
end
if m == 1 then
SetValue(i, 7, y)
if i == index then
v7 = y
end
end
end
last_ind = index
end
return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 , v12, v13
end
Добрый вечер!
Уже 8 апреля, а это значит, что скоро закончится прием налоговых деклараций – 30 апреля. По подаче декларации на возврат НДФЛ от внесенных на ИИС средств я уже писал недавно, сейчас только жду уведомление от налоговой.
Второй важный вопрос по декларированию доходов инвестора – самостоятельная уплата НДФЛ по дивидендам компаний, по которым ваш брокер не является налоговым агентом и не уплачивает налог 13% с дивидендов за вас. В этом случае дивиденды к вам на счет приходят неочищенными от налогов и вам самим нужно заплатить налог. Об этом будет сегодняшний пост.
Такая потребность часто возникает в случае, если компания зарегистрирована за рубежом или в оффшорных зонах. Лично мой брокер по ним не удерживает НДФЛ. Примеры таких компаний – Полиметалл, Русал, Яндекс.
Поэтому уточните лишний раз у своего брокера, удерживает ли он НДФЛ по дивидендам от этих компаний. Если нет, и вы об этом не будете знать, то вам могут начать начислять пени за неуплату налогов.
Конечно, часто налоговой пофиг на ваши копейки. Я, когда изучал эту тему, часто наталкивался на комментарии людей, которые все подали и оплатили налог как положено, но налоговая им все возвращала обратно, думая, что они уплатили излишний налог. Может потому, что это необычные пока для России декларации (в отличие от всяких имущественных и социальных) и операционисты ошибаются с ними. В любом случае, я предпочитаю не быть плохишом и делать все как надо, если нет путей добросовестной оптимизации налогов.
Итак, расскажу пошагово, как самостоятельно уплатить налог с дивидендов.
Это все делает онлайн на сайте Налог.ру. Как там зарегистрироваться и как получить электронную цифровую подпись здесь не буду описывать, т.к. писал уже в посте «Вычет по ИИС (тип А). Инструкция».
Сначала заходим в личный кабинет на сайте Налог.ру и выбираем «Жизненные ситуации» → «Подать декларацию 3-НДФЛ» → «Заполнить онлайн».
1. Вкладка «Данные» — отвечаем на 2 простых вопроса и жмем «Далее».
2. Вкладка «Доходы» — удаляем все лишние источники дохода в пределах РФ и выбираем «За пределами РФ» → «Добавить источник дохода» и заполняем данные о компании, стране ее регистрации. В графе «Вид дохода» выбираем 1010-дивиденды. В поле «Предоставить налоговый вычет» выбираем «Не предоставлять». Заполняем сумму дохода в валюте и дату начисления на брокерский счет (эту информацию смотрите в отчете брокера, предварительно запросив у него). Далее выбираем валюту, в которой пришли дивиденды (код доллара США — 840) и ставим галочку у «Определить курс автоматически», чтобы вручную не переводить доллары в рубли на дату поступления дивидендов. Жмем «Далее».
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
Утвержден Перечень из 646 системообразующих организаций, которых будут спасать.
Из того, что опубликовано, в него вошли:
12 ПАО «НОВАТЭК»
16 ПАО «Газпром нефть»
17 ПАО «Газпром»
18 ПАО «ЛУКОЙЛ»
19 ПАО «Нефтяная компания „Роснефть“
20 ПАО „Сургутнефтегаз“
21 ПАО „Татнефть“ имени В.Д.Шашина
38 ПАО „Мечел“
45 АО „Московская областная энергосетевая компания“
62 ПАО „Интер Рао“
63 ПАО „Квадра-генерирующая компания“
64 ПАО „Россети“
65 ПАО „Русгидро“
67 ПАО „ТГК-14“
68 ПАО „Территориальная генерирующая компания №2“
69 ПАО „Энел Россия“
70 ПАО „Юнипро“
72 ПАО „Транснефть“
94 ПАО „Трансконтейнер“
100 ПАО „Авиакомпания “ЮТэйр»
102 ПАО «Аэрофлот»
130 ПАО «Новороссийский морской торговый порт»
PS
Банки и страховые спасает ЦБ