Избранное трейдера АлексейФ
HV, IV, RV, LV, SV – каких только волатильностей не напридумывали….
Куда опционщику смотреть? Что брать за основу? Это я еще про методы измерения не упомянул. Хотя с методами измерения HV – более-менее сошлись во мнении, что Yang-Zhang рулит. Вроде как адекватно описывает.
Не будем оспаривать, по крайней мере не в этой статье.
Я за другое – КАК ЭТО ВСЕ УВИДЕТЬ? В книжках учат наложить два графика друг на друга – HV на IV (ну или на оборот). Посмотреть кто выше – того продать, кто ниже – того купить:
Волатильность — это «медленная цена» или просто стоимость. Т.е. цена опциона зависит от базового актива, дней до экспиры и уровня страха трейдеров. Меняется она очень быстро. Чтобы оценивать именно стоимость опциона (страховки) – как раз и используется IV волатильность. Далее трейдерам нужно понять какая «медленная цена» у самого базового актива – HV волатильность. Вот для нее придумали формулы измерения исторической волатильности. Если погружаться в эти формулы, то начинают появляться новые параметры – приращение доходности, дисперсия и среднеквадратичное отклонение — сигма. Если первые два параметра это промежуточные вычисления, то сигма используется уже более активно. Господин Гаусс когда-то доказал, что в нормально распределенных случайных процессах в 68% случаев изменение величины (у нас это приращение доходности) от среднего не превысит одной сигмы. Те, кто давно в рынке скажут – рынок ни капли не нормально распределяет свои приращения и поправят Гаусса до величины 58%. Всё это интересно, занимательно, но заставляет нас ворошить знания по теорверу и статистике. А нам – трейдерам – дайте лучше кнопку «БАБЛО», а не вот это вот все…..
--[[ индикатор: --]] Settings= { Name = "A_zig_channel_nested", -- название индикатора -- leng=50, -- длина proc0=10, proc=2, delt=40, minh = 0.5, line= { { Name = "cur1", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur2", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur3", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur4", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur5", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur6", Type =TYPE_LINE, Width = 2, Color = RGB(255,0,0) }, { Name = "cur7", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,255) }, { Name = "cur8", Type =TYPE_LINE, Width = 2, Color = RGB(255,0,0) }, { Name = "cur9", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,255) }, { Name = "cur10", Type =TYPE_LINE, Width = 2, Color = RGB(255,0,0) }, { Name = "cur11", Type =TYPE_LINE, Width = 2, Color = RGB(0,0, 255) }, { Name = "cur12", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur13", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,255) }, { Name = "cur14", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) } } } function Init() 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 v14=nil y_1 = nil y_2 = nil x_1 = 1 x_2 = 1 x_3 = 1 sz = 1 minh = 0 return 14 end function recalcline(num1, num2, vFrom, vTo, index, delt) --[[ 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 --]] 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, vTo do y = a*i + b if C(i) < y and i <= vTo then if y-C(i) > vminus then vminus = y-C(i) end end if C(i) > y and i <= vTo then if C(i)-y > vplus then vplus = C(i)-y 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 --]] -- 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 --]] -- end end --end if vTo+delt > index then delt = 0 end if minh*C(vFrom)/100 < vplus + vminus then for i = vFrom, vTo+delt do if i <= index then y = a*i + b m = 0 if C(vTo) > C(vFrom) and y+vplus < C(vTo)+2*(C(vTo)-C(vFrom)) and y+vplus > C(vFrom)-2*(C(vTo)-C(vFrom)) then m = 1 end if C(vTo) < C(vFrom) and y+vplus < C(vFrom)+2*(C(vFrom)-C(vTo)) and y+vplus > C(vTo)-2*(C(vFrom)-C(vTo)) then m = 1 end if i <= vTo then m = 1 end if m == 1 then SetValue(i, num1, y+vplus) Setval(i, num1, y+vplus) end m = 0 if C(vTo) > C(vFrom) and y-vminus < C(vTo)+2*(C(vTo)-C(vFrom)) and y-vminus > C(vFrom)-2*(C(vTo)-C(vFrom)) then m = 1 end if C(vTo) < C(vFrom) and y-vminus < C(vFrom)+2*(C(vFrom)-C(vTo)) and y-vminus > C(vTo)-2*(C(vFrom)-C(vTo)) then m = 1 end if i <= vTo then m = 1 end if m == 1 then SetValue(i, num2, y-vminus) Setval(i, num2, y-vminus) end end end end end return 0 end function channel(curto, curfrom, index, num1, num2, num3, num4, num5, num6) a1 = 0 a2 = 0 a3 = 0 a4 = 0 n = 0 a = 0 b = 0 for i = curfrom, curto 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 = curfrom, curto do y = a*i + b if y>C(i) and y-C(i) > vminus then vminus = y - C(i) end if y<C(i) and C(i)-y > vplus then vplus = C(i) - y end end --[[ if vminus_n ~= 0 then vminus = 2*vminus/vminus_n end if vplus_n ~= 0 then vplus = 2*vplus/vplus_n end --]] x1 = curfrom x2 = curfrom x3 = curfrom y1 = C(x1) y2 = C(x2) y3 = C(x3) --de = 0.5*(vplus + vminus)/C(index-leng) --/(C(index-leng) - (a*(index-leng) + b - vminus)) de = proc*C(curfrom) delt = 10 if curto+delt > index then delt = 0 end if minh*C(curfrom)/100 < vplus + vminus then for i = curfrom, curto+delt do y = a*i + b m = 0 if C(curto) > C(curfrom) and y+vplus < C(curto)+2*(C(curto)-C(curfrom)) and y+vplus > C(curfrom)-2*(C(curto)-C(curfrom)) then m = 1 end if C(curto) < C(curfrom) and y+vplus < C(curfrom)+2*(C(curfrom)-C(curto)) and y+vplus > C(curto)-2*(C(curfrom)-C(curto)) then m = 1 end if i <= curto then m = 1 end if m == 1 then SetValue(i, num5, y + vplus) Setval(i, num5, y+ vplus) end --SetValue(i, 2, y) m = 0 if C(curto) > C(curfrom) and y- vminus < C(curto)+2*(C(curto)-C(curfrom)) and y- vminus > C(curfrom)-2*(C(curto)-C(curfrom)) then m = 1 end if C(curto) < C(curfrom) and y- vminus < C(curfrom)+2*(C(curfrom)-C(curto)) and y- vminus > C(curto)-2*(C(curfrom)-C(curto)) then m = 1 end if i <= curto then m = 1 end if m == 1 then SetValue(i, num6, y - vminus) Setval(i, num6, y-vminus) end --vl = C(i) -- (y - vminus) vl = C(i) -- (y - vminus) if i == curfrom then y1 = vl y2 = vl y3 = vl else if (vl > y1+de and y1 < y2) or (x1==curfrom and vl > y1) then x3 = x2 y3 = y2 x2 = x1 y2 = y1 x1 = i y1 = vl end if vl > y1 and vl > y2 then x1 = i y1 = vl end if (vl < y1-de and y1 > y2) or (x1==curfrom and vl < y1) then x3 = x2 y3 = y2 x2 = x1 y2 = y1 x1 = i y1 = vl end if vl < y1 and vl < y2 then x1 = i y1 = vl end end end --[[ k = (C(x1)- C(x2))/(x1- x2) for i = x2, x1 do curv = i*k + C(x1) - x1*k SetValue(i, 4, curv) end k = (C(x2)- C(x3))/(x2- x3) for i = x3, x2 do curv = i*k + C(x2) - x2*k SetValue(i, 5, curv) end --]] recalcline(num1, num2, x2, x1, index, 20) recalcline(num3, num4, x3, x2, index, 20) end end end function Setval(i, num, v) if sz == i then if num == 1 then v1 = v end if num == 2 then v2 = v end if num == 3 then v3 = v end if num == 4 then v4 = v end if num == 5 then v5 = v end if num == 6 then v6 = v end if num == 7 then v7 = v end if num == 8 then v8 = v end if num == 9 then v9 = v end if num == 10 then v10 = v end if num == 11 then v11 = v end if num == 12 then v12 = v end if num == 13 then v13 = v end if num == 14 then v14 = v end end end function OnCalculate(index) -- leng = Settings.leng minh = Settings.minh delt = Settings.delt delt2 = delt proc0 = Settings.proc0 proc0 = proc0/100 proc = Settings.proc proc = proc/100 sz = Size() vl = C(index) if index == 1 then y_1 = vl y_2 = vl else if C(index) > y_1*(1+proc0) and y_1 < y_2 then x_3 = x_2 x_2 = x_1 y_2 = y_1 x_1 = index y_1 = C(index) end if C(index) > y_1 and C(index) > y_2 then x_1 = index y_1 = C(index) end if C(index) < y_1*(1-proc0) and y_1 > y_2 then x_3 = x_2 x_2 = x_1 y_2 = y_1 x_1 = index y_1 = C(index) end if C(index) < y_1 and C(index) < y_2 then x_1 = index y_1 = C(index) end end if x_1 ~= index then curfrom = x_1 curto = index else curfrom = x_2 curto = x_1 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, 10, curv) end end end --]] if index == sz then --[[ curto = x_1 curfrom = x_2 k = (C(curto)- C(curfrom))/(curto- curfrom) for i = curfrom, curto do curv = i*k + C(curto) - curto*k SetValue(i, 11, curv) end --]] curto = index curfrom = x_1 --[[ k = (C(curto)- C(curfrom))/(curto- curfrom) for i = curfrom, curto do curv = i*k + C(curto) - curto*k SetValue(i, 10, curv) end --]] channel(curto, curfrom, index, 6, 7, 8, 9, 1, 2) curto = x_1 curfrom = x_2 channel(curto, curfrom, index, 10, 11, 12, 13, 3, 4) end return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 , v12, v13, v14 end
В период майских праздников Московская и Санкт-Петербургская биржи будут работать по следующему графику:
1–3 мая и 9–11 мая 2020 года – выходные праздничные дни, торги в указанные дни не проводятся.
30 апреля, 6–8 мая 2020 года – рабочие дни, торги проводятся в обычном режиме.
Московская биржа
30 апреля, 6–8 мая 2020 года – торги в обычном режиме.
4–5 мая 2020 года – торги на фондовом и срочном рынках будут проводиться в обычном режиме, на валютном – с ограничениями.
9–11 мая 2020 года – выходные дни на всех рынках биржи.
Санкт-Петербургская биржа
1, 4–8 и 11 мая 2020 года – торги в обычном режиме
Executive summary:
Есть очень много людей, которые знают, как играть в футбол, как управлять государством и как построить самолет. Только очень жаль, что все они уже работают парикмахерами и таксистами. (Дж. Буш-Старший)
ФосАгро опубликовала операционные результаты за I кв. 2020 г. Компания за отчётный год увеличила производство удобрений на 8,6% по сравнению с аналогичным периодом прошлого года – до 2546,6 тыс. тонн. А вот производство апатитового и нефелинового концентратов увеличилось всего на 0,9% – до 2955 тыс. тонн.
Сильные производственные результаты обусловлены модернизацией производственных узлов на заводах в Череповце и Балаково, что в свою очередь позволило ФосАгро увеличить производство удобрений. Также компания постоянно запускает новые линии по производству удобрений, которые строила на протяжении последних нескольких лет. В частности, в этот раз, запустили линии производства сульфата аммония и серной кислоты в Череповце с проектной мощностью 300 тыс. тонн и 1 100 тыс. тонн в год соответственно. К тому же, это позволит более чем в 2 раза сократить закупки сульфата аммония, который используется, как сырьё в производстве сульфатных удобрений.