370 浏览
0

天勤每天盘后会关闭api。程序重启后,如何保持变量值的一致性呢?

这里摸索一个保存为csv文件的方法供参考,详细拆解为七步:

第一步:定义函数

def save_variables_to_csv(variables, filename='D:\\....\\....\\saved_variables.csv'):
df = pd.DataFrame(variables).transpose()
df.to_csv(filename, index_label='symbol')

def load_variables_from_csv(filename='D:\\....\\....\\saved_variables.csv'):
if os.path.exists(filename):
df = pd.read_csv(filename, index_col='symbol')
return df.transpose().to_dict()
return {}

第二步:读取文件

saved_variables = load_variables_from_csv() # 读取本地保存的csv文件,供后续程序中对相应变量赋初始值

第三步:初始化变量(字典套字典)

var_one_dict = saved_variables.get('var_one', {})
var_two_dict = saved_variables.get('var_two', {})
var_three_dict = saved_variables.get('var_three', {})

第四步:针对各品种合约赋值(即本地保存的变量值)

假设交易品种有一个列表如下:

symbols = {
"KQ.m@DCE.i": "铁矿石",
"KQ.m@CZCE.CF": "棉花",
....
}
for symbol, name in symbols.items():    
    var_one = var_one_dict.get(symbol, default_value)
    var_two = var_two_dict.get(symbol, default_value)
    var_three = var_three_dict.get(symbol, default_value)

第五步:使用变量(包括可能的变量值更新)

if 条件1满足:
   var_one = 100;
if 条件2满足:
   var_two = 20;

第六步:根据程序运行结果,逐个品种合约重新对变量赋值

var_one_dict[symbol] = var_one
var_two_dict[symbol] = var_two
var_three_dict[symbol] = var_three

第七步:关闭api前,保存赋值后的变量。

variables_to_save = {
'var_one': var_one_dict,
'var_two': var_two_dict,
'var_three': var_three_dict,
}
save_variables_to_csv(variables_to_save)

api.close() # 最后关闭api

注意:第五步和第六步,在for symbol, name in symbols.items()的循环中运行,逐个合约使用、并更新其变量。第七步,在循环外运行。

剔刀_隐风 已回答的问题 2024年6月28日
0

总体就是数据的写出和读入,我用的json,不知道各有啥优劣了

剔刀_隐风 已回答的问题 2024年6月28日
您正在查看2个答案中的1个,单击此处查看所有答案。