0
关注
1
关注者

自动定时停止实盘,自动定时重启实盘

创建于: 2022-03-20 09:15:46, 更新于:
comments   14
hits   720
更多内容
全部留言
avatar of fmzfiyan
fmzfiyan
#!/usr/bin/python # -*- coding: utf-8 -*- import time import json import ssl import logging from datetime import datetime name = 'XXXX' #策略名称 logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) fh = logging.FileHandler('log-'+name+'.run') fh.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) logger.addHandler(ch) ssl._create_default_https_context = ssl._create_unverified_context try: import md5 import urllib2 from urllib import urlencode except: import hashlib as md5 import urllib.request as urllib2 from urllib.parse import urlencode accessKey = '14XXXXXXXXXXXXX888' secretKey = '98XXXXXXXXXXXXXXXXXXf2' def api(method, *args): d = { 'version': '1.0', 'access_key': accessKey, 'method': method, 'args': json.dumps(list(args)), 'nonce': int(time.time() * 1000), } d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest() return json.loads(urllib2.urlopen('https://www.youquant.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8')) logger.info('start.py start'); while True: time.sleep(3) try: # rlist = api('GetRobotList', 0, 5, -1, '') rlist = api('GetRobotList') print (rlist) for r in rlist['data']['result']['robots']: if r['name'] != name: continue if datetime.now().isoweekday() < 6: now_localtime = time.strftime("%H:%M:%S", time.localtime()) if "09:27:00" < now_localtime < "11:30:00" or "12:58:00" < now_localtime < "15:00:00": #股指合约交易时间 if r['status'] == 1: logger.info(name+' is running') else: logger.info('RestartRobot '+str(r['id'])) logger.info(api('RestartRobot', r['id'])) continue if r['status'] == 4: logger.info(name + ' is stoped') else: logger.info(name + ' not stoped, status: ' + str(r['status']) + ' stop it!') logger.info(api('StopRobot', r['id'])) except: logger.info('error') time.sleep(30) ''' # 返回托管者列表 print(api('GetNodeList')) # 返回交易所列表 print(api('GetPlatformList')) # GetRobotList(offset, length, robotStatus, label),传-1代表获取全部 print(api('GetRobotList', 0, 5, -1, 'member2')) # CommandRobot(robotId, cmd)向实盘发送命令 print(api('CommandRobot', 123, 'ok')) # StopRobot(robotId)返回实盘状态代码 print(api('StopRobot', 123)) # RestartRobot(robotId)返回实盘状态代码 print(api('RestartRobot', 123)) # GetRobotDetail(robotId)返回实盘详细信息 print(api('GetRobotDetail', 123)) '''
2025-03-05 10:40:02
avatar of 雨幕(youquant)
雨幕(youquant)
使用FMZ的扩展API接口可以实现策略实盘的定时启动/停止。在文库里有一些参考文章可以看下。
2022-03-20 14:20:17
avatar of 雨幕(youquant)
雨幕(youquant)
https://www.youquant.com/digest-topic/6772 文库里有好几篇相关内容,可以参考。
2024-05-08 18:13:44
avatar of hyea99
hyea99
能否详细告知下如何实现策略实盘的定时启动/停止。文库找了好久没看到。谢谢了。
2024-05-08 18:10:37
avatar of 雨幕(youquant)
雨幕(youquant)
都可以,简单说就是GetCommand调用一次,才获取一次。
2022-03-23 08:47:05
avatar of ibelievein
ibelievein
非常感谢,我写一个循环看一下,for循环或者while都可以吧
2022-03-22 18:42:01
avatar of 雨幕(youquant)
雨幕(youquant)
你的实盘要写一个循环,不停的GetCommand去拿命令才行,检查下是不是就拿了一次。就没有去更新了。
2022-03-22 18:13:05
avatar of ibelievein
ibelievein
然后我Log出来的是前一次的,最新的偶尔能获取到,有时候又得重启才行
2022-03-22 18:05:41
avatar of ibelievein
ibelievein
https://www.fmz.cn/api/v1?access_key=###&secret_key=###&method=CommandRobot&args=[XXX,+"1|2|3|4"]
2022-03-22 18:03:12
avatar of ibelievein
ibelievein
您好,比如说我用API在10:31传过去一个值100,这时程序读取显示的是100。 然后我在10:32传过去一个值200,这时程序读取显示的还是100,没有更新新数据。 只有我停掉这个程序然后重启他才能读取显示最新的数据200
2022-03-22 17:33:39
avatar of 雨幕(youquant)
雨幕(youquant)
不太可能,您检查下是不是哪里写错了。
2022-03-22 17:32:15
avatar of ibelievein
ibelievein
您好,比如说我用API10:31传过去数据是100,然后10:32再传过去一个数据是1000,这时应该读取的是1000这个数,可是我查了一下读取的还是前一次的100,只有停掉程序再重新启动,才能读取到最新的数据1000
2022-03-22 17:29:14
avatar of 雨幕(youquant)
雨幕(youquant)
没有太明白您的意思。麻烦您详细描述一下场景。
2022-03-22 10:50:09
avatar of ibelievein
ibelievein
非常感谢平台提供的教程,请问怎么更新API缓存,每次传过去新的API都要停止重启才能获取到,不然一直用的都是旧的缓存
2022-03-22 09:56:16