Форум сайта python.su
Всем привет.
Подскажите как исправить или дописать код 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 в папке где лежит скрипт")
Отредактировано MQLab (Май 5, 2020 01:15:32)
Офлайн
MQLabНадо сделать функцию для скачивания одной котировки. Потом надо в цикле идти по котировкам и к каждой котировке применять эту функцию.
не знаю как пройтись по всем элементам массива tickers_list и скачать все котировки в цикле
Основу методов data mining составляют всевозможные методы классификации, моделирования и прогнозирования, основанные на применении деревьев решений, искусственных нейронных сетей, генетических алгоритмов, эволюционного программирования, ассоциативной памяти, нечёткой логики. К методам data mining нередко относят статистические методы (дескриптивный анализ, корреляционный и регрессионный анализ, факторный анализ, дисперсионный анализ, компонентный анализ, дискриминантный анализ, анализ временных рядов, анализ выживаемости, анализ связей).
Отредактировано py.user.next (Май 5, 2020 02:06:11)
Офлайн
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));
Офлайн
Вот этот код можешь закрыть. Затем начинаешь новый код и пишешь функцию для взятия одной котировки. В функцию подаёшь название котировки, а функция идёт на сайт, скачивает информацию по этой котировке и потом сохраняет эту информацию в файл. Когда эта функция будет готова, тогда ты напишешь код, где у тебя из списка котировок будет браться название каждой котировки и передаваться в эту уже написанную функцию. Потом, когда это всё будет готово (функция одной котировки и запуск этой функции в цикле по списку котировок), ты, может быть, напишешь код ещё, который будет составлять список котировок (брать их откуда-то). То есть надо поэтапно идти к этому, а не сразу пытаться всё написать.
Вот в этом и помощь. Сам ты до этого не догадаешься.
MQLabМожешь попробовать объяснить мне, нафиг мне этот finam.ru, что я должен всё бросить и писать нормальный скрипт для выкачивания данных с него. Скорее всего, ты не знаешь, что у программистов всегда есть что писать, потому что программисты - это те, кто умеет это делать и у которых десятки программ пишутся всё время.
Помоги кодом понять что не так.
Отредактировано py.user.next (Май 5, 2020 07:37:33)
Офлайн
py.user.nextЗачем ты пишешь все эти нравоучения, тратишь своё время, если ты просто словоблуд и теоретик. Следующий твой шаг это клянчить деньги за помощь, уйди из этой ветки, тут люди помогают, объясняют и делятся опытом, а не парят мозги другим.
Можешь попробовать объяснить мне, нафиг мне этот finam.ru, что я должен всё бросить и писать нормальный скрипт для выкачивания данных с него
Офлайн
MQLabУ тебя забыл спросить, что мне тут писать. Я тебе написал, в чём твои ошибки. Ты, ничего не умея, взялся писать программу. Обосравшись с ней на середине, ты припёрся сюда. Я не знаю, что ты там думал, что тут бесплатно программы пишут всяким дебилам/дебилкам или ещё что; могло так показаться, конечно. Ты её писал, не ты её писал - это абсолютно не важно, так как в результате получился говнокод какой-то. И тут ты заявляешь, что тебе нужно, чтобы вот это говно пахло розами. Я тебе говорю “иди, стриги розы, потому что розами пахнут розы в первую очередь”. А ты говоришь “не, я лучше знаю, просто из него надо как-то слепить розу и тогда она будет пахнуть”.
Зачем ты пишешь все эти нравоучения
MQLabВсё правильно. Тебя пугает, что у тебя, у нищеброда, станут требовать деньги за работу, а у тебя их нет, потому что ты бомж какой-то, ну там, студент или кто. И лучшая защита - это нападение. Так вот, дружок, я с самого начала вижу, у кого деньги есть, а кто просто за лохов всех считает, которым можно там что-то понарассказывать про взаимопомощь там, мир-дружбу-жвачку и прочее. Естественно, у большинства, кто сюда приходит, их нет и не предвидится. Так зачем требовать то, чего нет? Какая цель будет достигнута? Никакой. Поэтому я тебе и не пишу, что эта работа стоит $100.
Следующий твой шаг это клянчить деньги за помощь
Офлайн
py.user.next
Тебя пугает, что у тебя, у нищеброда, станут требовать деньги за работу, а у тебя их нет, потому что ты бомж какой-то, ну там, студент или кто.
Офлайн
MQLabДа не обижайся ты на меня, не обижайся. Но я, действительно, не буду тебе тут код писать. Я лучше напишу себе какой-нибудь код.
тебе тут не рады
Офлайн
MQLab
py.user.next
Горячие парни, умерьте пыл, какой-то унылый срач получается.
MQLab
Вы тоже поймите, что дата майнингом от нечего делать не занимаются. Я не буду говорить о моральной стороне вопроса как таковой, хотя следовало бы - сайт finam.ru это чей-то коммерческий проект, люди вкладывают силы и средства вовсе не для того, чтобы вы у них украли данные и перепродали. Это в любом случае не та сфера деятельности, где новички и студенты отрабатывают навыки программирования. Необходимость помогать студентам или коллегам в трудной ситуации понимают все - это просто взаимовыгодные отношения в сообществе. Но вот какой смысл помогать вам? Языка вы не знаете и учить не хотите. Цель ваша далеко не благородна, чтобы вам помогать из чувства гуманизма. Оплачиваемую помощь вы не приемлете. А что остается то?
Давайте подождем, может найдется кто-то кому интересна сама задача и он будет ей заниматься для собственного развития.
Отредактировано FishHook (Май 5, 2020 15:12:50)
Офлайн
1. Finam даёт скачать котировки всем желающим бесплатно
2. У меня действительно нет времени изучать питон, есть код, есть задача, нужно просто чуть чуть подсказать. Через функцию я 2-й код выложил, а это говорит о том, что я не просто прошу, а прилагаю усилия, читаю как это сделать, но не встречаю подходящего примера, те примеры, что нашел в сети генерируют следующие непонятности в коде питона. Код без цикла работает как нужно, но вызывать по одной переменной не хочется.
py.user.nextУ меня нет такого чувства как обида на кого-то, это глупо. Вступать с тобой в словесный срач желания то же нет.
Да не обижайся ты на меня, не обижайся.
FishHookВопрос не в оплате, я прекрасно понимаю, что моя просьба к сообществу ничего не стоит, потому-что это реально мизерная подсказка в приделах основных фундаментальных функций языка программирования.
Оплачиваемую помощь вы не приемлете.
Офлайн