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()

欢迎关注我的头条号:

"""
https://www.toutiao.com/c/user/token/MS4wLjABAAAAvoCuaYVdUl48Gpr92OSX-OFJ3Vgk35OfQexHAC4Jsnw/??tab=article
"""