如何遍历两个列表的组合并每次执行一个函数?

How do I iterate through combinations of two lists and perform a function each time?

进行 Alphavantage API 拉取历史股票数据。我正在拉他们的指标之一。我不想编写 36 个单独的函数并手动拉取,而是想遍历 36 种可能的组合并每次使用不同的变量(变量是每个组合)进行拉取。下面是我的代码。目前 returns "NONE"。我做错了什么?

另外,有没有办法将这两个功能合二为一?

谢谢!

def get_ppo_series(matype, series_type):
    pull_parameters = {
        'function': 'PPO',
        'symbol': stock,
        'interval': interval,
        'series_type': series_type,
        'fastperiod': 12,
        'slowperiod': 26,
        'matype': matype,
        'datatype': 'json',
        'apikey': key
    }
    column = 0
    pull = rq.get(url, params=pull_parameters)
    data = pull.json()
    df = pd.DataFrame.from_dict(data['Technical Analysis: PPO'], orient='index', dtype=float)
    df.reset_index(level=0, inplace=True)
    df.columns = ['Date', 'PPO Series ' + str(column)]
    df.insert(0, 'Stock', stock)
    column += 1
    return df.tail(past_years * annual_trading_days)

def run_ppo_series():
    matype = list(range(8))
    series_type = ['open', 'high', 'low', 'close']
    combinations = product(matype, series_type)
    for matype, series_type in combinations:
        get_ppo_series(matype, series_type)

print(run_ppo_series())

我也尝试了以下方法。此版本至少 运行 一次迭代并返回数据。但它到此为止了???

def get_ppo_series():
    column = 0
    matype = list(range(8))
    series_type = ['open', 'high', 'low', 'close']
    combinations = product(matype, series_type)
    for matype, series_type in combinations:
        pull_parameters = {
            'function': 'PPO',
            'symbol': stock,
            'interval': interval,
            'series_type': series_type,
            'fastperiod': 12,
            'slowperiod': 26,
            'matype': matype,
            'datatype': 'json',
            'apikey': key
        }
        pull = rq.get(url, params=pull_parameters)
        data = pull.json()
        df = pd.DataFrame.from_dict(data['Technical Analysis: PPO'], orient='index', dtype=float)
        df.reset_index(level=0, inplace=True)
        df.columns = ['Date', 'PPO Series ' + str(column)]
        df.insert(0, 'Stock', stock)
        column += 1
        return df.tail(past_years * annual_trading_days)

print(get_ppo_series())
import requests as rq
import itertools

url = 'https://www.alphavantage.co/query?'
key = 'get your own key'

def get_ppo_series(matype, series_type):
    pull_parameters = {
        'function': 'PPO',
        'symbol': 'msft',
        'interval': '60min',
        'series_type': series_type,
        'fastperiod': 12,
        'slowperiod': 26,
        'matype': matype,
        'datatype': 'json',
        'apikey': key
    }
    column = 0
    pull = rq.get(url, params=pull_parameters)
    data = pull.json()
    print('*' * 50)
    print(f'MAType: {matype}, Series: {series_type}')
    print(data)

def run_ppo_series():
    matype = list(range(8))
    series_type = ['open', 'high', 'low', 'close']
    combinations = itertools.product(matype, series_type)
    for matype, series_type in combinations:
        get_ppo_series(matype, series_type)

run_ppo_series()
  1. 上面的代码可以正常工作 一次 symbolinterval 提供了值。
  2. 感谢您使用 Alpha Vantage!我们的标准 API 调用频率是每分钟 5 次调用和每天 500 次调用
  3. 我没有理会 get_ppo_seriesDataFrame 部分,因为它与接收数据无关
  4. 我会把函数分开,它看起来更干净,我认为函数做 1 事情是标准的。
  5. 可以在代码中添加一个计数器,并且每 5 次迭代后 time.sleep(60) 除非您有不同的 API 调用频率

每 5 api 次调用后等待 60 秒的函数

import time

def run_ppo_series():
    matype = list(range(8))
    series_type = ['open', 'high', 'low', 'close']
    combinations = itertools.product(matype, series_type)
    count = 0
    for matype, series_type in combinations:
        if (count%5 == 0) & (count != 0):
            time.sleep(60)
        get_ppo_series(matype, series_type)
        count+=1