真格:期货账户登入设置及断线重连代码分享
coding:utf-8
from PoboAPI import * from datetime import datetime, date, time
from time import sleep
import pandas as pd
import numpy as np
import random
开始事件,用于初始化一些参数
def OnStart(context) :
log.info('卖股指期权策略启动...')
# 回测时用这个
if context.backtest :
context.accounts["回测期货"].Login()
if context.accounts["回测期货"].Login() :
g.myacc = context.accounts["回测期货"]
# 实盘时用这个
else :
context.accounts["博易模拟"].Login()
if context.accounts["博易模拟"].Login() :
g.myacc = context.accounts["博易模拟"]
g.object_symbol = '000300.SHSE' # 标的物合约码
行情初始化
def OnMarketQuotationInitialEx(context, exchange, daynight) :
if exchange != 'SHSE' : return # 过滤掉非上交所的信号
# 每天至少一次 Logout 和 Login,否则策略可能出现一些问题(例如无法拿到当日最新上线的合约代码等)
if g.myacc.IsLogined() == False : g.myacc.Login() # 登入账号(已经设置闹钟于15:15登出账户)
# 风控:设置检查自成交
g.myacc.SetSelfTradeCheckFlag(True)
# 设置闹钟(省略第二个参数、闹钟不重复)
context.alarmid_close_print = SetAlarm(time(15, 3)) # 收盘打印账户交易结果
context.alarmid_close_logout = SetAlarm(time(15, 15)) # 收盘登出账户
#订阅行情驱动OnQuote事件
SubscribeQuote(g.object_symbol)
行情更新事件
def OnQuote(context, code) :
# 检查账户是否断线,防止未登录账户发单报错
if g.myacc.IsLogined() == False : return # 移交给 断线事件和定时器 完成重新登入账户任务
定时器事件
def OnTimer(context, timerid) :
if hasattr(context, "timer") :
if timerid == context.timer :
if g.myacc.IsLogined() == False :
g.myacc.Login() # 定时器触发,执行登入账户指令
else :
KillTimer(context.timer) # 如果登入账户了,杀死定时器
delattr(context, "timer")
断线事件:模拟/实盘在断线时会触发,回测时不会触发。
def OnTradeAccountDisconnected(context, accountname) :
cur_date, cur_time = GetCurrentDatetime() # 获取当前时间
if time(9, 30) <= cur_time <= time(15, 0) : # 非交易时间内断线(账户登出),不开启定时器(避免误判后开启定时器占用资源)
context.timer = SetTimer(60) # 开启定时器,每隔 60 秒触发一次定时器
闹钟事件(收盘打印)
def OnAlarm(context, alarmid) :
if hasattr(context, "alarmid_close_logout") and alarmid == context.alarmid_close_logout and g.myacc.IsLogined() == True :
g.myacc.Logout()
自定义函数
def GetCurrentDatetime() :
"""
功能:获取当前日期与时间
输出: datetime类型
例程:
current_date, current_time = GetCurrentDatetime()
"""
# 获取当前日期
cur_datetime = GetCurrentTime()
return cur_datetime.date(), cur_datetime.time()
欢迎关注我的头条号:
回复 0:
按时间排序
您尚未登录,请 登录 真格量化发表回复