我的一本字典有个奇怪的问题。你知道吗
下面是一个方法,它将根据接收到的时间帧执行另一个方法。时间框架为m1、m5、m15、m30、H1、H4、D1、W1、m1。你知道吗
基本上从1分钟到1个月。你知道吗
def get_trading_range(self, init_date, time_frame):
"""
"""
key = time_frame[:1]
tr_dict = {
'D' : self._daily_range(init_date),
'W' : self._weekly_range(init_date),
'M' : self._monthly_range(init_date),
'H' : self._hourly_range(init_date, time_frame),
'm' : self._minutely_range(init_date, time_frame)
}
return tr_dict[key]
方法的调用方式如下
DateRange().get_trading_range(datetime(some_date), 'D1')
它似乎在选择“m”方法。我尝试删除'm'键和值,然后再次执行时,它选择'H'方法。只有同时删除“m”和“H”键和值时,才会执行“D”方法。你知道吗
这是什么奇怪的虫子吗?你知道吗
这是回溯
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "engine.py", line 25, in _historical
HistoricalCollector().historical_prices(hist_queue, live_queue, event)
File "/home/nonroot/fxcmminer_1.1/fxcm/historical.py", line 90, in historical_prices
self._historical_iter(hist_queue, live_queue, fxoffer)
File "/home/nonroot/fxcmminer_1.1/fxcm/historical.py", line 73, in _historical_iter
self._collect_data(fxc, offer, time_frame, init_date)
File "/home/nonroot/fxcmminer_1.1/fxcm/historical.py", line 28, in _collect_data
dtx = DateRange().get_trading_range(init_date, time_frame)
File "/home/nonroot/fxcmminer_1.1/fxcm/tradinghours.py", line 84, in get_trading_range
'm' : self._minutely_range(init_date, time_frame),
File "/home/nonroot/fxcmminer_1.1/fxcm/tradinghours.py", line 103, in _minutely_range
freq = self._data_frequency(time_frame)[0]
File "/home/nonroot/fxcmminer_1.1/fxcm/tradinghours.py", line 23, in _data_frequency
return freq_keys[time_frame]
KeyError: 'D1'
也尝试了key = time_frame[0]
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "engine.py", line 25, in _historical
HistoricalCollector().historical_prices(hist_queue, live_queue, event)
File "/home/nonroot/fxcmminer_1.1/fxcm/historical.py", line 90, in historical_prices
self._historical_iter(hist_queue, live_queue, fxoffer)
File "/home/nonroot/fxcmminer_1.1/fxcm/historical.py", line 73, in _historical_iter
self._collect_data(fxc, offer, time_frame, init_date)
File "/home/nonroot/fxcmminer_1.1/fxcm/historical.py", line 28, in _collect_data
dtx = DateRange().get_trading_range(init_date, str(time_frame))
File "/home/nonroot/fxcmminer_1.1/fxcm/tradinghours.py", line 84, in get_trading_range
'm' : self._minutely_range(init_date, time_frame),
File "/home/nonroot/fxcmminer_1.1/fxcm/tradinghours.py", line 103, in _minutely_range
freq = self._data_frequency(time_frame)[0]
File "/home/nonroot/fxcmminer_1.1/fxcm/tradinghours.py", line 23, in _data_frequency
return freq_keys[time_frame]
KeyError: 'D1'
问题是这些方法在创建
tr_dict
时被调用,而不是在您访问它时被调用,这就是为什么您的_minutely_range
被time_frame = "D1"
调用的原因。你知道吗尝试以下操作:
这样,只有在必要时才会调用这些方法。你知道吗
看起来函数没有返回'm'或'H',但是在回溯时正在计算它们。是
key
而不是time_frame
传递给它们的函数吗?你知道吗相关问题 更多 >
编程相关推荐