Избранное трейдера OnlyHuman
import requests import datetime import pathlib SECIDs = ["GAZP", "BANEP", "LKOH"] DISK = "E" for SECID in SECIDs: from_date = "2020-05-04" to_date = "2005-01-03" while str(to_date) != from_date: to_date = str(to_date) to_date = to_date.split('-') a = datetime.date(int(to_date[0]), int(to_date[1]), int(to_date[2])) b = datetime.timedelta(days=140) to_date = a + b pathlib.Path("{}:/{}/{}".format(DISK, "Database_MOEX", SECID)).mkdir(parents=True, exist_ok=True) filename = SECID + "_" + str(to_date) + ".csv" with requests.get("http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/tqbr/securities/{}.csv?date={}".format(SECID, to_date)) as response: with open("{}:/Database_MOEX/{}/{}".format(DISK, SECID, filename), 'wb') as f: for chunk in response.iter_content(): f.write(chunk)Для начала пройдемся по его плюсам и минусам. Самый главный минус, что этот парсер качает только определенный период, который уникален для каждой акции, судя по всему для увеличения этого периода надо кинуть бирже на лапу:), и то что информация предоставляется за день, теперь перейдем к плюсам: можно выкачивать историю за определенный период для нескольких инструментов сразу (их количество ограничивается лишь количеством инструментов на мосбиржи), есть возможность назначать диск для сохранения информации, быстрота выгрузки данных.
Как-то писал, что не стоит хранить деньги в товарах. Повторюсь. Комодитиз могут случайно оказаться лучше инфляции, но закономерно они почти всегда хуже. Ставка на товары это и есть, в конечном счете, ставка на инфляцию. Неважно, что в коробке – золото, нефть, металлы, древние и ценные ништяки. Усредненный апсайд здесь только размер инфляции, минус спред, комиссии, черные лебеди, мошенники и т.д. Нет хорошего способа сделать это – фьючерс, етф, металлический счет, физические предметы – все сравнительно плохие, каждый по-своему.
Но если упорствовать в ассет алокейшн, то хочется сделать ставочки на все клеточки. И хоть что-то поставить на клетку «товары». Но я сказал – куда ни плюнь, все плохо. Но выход есть.
Функционально этой ставкой будет покупка антиинфляционных облигаций, «типсов», как говорят в США. У нас это ОФЗ ИН 52001 и 52002.
Да, это называется «облигация». Но по сути это ближе, например, к золоту, чем к нормальному долговому активу.
Bank of America повысил 18-месячную цель по золоту до уровня 3000 $. Цель была повышена с уровня 2000 $, пишет Bloomberg.
Это на 50% выше, чем исторический рекорд в 2011. Такую рекомендацию банк выдал в своём отчете под названием «The Fed can’t print gold».
На текущих уровнях я снова покупаю золото.
________________
telegram: renat_vv
--[[ индикатор: канал на последнем зигзаге индикатор строит канал по зигзагу, показывает слом тренда при выходе цены за границы канала параметры: 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
Всем привет.
Все кто давно пользуется терминалом Квик – знают, что со временем он начинает «подтормаживать», долго загружаться, медленно переключаться между вкладками, а в особо тяжёлых случаях проводить заявки с задержкой. А это уже чревато потерей реальных денег….
В этой статье мы рассмотрим простые действия для ускорения работы Квика, которые нужно проводить регулярно, как сервисное обслуживание в автомобиле. А чтобы был спортивный интерес – проведем замер скорости загрузки терминала.
Поехали!
Итак – включаем секундомер и делаем первоначальные замеры:
Результат времени загрузки до появления окна загрузить новую версию
1 минута 21 секунда.
Ну что ж…. За работу:
1-е что мы сделаем удалим лог файл, который больше всего влияет на загрузку. Переходим в папку с Квиком
Не нашла ничего лучшего, чем начать с цитаты:
«Не придавайте чрезмерного значения тому, где открыть позицию.
Важно лишь, каково направление позиции — бычье или медвежье.
Точкой входа всегда считайте вчерашнюю цену закрытия.
Я сразу узнаю трейдера-новичка по вопросу: «Какая у вас позиция — длинная или короткая?» Какой бы она ни была, это не должно иметь никакого отношения к его мнению о рынке. Затем (если я отвечу, что длинная) он спросит: «А с какого времени?» Какая разница, с какого. Ведь это не имеет отношения ни к медвежьему или бычьему настрою рынка, ни к текущему балансу риска и прибыли длинной позиции.
Важнейшее правило торговли — мощная оборона, а не наступление. Каждый день я делаю допущение, что все мои позиции ошибочны, и решаю, где будут мои стоп-уровни по риску. Я делаю это для того, чтобы определить свои максимально возможные потери». Пол Тюдор Джонс.
***
Речь сегодня – об АТР.
Average true range — Средний истинный диапазон (ATR) — это показатель волатильности рынка. Его ввел Уэллс Уайлдер в книге 'Новые концепции технических торговых систем' и с тех пор индикатор применяется как составляющая многих других индикаторов и торговых систем. (Википедия).