Найти - Пользователи
Полная версия: Скачать котировки finam.ru
Начало » Data Mining » Скачать котировки finam.ru
1 2
MQLab
Всем привет.

Подскажите как исправить или дописать код python, нужно скачать котировки с сайта finam.ru

 from urllib.parse import urlencode
from urllib.request import urlopen
from datetime import datetime
tickers_list = ['MERF', 'ISKJ', 'IDVP', 'GTLC', 'SELG', 'GTRK', 'PAZA', 'SIBG', 'TRMK', 'AVAN', 'UNKL', 'OMZZP', 'BELU', 'NSVZ', 'IRGZ', 'ODVA', 'CHKZ', 'LIFE', 'IGST', 'NNSBP', 'KZOSP', 'RLMN', 'MOBB', 'ROSB', 'IGSTP', 'KUZB', 'CNTL', 'RUSP', 'TGKN', 'LVHK', 'JNOS', 'KZOS', 'TTLK', 'SELGP', 'TANL', 'PMSB', 'DASB', 'RUSI', 'FESH', 'PLZL', 'TASB', 'WTCMP', 'TGKA', 'CNTLP', 'DZRDP', 'PMSBP', 'MSTT', 'RZSB', 'VRSBP', 'WTCM', 'RSTI', 'SARE', 'KLSB', 'UKUZ', 'KTSB', 'SZPR', 'MSST', 'MRKU', 'MAGE', 'RTSB', 'ASSB', 'NKSH', 'BANE', 'IRKT', 'POLY', 'FEES', 'MRKP', 'JNOSP', 'TUCH', 'DSKY', 'MFGSP', 'KCHE', 'AFLT', 'MISBP', 'VGSBP', 'MAGEP', 'RSTIP', 'NAUK', 'RTGZ', 'KROT', 'ZILL', 'NVTK', 'MFGS', 'YRSBP', 'KTSBP', 'MRSB', 'KBTK', 'KRSB', 'TUZA', 'MOEX', 'KOGK', 'GAZA', 'NKNC', 'VTBR', 'AGRO', 'UWGN', 'UNAC', 'GAZAP', 'UPRO', 'KROTP', 'MGTS', 'ALBK', 'MSNG', 'RLMNP', 'VJGZ', 'MTLR', 'CHEP', 'MRKV', 'SAREP', 'KRSBP', 'TGKB', 'RGSS', 'RBCM', 'MISB', 'VZRZP', 'URKZ', 'IRAO', 'KCHEP', 'SIBN', 'RAVN', 'RTKM', 'ROLO', 'PRFN', 'MRKZ', 'RTSBP', 'QIWI', 'GMKN', 'ENRU', 'YKENP', 'MRKK', 'FXRL', 'AFKS', 'SBER', 'STSB', 'ROSN', 'HALS', 'SNGS', 'VGSB', 'MGNT', 'NKHP', 'GAZP', 'MRKC', 'KRKOP', 'FXRB', 'NKNCP', 'KMAZ', 'USBN', 'TRNFP', 'KGKCP', 'FXRW', 'TCSG', 'VSMO', 'ROST', 'PHOR', 'HIMCP', 'MRKY', 'MGTSP', 'LPSB', 'NLMK', 'ACKO', 'RTKMP', 'BANEP', 'MTSS', 'ARSA', 'VRSB', 'UTAR', 'CHMF', 'FIVE', 'CHMK', 'DIOD', 'MSRS', 'MAGN', 'TGKD', 'RUAL', 'TGKDP', 'YKEN', 'BRZL', 'SAGO', 'RASP', 'VSYDP', 'SAGOP', 'MRKS', 'HYDR', 'NFAZ', 'LKOH', 'VJGZP', 'LNZLP', 'SVAV', 'LNZL', 'KUBE', 'ZVEZ', 'OGKB', 'CHGZ', 'SBERP', 'LSRG', 'RUSE', 'KMEZ', 'DVEC', 'TORS', 'AMEZ', 'YNDX', 'OBUV', 'BSPB', 'TGKBP', 'KAZTP', 'FXDE', 'FXKZ', 'MTLRP', 'ENPG', 'KBSB', 'LNTA', 'GEMA', 'UCSS', 'FXGD', 'BLNG', 'CBOM', 'MGNZ', 'RKKE', 'SNGSP', 'ABRD', 'TATN', 'ELTZ', 'KRKNP', 'FXMM', 'TASBP', 'FXUS', 'DZRD', 'TATNP', 'ENPL', 'LSNG', 'MFON', 'MORI', 'BISV'];
for word in tickers_list: ticker = str(word);
period=7
start = "01.01.2014"
end = "30.04.2020"
periods={'tick':1, 'min':2, '5min':3, '10min':4, '15min':5, '30min':6, 'hour':7, 'daily':8, 'week':9, 'month':10}
print ("ticker="+ticker+"; period="+str(period)+"; start="+start+"; end="+end)
tickers={'ABRD':82460,'AESL':181867,'AFKS':19715,'AFLT':29,'AGRO':399716,'AKRN':17564,'ALBK':82616,'ALNU':81882,'ALRS':81820,'AMEZ':20702,'APTK':13855,'AQUA':35238,'ARMD':19676,'ARSA':19915,'ASSB':16452,'AVAN':82843,'AVAZ':39,'AVAZP':40,'BANE':81757,'BANEP':81758,'BGDE':175840,'BISV':35242,'BISVP':35243,'BLNG':21078,'BRZL':81901,'BSPB':20066,'CBOM':420694,'CHEP':20999,'CHGZ':81933,'CHKZ':21000,'CHMF':16136,'CHMK':21001,'CHZN':19960,'CLSB':16712,'CLSBP':16713,'CNTL':21002,'CNTLP':81575,'DASB':16825,'DGBZ':17919,'DIOD':35363,'DIXY':18564,'DVEC':19724,'DZRD':74744,'DZRDP':74745,'ELTZ':81934,'ENRU':16440,'EPLN':451471,'ERCO':81935,'FEES':20509,'FESH':20708,'FORTP':82164,'GAZA':81997,'GAZAP':81998,'GAZC':81398,'GAZP':16842,'GAZS':81399,'GAZT':82115,'GCHE':20125,'GMKN':795,'GRAZ':16610,'GRNT':449114,'GTLC':152876,'GTPR':175842,'GTSS':436120,'HALS':17698,'HIMC':81939,'HIMCP':81940,'HYDR':20266,'IDJT':388276,'IDVP':409486,'IGST':81885,'IGST03':81886,'IGSTP':81887,'IRAO':20516,'IRGZ':9,'IRKT':15547,'ISKJ':17137,'JNOS':15722,'JNOSP':15723,'KAZT':81941,'KAZTP':81942,'KBSB':19916,'KBTK':35285,'KCHE':20030,'KCHEP':20498,'KGKC':83261,'KGKCP':152350,'KLSB':16329,'KMAZ':15544,'KMEZ':22525,'KMTZ':81903,'KOGK':20710,'KRKN':81891,'KRKNP':81892,'KRKO':81905,'KRKOP':81906,'KROT':510,'KROTP':511,'KRSB':20912,'KRSBP':20913,'KRSG':15518,'KSGR':75094,'KTSB':16284,'KTSBP':16285,'KUBE':522,'KUNF':81943,'KUZB':83165,'KZMS':17359,'KZOS':81856,'KZOSP':81857,'LIFE':74584,'LKOH':8,'LNTA':385792,'LNZL':21004,'LNZLP':22094,'LPSB':16276,'LSNG':31,'LSNGP':542,'LSRG':19736,'LVHK':152517,'MAGE':74562,'MAGEP':74563,'MAGN':16782,'MERF':20947,'MFGS':30,'MFGSP':51,'MFON':152516,'MGNT':17086,'MGNZ':20892,'MGTS':12984,'MGTSP':12983,'MGVM':81829,'MISB':16330,'MISBP':16331,'MNFD':80390,'MOBB':82890,'MOEX':152798,'MORI':81944,'MOTZ':21116,'MRKC':20235,'MRKK':20412,'MRKP':20107,'MRKS':20346,'MRKU':20402,'MRKV':20286,'MRKY':20681,'MRKZ':20309,'MRSB':16359,'MSNG':6,'MSRS':16917,'MSST':152676,'MSTT':74549,'MTLR':21018,'MTLRP':80745,'MTSS':15523,'MUGS':81945,'MUGSP':81946,'MVID':19737,'NAUK':81992,'NFAZ':81287,'NKHP':450432,'NKNC':20100,'NKNCP':20101,'NKSH':81947,'NLMK':17046,'NMTP':19629,'NNSB':16615,'NNSBP':16616,'NPOF':81858,'NSVZ':81929,'NVTK':17370,'ODVA':20737,'OFCB':80728,'OGKB':18684,'OMSH':22891,'OMZZP':15844,'OPIN':20711,'OSMP':21006,'OTCP':407627,'PAZA':81896,'PHOR':81114,'PHST':19717,'PIKK':18654,'PLSM':81241,'PLZL':17123,'PMSB':16908,'PMSBP':16909,'POLY':175924,'PRFN':83121,'PRIM':17850,'PRIN':22806,'PRMB':80818,'PRTK':35247,'PSBR':152320,'QIWI':181610,'RASP':17713,'RBCM':74779,'RDRB':181755,'RGSS':181934,'RKKE':20321,'RLMN':152677,'RLMNP':388313,'RNAV':66644,'RODNP':66693,'ROLO':181316,'ROSB':16866,'ROSN':17273,'ROST':20637,'RSTI':20971,'RSTIP':20972,'RTGZ':152397,'RTKM':7,'RTKMP':15,'RTSB':16783,'RTSBP':16784,'RUAL':414279,'RUALR':74718,'RUGR':66893,'RUSI':81786,'RUSP':20712,'RZSB':16455,'SAGO':445,'SAGOP':70,'SARE':11,'SAREP':24,'SBER':3,'SBERP':23,'SELG':81360,'SELGP':82610,'SELL':21166,'SIBG':436091,'SIBN':2,'SKYC':83122,'SNGS':4,'SNGSP':13,'STSB':20087,'STSBP':20088,'SVAV':16080,'SYNG':19651,'SZPR':22401,'TAER':80593,'TANL':81914,'TANLP':81915,'TASB':16265,'TASBP':16266,'TATN':825,'TATNP':826,'TGKA':18382,'TGKB':17597,'TGKBP':18189,'TGKD':18310,'TGKDP':18391,'TGKN':18176,'TGKO':81899,'TNSE':420644,'TORS':16797,'TORSP':16798,'TRCN':74561,'TRMK':18441,'TRNFP':1012,'TTLK':18371,'TUCH':74746,'TUZA':20716,'UCSS':175781,'UKUZ':20717,'UNAC':22843,'UNKL':82493,'UPRO':18584,'URFD':75124,'URKA':19623,'URKZ':82611,'USBN':81953,'UTAR':15522,'UTII':81040,'UTSY':419504,'UWGN':414560,'VDSB':16352,'VGSB':16456,'VGSBP':16457,'VJGZ':81954,'VJGZP':81955,'VLHZ':17257,'VRAO':20958,'VRAOP':20959,'VRSB':16546,'VRSBP':16547,'VSMO':15965,'VSYD':83251,'VSYDP':83252,'VTBR':19043,'VTGK':19632,'VTRS':82886,'VZRZ':17068,'VZRZP':17067,'WTCM':19095,'WTCMP':19096,'YAKG':81917,'YKEN':81766,'YKENP':81769,'YNDX':388383,'YRSB':16342,'YRSBP':16343,'ZHIV':181674,'ZILL':81918,'ZMZN':556,'ZMZNP':603,'ZVEZ':82001}
FINAM_URL = "http://export.finam.ru/"
market = 0
start_date = datetime.strptime(start, "%d.%m.%Y").date()
start_date_rev=datetime.strptime(start, '%d.%m.%Y').strftime('%Y%m%d')
end_date = datetime.strptime(end, "%d.%m.%Y").date()
end_date_rev=datetime.strptime(end, '%d.%m.%Y').strftime('%Y%m%d')
params = urlencode([
					('market', market), #на каком рынке торгуется бумага
					('em', tickers[ticker]), #вытягиваем цифровой символ, который соответствует бумаге.
					('code', ticker), #тикер нашей акции
					('apply',0), #не нашёл что это значит. 
					('df', start_date.day), #Начальная дата, номер дня (1-31)
					('mf', start_date.month - 1), #Начальная дата, номер месяца (0-11)
					('yf', start_date.year), #Начальная дата, год
					('from', start_date), #Начальная дата полностью
					('dt', end_date.day), #Конечная дата, номер дня	
					('mt', end_date.month - 1), #Конечная дата, номер месяца
					('yt', end_date.year), #Конечная дата, год
					('to', end_date), #Конечная дата
					('p', period), #Таймфрейм
					('f', ticker+"_" + start_date_rev + "_" + end_date_rev), #Имя сформированного файла
					('e', ".csv"), #Расширение сформированного файла
					('cn', ticker), #ещё раз тикер акции	
					('dtf', 1), #В каком формате брать даты. Выбор из 5 возможных. См. страницу https://www.finam.ru/profile/moex-akcii/sberbank/export/
					('tmf', 1), #В каком формате брать время. Выбор из 4 возможных.
					('MSOR', 1), #Время свечи (0 - open; 1 - close)	
					('mstime', "on"), #Московское время	
					('mstimever', 1), #Коррекция часового пояса	
					('sep', 3), #Разделитель полей	(1 - запятая, 2 - точка, 3 - точка с запятой, 4 - табуляция, 5 - пробел)
					('sep2', 1), #Разделитель разрядов
					('datf', 1), #Формат записи в файл. Выбор из 6 возможных.
					('at', 1), #Нужны ли заголовки столбцов
					('fsp', 1)]) #Заполнять периоды без сделок
url = FINAM_URL + ticker+"_" + start_date_rev + "_" + end_date_rev + ".csv?" + params #урл составлен!
print("Стучимся на Финам по ссылке: "+url)
txt=urlopen(url).readlines() #здесь лежит огромный массив данных, прилетевший с Финама.
local_file = open(ticker+'.txt', "w") #задаём файл, в который запишем котировки.
for line in txt: #записываем свечи строку за строкой. 
	local_file.write(line.strip().decode( "utf-8" )+'\n')	
local_file.close()
print("Готово. Проверьте файл "+ticker+".txt в папке где лежит скрипт")

Проблема в том, что не знаю как пройтись по всем элементам массива tickers_list и скачать все котировки в цикле. Сейчас в моём коде качается только последний элемент из массива tickers_list, а хочется все скачать.

https://onlinegdb.com/r1yoQzRYL

Тут собственно и проводил все эксперименты
py.user.next
MQLab
не знаю как пройтись по всем элементам массива tickers_list и скачать все котировки в цикле
Надо сделать функцию для скачивания одной котировки. Потом надо в цикле идти по котировкам и к каждой котировке применять эту функцию.

Так как ты этого не знаешь (а это очень примитивные знания), тебе надо сначала учиться программировать, а уже потом программировать. Выучивание языка для програмирование - это как выучивание карандаша для рисования. На карандаше не написано, как нарисовать лицо или человека. Так же и в языке программирования нет никакой информации о проектировании программы.

И это не Data Mining Data Mining - это добывание новых данных из уже имеющихся данных.
https://ru.wikipedia.org/wiki/Data_mining
Основу методов data mining составляют всевозможные методы классификации, моделирования и прогнозирования, основанные на применении деревьев решений, искусственных нейронных сетей, генетических алгоритмов, эволюционного программирования, ассоциативной памяти, нечёткой логики. К методам data mining нередко относят статистические методы (дескриптивный анализ, корреляционный и регрессионный анализ, факторный анализ, дисперсионный анализ, компонентный анализ, дискриминантный анализ, анализ временных рядов, анализ выживаемости, анализ связей).
MQLab
py.user.next
Надо сделать функцию для скачивания одной котировки. Потом надо в цикле идти по котировкам и к каждой котировке применять эту функцию.

Пытался, но лезут ошибки, исправлять которые от незнания языка программирования не знаю как. С ходу разобраться не получается.

py.user.next
Так как ты этого не знаешь (а это очень примитивные знания), тебе надо сначала учиться программировать, а уже потом программировать.
За совет спасибо, но я тут за помощью написал.

Помоги кодом понять что не так.

 from urllib.parse import urlencode
from urllib.request import urlopen
from datetime import datetime
tickers_list = ['MERF', 'ISKJ', 'IDVP', 'GTLC', 'SELG', 'GTRK', 'PAZA', 'SIBG', 'TRMK', 'AVAN', 'UNKL', 'OMZZP', 'BELU', 'NSVZ', 'IRGZ', 'ODVA', 'CHKZ', 'LIFE', 'IGST', 'NNSBP', 'KZOSP', 'RLMN', 'MOBB', 'ROSB', 'IGSTP', 'KUZB', 'CNTL', 'RUSP', 'TGKN', 'LVHK', 'JNOS', 'KZOS', 'TTLK', 'SELGP', 'TANL', 'PMSB', 'DASB', 'RUSI', 'FESH', 'PLZL', 'TASB', 'WTCMP', 'TGKA', 'CNTLP', 'DZRDP', 'PMSBP', 'MSTT', 'RZSB', 'VRSBP', 'WTCM', 'RSTI', 'SARE', 'KLSB', 'UKUZ', 'KTSB', 'SZPR', 'MSST', 'MRKU', 'MAGE', 'RTSB', 'ASSB', 'NKSH', 'BANE', 'IRKT', 'POLY', 'FEES', 'MRKP', 'JNOSP', 'TUCH', 'DSKY', 'MFGSP', 'KCHE', 'AFLT', 'MISBP', 'VGSBP', 'MAGEP', 'RSTIP', 'NAUK', 'RTGZ', 'KROT', 'ZILL', 'NVTK', 'MFGS', 'YRSBP', 'KTSBP', 'MRSB', 'KBTK', 'KRSB', 'TUZA', 'MOEX', 'KOGK', 'GAZA', 'NKNC', 'VTBR', 'AGRO', 'UWGN', 'UNAC', 'GAZAP', 'UPRO', 'KROTP', 'MGTS', 'ALBK', 'MSNG', 'RLMNP', 'VJGZ', 'MTLR', 'CHEP', 'MRKV', 'SAREP', 'KRSBP', 'TGKB', 'RGSS', 'RBCM', 'MISB', 'VZRZP', 'URKZ', 'IRAO', 'KCHEP', 'SIBN', 'RAVN', 'RTKM', 'ROLO', 'PRFN', 'MRKZ', 'RTSBP', 'QIWI', 'GMKN', 'ENRU', 'YKENP', 'MRKK', 'FXRL', 'AFKS', 'SBER', 'STSB', 'ROSN', 'HALS', 'SNGS', 'VGSB', 'MGNT', 'NKHP', 'GAZP', 'MRKC', 'KRKOP', 'FXRB', 'NKNCP', 'KMAZ', 'USBN', 'TRNFP', 'KGKCP', 'FXRW', 'TCSG', 'VSMO', 'ROST', 'PHOR', 'HIMCP', 'MRKY', 'MGTSP', 'LPSB', 'NLMK', 'ACKO', 'RTKMP', 'BANEP', 'MTSS', 'ARSA', 'VRSB', 'UTAR', 'CHMF', 'FIVE', 'CHMK', 'DIOD', 'MSRS', 'MAGN', 'TGKD', 'RUAL', 'TGKDP', 'YKEN', 'BRZL', 'SAGO', 'RASP', 'VSYDP', 'SAGOP', 'MRKS', 'HYDR', 'NFAZ', 'LKOH', 'VJGZP', 'LNZLP', 'SVAV', 'LNZL', 'KUBE', 'ZVEZ', 'OGKB', 'CHGZ', 'SBERP', 'LSRG', 'RUSE', 'KMEZ', 'DVEC', 'TORS', 'AMEZ', 'YNDX', 'OBUV', 'BSPB', 'TGKBP', 'KAZTP', 'FXDE', 'FXKZ', 'MTLRP', 'ENPG', 'KBSB', 'LNTA', 'GEMA', 'UCSS', 'FXGD', 'BLNG', 'CBOM', 'MGNZ', 'RKKE', 'SNGSP', 'ABRD', 'TATN', 'ELTZ', 'KRKNP', 'FXMM', 'TASBP', 'FXUS', 'DZRD', 'TATNP', 'ENPL', 'LSNG', 'MFON', 'MORI', 'BISV'];
period=7 # задаём период. Выбор из: 'tick': 1, 'min': 2, '5min': 3, '10min': 4, '15min': 5, '30min': 6, 'hour': 7, 'daily': 8, 'week': 9, 'month': 10
start = "01.01.2014" #с какой даты начинать тянуть котировки
end = "30.04.2020" #финальная дата, по которую тянуть котировки
def example(ticker):
########
periods={'tick': 1, 'min': 2, '5min': 3, '10min': 4, '15min': 5, '30min': 6, 'hour': 7, 'daily': 8, 'week': 9, 'month': 10}
print ("ticker="+ticker+"; period="+str(period)+"; start="+start+"; end="+end)
#каждой акции Финам присвоил цифровой код:
tickers={'ABRD':82460,'AESL':181867,'AFKS':19715,'AFLT':29,'AGRO':399716,'AKRN':17564,'ALBK':82616,'ALNU':81882,'ALRS':81820,'AMEZ':20702,'APTK':13855,'AQUA':35238,'ARMD':19676,'ARSA':19915,'ASSB':16452,'AVAN':82843,'AVAZ':39,'AVAZP':40,'BANE':81757,'BANEP':81758,'BGDE':175840,'BISV':35242,'BISVP':35243,'BLNG':21078,'BRZL':81901,'BSPB':20066,'CBOM':420694,'CHEP':20999,'CHGZ':81933,'CHKZ':21000,'CHMF':16136,'CHMK':21001,'CHZN':19960,'CLSB':16712,'CLSBP':16713,'CNTL':21002,'CNTLP':81575,'DASB':16825,'DGBZ':17919,'DIOD':35363,'DIXY':18564,'DVEC':19724,'DZRD':74744,'DZRDP':74745,'ELTZ':81934,'ENRU':16440,'EPLN':451471,'ERCO':81935,'FEES':20509,'FESH':20708,'FORTP':82164,'GAZA':81997,'GAZAP':81998,'GAZC':81398,'GAZP':16842,'GAZS':81399,'GAZT':82115,'GCHE':20125,'GMKN':795,'GRAZ':16610,'GRNT':449114,'GTLC':152876,'GTPR':175842,'GTSS':436120,'HALS':17698,'HIMC':81939,'HIMCP':81940,'HYDR':20266,'IDJT':388276,'IDVP':409486,'IGST':81885,'IGST03':81886,'IGSTP':81887,'IRAO':20516,'IRGZ':9,'IRKT':15547,'ISKJ':17137,'JNOS':15722,'JNOSP':15723,'KAZT':81941,'KAZTP':81942,'KBSB':19916,'KBTK':35285,'KCHE':20030,'KCHEP':20498,'KGKC':83261,'KGKCP':152350,'KLSB':16329,'KMAZ':15544,'KMEZ':22525,'KMTZ':81903,'KOGK':20710,'KRKN':81891,'KRKNP':81892,'KRKO':81905,'KRKOP':81906,'KROT':510,'KROTP':511,'KRSB':20912,'KRSBP':20913,'KRSG':15518,'KSGR':75094,'KTSB':16284,'KTSBP':16285,'KUBE':522,'KUNF':81943,'KUZB':83165,'KZMS':17359,'KZOS':81856,'KZOSP':81857,'LIFE':74584,'LKOH':8,'LNTA':385792,'LNZL':21004,'LNZLP':22094,'LPSB':16276,'LSNG':31,'LSNGP':542,'LSRG':19736,'LVHK':152517,'MAGE':74562,'MAGEP':74563,'MAGN':16782,'MERF':20947,'MFGS':30,'MFGSP':51,'MFON':152516,'MGNT':17086,'MGNZ':20892,'MGTS':12984,'MGTSP':12983,'MGVM':81829,'MISB':16330,'MISBP':16331,'MNFD':80390,'MOBB':82890,'MOEX':152798,'MORI':81944,'MOTZ':21116,'MRKC':20235,'MRKK':20412,'MRKP':20107,'MRKS':20346,'MRKU':20402,'MRKV':20286,'MRKY':20681,'MRKZ':20309,'MRSB':16359,'MSNG':6,'MSRS':16917,'MSST':152676,'MSTT':74549,'MTLR':21018,'MTLRP':80745,'MTSS':15523,'MUGS':81945,'MUGSP':81946,'MVID':19737,'NAUK':81992,'NFAZ':81287,'NKHP':450432,'NKNC':20100,'NKNCP':20101,'NKSH':81947,'NLMK':17046,'NMTP':19629,'NNSB':16615,'NNSBP':16616,'NPOF':81858,'NSVZ':81929,'NVTK':17370,'ODVA':20737,'OFCB':80728,'OGKB':18684,'OMSH':22891,'OMZZP':15844,'OPIN':20711,'OSMP':21006,'OTCP':407627,'PAZA':81896,'PHOR':81114,'PHST':19717,'PIKK':18654,'PLSM':81241,'PLZL':17123,'PMSB':16908,'PMSBP':16909,'POLY':175924,'PRFN':83121,'PRIM':17850,'PRIN':22806,'PRMB':80818,'PRTK':35247,'PSBR':152320,'QIWI':181610,'RASP':17713,'RBCM':74779,'RDRB':181755,'RGSS':181934,'RKKE':20321,'RLMN':152677,'RLMNP':388313,'RNAV':66644,'RODNP':66693,'ROLO':181316,'ROSB':16866,'ROSN':17273,'ROST':20637,'RSTI':20971,'RSTIP':20972,'RTGZ':152397,'RTKM':7,'RTKMP':15,'RTSB':16783,'RTSBP':16784,'RUAL':414279,'RUALR':74718,'RUGR':66893,'RUSI':81786,'RUSP':20712,'RZSB':16455,'SAGO':445,'SAGOP':70,'SARE':11,'SAREP':24,'SBER':3,'SBERP':23,'SELG':81360,'SELGP':82610,'SELL':21166,'SIBG':436091,'SIBN':2,'SKYC':83122,'SNGS':4,'SNGSP':13,'STSB':20087,'STSBP':20088,'SVAV':16080,'SYNG':19651,'SZPR':22401,'TAER':80593,'TANL':81914,'TANLP':81915,'TASB':16265,'TASBP':16266,'TATN':825,'TATNP':826,'TGKA':18382,'TGKB':17597,'TGKBP':18189,'TGKD':18310,'TGKDP':18391,'TGKN':18176,'TGKO':81899,'TNSE':420644,'TORS':16797,'TORSP':16798,'TRCN':74561,'TRMK':18441,'TRNFP':1012,'TTLK':18371,'TUCH':74746,'TUZA':20716,'UCSS':175781,'UKUZ':20717,'UNAC':22843,'UNKL':82493,'UPRO':18584,'URFD':75124,'URKA':19623,'URKZ':82611,'USBN':81953,'UTAR':15522,'UTII':81040,'UTSY':419504,'UWGN':414560,'VDSB':16352,'VGSB':16456,'VGSBP':16457,'VJGZ':81954,'VJGZP':81955,'VLHZ':17257,'VRAO':20958,'VRAOP':20959,'VRSB':16546,'VRSBP':16547,'VSMO':15965,'VSYD':83251,'VSYDP':83252,'VTBR':19043,'VTGK':19632,'VTRS':82886,'VZRZ':17068,'VZRZP':17067,'WTCM':19095,'WTCMP':19096,'YAKG':81917,'YKEN':81766,'YKENP':81769,'YNDX':388383,'YRSB':16342,'YRSBP':16343,'ZHIV':181674,'ZILL':81918,'ZMZN':556,'ZMZNP':603,'ZVEZ':82001}
FINAM_URL = "http://export.finam.ru/"# сервер, на который стучимся
market = 0 #можно не задавать. Это рынок, на котором торгуется бумага. Для акций работает с любой цифрой. Другие рынки не проверял.
#Делаем преобразования дат:
start_date = datetime.strptime(start, "%d.%m.%Y").date()
start_date_rev=datetime.strptime(start, '%d.%m.%Y').strftime('%Y%m%d')
end_date = datetime.strptime(end, "%d.%m.%Y").date()
end_date_rev=datetime.strptime(end, '%d.%m.%Y').strftime('%Y%m%d')
#Все параметры упаковываем в единую структуру. Здесь есть дополнительные параметры, кроме тех, которые заданы в шапке. См. комментарии внизу:
params = urlencode([
					('market', market), #на каком рынке торгуется бумага
					('em', tickers[ticker]), #вытягиваем цифровой символ, который соответствует бумаге.
					('code', ticker), #тикер нашей акции
					('apply',0), #не нашёл что это значит. 
					('df', start_date.day), #Начальная дата, номер дня (1-31)
					('mf', start_date.month - 1), #Начальная дата, номер месяца (0-11)
					('yf', start_date.year), #Начальная дата, год
					('from', start_date), #Начальная дата полностью
					('dt', end_date.day), #Конечная дата, номер дня	
					('mt', end_date.month - 1), #Конечная дата, номер месяца
					('yt', end_date.year), #Конечная дата, год
					('to', end_date), #Конечная дата
					('p', period), #Таймфрейм
					('f', ticker+"_" + start_date_rev + "_" + end_date_rev), #Имя сформированного файла
					('e', ".csv"), #Расширение сформированного файла
					('cn', ticker), #ещё раз тикер акции	
					('dtf', 1), #В каком формате брать даты. Выбор из 5 возможных. См. страницу https://www.finam.ru/profile/moex-akcii/sberbank/export/
					('tmf', 1), #В каком формате брать время. Выбор из 4 возможных.
					('MSOR', 0), #Время свечи (0 - open; 1 - close)	
					('mstime', "on"), #Московское время	
					('mstimever', 1), #Коррекция часового пояса	
					('sep', 1), #Разделитель полей	(1 - запятая, 2 - точка, 3 - точка с запятой, 4 - табуляция, 5 - пробел)
					('sep2', 1), #Разделитель разрядов
					('datf', 1), #Формат записи в файл. Выбор из 6 возможных.
					('at', 1), #Нужны ли заголовки столбцов
					('fsp', 1)]) #Заполнять периоды без сделок
url = FINAM_URL + ticker+"_" + start_date_rev + "_" + end_date_rev + ".csv?" + params #урл составлен!
print("Стучимся на Финам по ссылке: "+url)
txt=urlopen(url).readlines() #здесь лежит огромный массив данных, прилетевший с Финама.
local_file = open(ticker+'.txt', "w") #задаём файл, в который запишем котировки.
for line in txt: #записываем свечи строку за строкой. 
	local_file.write(line.strip().decode( "utf-8" )+'\n')	
local_file.close()
print("Готово. Проверьте файл "+ticker+".txt в папке где лежит скрипт")
for word in tickers_list: example(str(word));

py.user.next
Вот этот код можешь закрыть. Затем начинаешь новый код и пишешь функцию для взятия одной котировки. В функцию подаёшь название котировки, а функция идёт на сайт, скачивает информацию по этой котировке и потом сохраняет эту информацию в файл. Когда эта функция будет готова, тогда ты напишешь код, где у тебя из списка котировок будет браться название каждой котировки и передаваться в эту уже написанную функцию. Потом, когда это всё будет готово (функция одной котировки и запуск этой функции в цикле по списку котировок), ты, может быть, напишешь код ещё, который будет составлять список котировок (брать их откуда-то). То есть надо поэтапно идти к этому, а не сразу пытаться всё написать.

Вот в этом и помощь. Сам ты до этого не догадаешься.

MQLab
Помоги кодом понять что не так.
Можешь попробовать объяснить мне, нафиг мне этот finam.ru, что я должен всё бросить и писать нормальный скрипт для выкачивания данных с него. Скорее всего, ты не знаешь, что у программистов всегда есть что писать, потому что программисты - это те, кто умеет это делать и у которых десятки программ пишутся всё время.
MQLab
py.user.next
Можешь попробовать объяснить мне, нафиг мне этот finam.ru, что я должен всё бросить и писать нормальный скрипт для выкачивания данных с него
Зачем ты пишешь все эти нравоучения, тратишь своё время, если ты просто словоблуд и теоретик. Следующий твой шаг это клянчить деньги за помощь, уйди из этой ветки, тут люди помогают, объясняют и делятся опытом, а не парят мозги другим.
py.user.next
MQLab
Зачем ты пишешь все эти нравоучения
У тебя забыл спросить, что мне тут писать. Я тебе написал, в чём твои ошибки. Ты, ничего не умея, взялся писать программу. Обосравшись с ней на середине, ты припёрся сюда. Я не знаю, что ты там думал, что тут бесплатно программы пишут всяким дебилам/дебилкам или ещё что; могло так показаться, конечно. Ты её писал, не ты её писал - это абсолютно не важно, так как в результате получился говнокод какой-то. И тут ты заявляешь, что тебе нужно, чтобы вот это говно пахло розами. Я тебе говорю “иди, стриги розы, потому что розами пахнут розы в первую очередь”. А ты говоришь “не, я лучше знаю, просто из него надо как-то слепить розу и тогда она будет пахнуть”.

MQLab
Следующий твой шаг это клянчить деньги за помощь
Всё правильно. Тебя пугает, что у тебя, у нищеброда, станут требовать деньги за работу, а у тебя их нет, потому что ты бомж какой-то, ну там, студент или кто. И лучшая защита - это нападение. Так вот, дружок, я с самого начала вижу, у кого деньги есть, а кто просто за лохов всех считает, которым можно там что-то понарассказывать про взаимопомощь там, мир-дружбу-жвачку и прочее. Естественно, у большинства, кто сюда приходит, их нет и не предвидится. Так зачем требовать то, чего нет? Какая цель будет достигнута? Никакой. Поэтому я тебе и не пишу, что эта работа стоит $100.

Другое дело, если ты чему-то научишься, у тебя что-то там получится у самого и ты начнёшь тоже кому-то помогать. Это плюс. Тогда можно будет на тебя скинуть самые тупые консультации, чтобы на них время самому не тратить.
MQLab
py.user.next
Тебя пугает, что у тебя, у нищеброда, станут требовать деньги за работу, а у тебя их нет, потому что ты бомж какой-то, ну там, студент или кто.

Дружище, я тебя не оскорблял, грубо не писал, помощи попросил. Ты чего так завелся на ровном месте.
Раздутое эго, чересчур завышенное самомнение, синдром нарциссизма.
Просто успокойся и не заходи в эту ветку, тебе тут не рады.
py.user.next
MQLab
тебе тут не рады
Да не обижайся ты на меня, не обижайся. Но я, действительно, не буду тебе тут код писать. Я лучше напишу себе какой-нибудь код.
FishHook
MQLab
py.user.next
Горячие парни, умерьте пыл, какой-то унылый срач получается.

MQLab
Вы тоже поймите, что дата майнингом от нечего делать не занимаются. Я не буду говорить о моральной стороне вопроса как таковой, хотя следовало бы - сайт finam.ru это чей-то коммерческий проект, люди вкладывают силы и средства вовсе не для того, чтобы вы у них украли данные и перепродали. Это в любом случае не та сфера деятельности, где новички и студенты отрабатывают навыки программирования. Необходимость помогать студентам или коллегам в трудной ситуации понимают все - это просто взаимовыгодные отношения в сообществе. Но вот какой смысл помогать вам? Языка вы не знаете и учить не хотите. Цель ваша далеко не благородна, чтобы вам помогать из чувства гуманизма. Оплачиваемую помощь вы не приемлете. А что остается то?

Давайте подождем, может найдется кто-то кому интересна сама задача и он будет ей заниматься для собственного развития.
MQLab
1. Finam даёт скачать котировки всем желающим бесплатно
2. У меня действительно нет времени изучать питон, есть код, есть задача, нужно просто чуть чуть подсказать. Через функцию я 2-й код выложил, а это говорит о том, что я не просто прошу, а прилагаю усилия, читаю как это сделать, но не встречаю подходящего примера, те примеры, что нашел в сети генерируют следующие непонятности в коде питона. Код без цикла работает как нужно, но вызывать по одной переменной не хочется.
py.user.next
Да не обижайся ты на меня, не обижайся.
У меня нет такого чувства как обида на кого-то, это глупо. Вступать с тобой в словесный срач желания то же нет.
FishHook
Оплачиваемую помощь вы не приемлете.
Вопрос не в оплате, я прекрасно понимаю, что моя просьба к сообществу ничего не стоит, потому-что это реально мизерная подсказка в приделах основных фундаментальных функций языка программирования.

Мне очень странно, что люди отписавшиеся в данной ветке, имеют извращенное представление о помощи.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB