首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“NoneType”“NoneType”对象不可迭代

“NoneType”“NoneType”对象不可迭代
EN

Stack Overflow用户
提问于 2020-06-30 02:14:49
回答 2查看 251关注 0票数 0

我正在尝试遍历符号列表,以通过mt5获得各种货币的汇率。我使用下面的代码,但我得到的是TypeError

代码语言:javascript
运行
复制
     d[i] = [y.close for y in rates1]

TypeError:“NoneType”对象不可迭代

我看不出哪里出了问题,我想使用这种结构来循环遍历,创建多个数据帧,然后使用相同类型的循环对所有对和时间创建一个大的多索引。我写代码的时间不长。

代码语言:javascript
运行
复制
sym = ['GBPUSD','USDJPY','USDCHF','AUDUSD','GBPJPY']

# Copying data to dataframe
d = pd.DataFrame()
for i in sym:
     rates1 = mt5.copy_rates_from(i, mt5.TIMEFRAME_M1, 5)
     d[i] = [y.close for y in rates1]
代码语言:javascript
运行
复制
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 29 18:38:11 2020

@author: DanPc
"""

# -*- coding: utf-8 -*-
"""

"""

import pytz
import pandas as pd
import MetaTrader5 as mt5
import time
from datetime import datetime
from threading import Timer
import talib
import numpy as np
import matplotlib as plt
from multiprocessing import Process
import sys


server_name = "" ENTER DETAILS HERE
server_num = 
password = ""



#------------------------------------------------------------------------------
def actualtime():
    # datetime object containing current date and time
    now = datetime.now()
    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
    #print("date and time =", dt_string)
    return str(dt_string)
#------------------------------------------------------------------------------
def sync_60sec(op):

    info_time_new = datetime.strptime(str(actualtime()), '%d/%m/%Y %H:%M:%S')
    waiting_time = 60 - info_time_new.second

    t = Timer(waiting_time, op)
    t.start()

    print(actualtime)
#------------------------------------------------------------------------------
def program(symbol):
    if not mt5.initialize(login=server_num, server=server_name, password=password):
        print("initialize() failed, error code =",mt5.last_error())
        quit()

    timezone = pytz.timezone("Etc/UTC")
    utc_from = datetime.now()

    ######### Change here the timeframe 525600
  
    
   # Create currency watchlist for which correlation matrix is to be plotted
sym = ['GBPUSD','USDJPY','USDCHF','AUDUSD','GBPJPY']

# Copying data to dataframe
d = pd.DataFrame()
for i in sym:
     rates1 = mt5.copy_rates_from(i, mt5.TIMEFRAME_M1, 5)
     d[i] = [y.close for y in rates1]
    
    
print(rates1)
    
mt5.shutdown()

  
if not mt5.initialize():
        print("initialize() failed, error code =",mt5.last_error())
        quit()

         
# starting mt5
if not mt5.initialize(login=server_num, server=server_name, password=password):
    print("initialize() failed, error code =",mt5.last_error())
    quit()          
#------------------------------------------------------------------------------
#                   S T A R T I N G   M T 5 
#------------------------------------------------------------------------------
authorized=mt5.login(server_num, password=password)
if authorized:
    account_info=mt5.account_info()
    if account_info!=None:       
        account_info_dict = mt5.account_info()._asdict()
        df=pd.DataFrame(list(account_info_dict.items()),columns=['property','value'])
        print("account_info() as dataframe:")
        print(df)
else:
    print(mt5.last_error)

mt5.shutdown()
#------------------------------------------------------------------------------

def trading_bot():
    symbol_1 = 'EURUSD'
    symbol_2 = 'EURCAD'
    while True:
        program(symbol_1)
        program(symbol_2)
        time.sleep(59.8) # it depends on your computer and ping

sync_60sec(trading_bot)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-30 02:21:23

如果出现错误,copy_rates_from将返回None。文档建议调用last_error()来找出错误所在。

(不,我不知道为什么copy_rates_from不引发一个异常来指出错误。显然,该模块是C库的一个薄薄的包装器。)

票数 0
EN

Stack Overflow用户

发布于 2020-07-02 01:16:12

我得到了这个解决方案,它创建了一个数据帧字典。

代码语言:javascript
运行
复制
sym = ["GBPUSD","USDJPY","USDCHF","AUDUSD","GBPJPY"]


# Copying data to dataframe

utc_from = datetime.now()
for i in sym:
  rates = {i:pd.DataFrame(mt5.copy_rates_from(i, mt5.TIMEFRAME_M1, utc_from , 60), 
                 columns=['time', 'open', 'low', 'high', 'close', 'tick_volume', 'spread', 'real_volume']) for i in sym}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62644302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档