zoukankan      html  css  js  c++  java
  • 期权量化学习(3)——找到交易对象

    简单来看,登陆账户并了解了账户信息后,我们就可以进行交易了;交易的前提是我们要以行情数据(事件)为基础。

    行情初始化事件—OnMarketQuotationInitialEx(context, exchange, daynight)

    触发时间,行情初始化时触发,一般夜盘交易所在晚上20点40分左右调用,白盘交易所在早上8点40左右调用。每个交易所的行情初始化是分开的。即每个交易所行情初始化时都会触发该事件。上交所、深交所、中金所因为没有夜盘不会在夜盘初始化时触发。

    #每天行情初始化的,获取当前的豆粕期货主力合约作为标的,获取对应的平价期权
    def OnMarketQuotationInitialEx(context, exchange,daynight):
        #过滤掉非大商所的信号
        if exchange != 'DCE' or daynight!='night':
            return
       print('登陆交易账户')

      

    参数:

    context:上下文信息对象

    exchange:行情市场代码,表示此次初始化事件对应的是哪个交易所,交易所代码是全部大写组成,小写的话平台将不与识别

    上交所-SHSE、深交所-SZSE、上期所-SHFE、大商所-DCE、郑商所-CZCE、中金所-CFFEX、上海能源中心-INE

    daynight:夜盘或者日盘标志,表示此次初始化的是夜盘还是白盘,'night'表示夜盘,会在晚上20点40分左右行情初始化,'day'表示白盘,在早上8点40左右行情初始化

    开盘事件OnExchangeOpen(context, accountname, exchangecode, productcode),市场开盘时调用(之前必须先登录账号)

    收盘事件OnExchangeClose(context, accountname, exchangecode, productcode),市场收盘时调用(之前必须先登录账号)

      

      #收盘后打印资金情况  
    def OnExchangeClose(context, accountname, exchangecode, productcode):
        if exchangecode == 'DCE':
            print ('收盘啦++++++++++++++++++++++')
            bal = context.myacc.AccountBalance
            print('资金余额: ' + str(bal.CashBalance))
            print('昨日资金余额: ' + str(bal.CashBalanceYesterday))
            print('当日手续费: ' + str(bal.DailyFee))
            print('当日盈亏: ' + str(bal.CashBalance - bal.CashBalanceYesterday))
            print('浮动盈亏: ' + str(bal.FloatingProfit))
            print('可用保证金: ' + str(bal.AvailableMargin))
            print('持仓占用保证金: ' + str(bal.FrozenMargin))
            print('净资产: ' + str(bal.NetAssets))
            print('动态权益: ' + str(bal.DynamicNetAssets))
            print('风险度: ' + str(bal.RiskDegree))
    

      

    品种主力合约—GetMainContract (ExchangeCode, VarietyCode, Type),用于查询某一品种的主力合约

     #获取主力合约期权标的
        g.biaodi = GetMainContract('DCE', 'm',20)
        print (g.biaodi)
    

     

     

    常见的交易所代码以及品种代码: https://quant.pobo.net.cn/doc?name=api#%E9%99%84%E5%BD%95%E5%9B%9B-%E5%B8%B8%E8%A7%81%E7%9A%84%E4%BA%A4%E6%98%93%E6%89%80%E4%BB%A3%E7%A0%81%E4%BB%A5%E5%8F%8A%E5%93%81%E7%A7%8D%E4%BB%A3%E7%A0%81

    查询交易所信息—GetExchangeInfo, 一个词典,包含id对应的交易所信息,字段有:代码、名称、简称

    exchange = GetExchangeInfo('DCE')
        print(exchange)
    

      

     获取标的K线——GetHisData2 (code, bar_type=BarType.Day, start_date=None, end_date=None, count=None, weight_type=0),

    用于获取历史k线数据,其中有等号的参数是可不填的,等号后是默认值,与GetHisData主要区别是在写法上更简便。

        klinedata = GetHisData2(g.biaodi, BarType.Day)      
        lastclose = klinedata[-1].close
        print(lastclose) #收盘价
    

      

     注意:与GetHisData类似,start_date/end_date/count三个参数只需要填写两个,如果不小心三个都填了,生效的将是start_date和count。

    如果不填写,默认是从当前时间向前取1000条。

    查询期权合约列表—GetOptionContracts (ObjectStockCode, ExcuteDate, Type,AdjustFlag),用于查询某期权标的对应的期权合约列表

    查询期权标的列表—GetOptionObjects (ExchangeId),用于查询某交易所的期权标的列表

      #获取期权
        g.atmopc = GetAtmOptionContract(g.biaodi,None,lastclose,0)
        print (g.atmopc)
    

      

     至此,我们已经找到要交易的对象了。

    完整代码如下:

    #!/usr/bin/env python
    # coding:utf-8
    from PoboAPI import *
    import datetime
    import time
    import numpy as np
    from copy import *
    
    #开始时间,用于初始化一些参数
    def OnStart(context) :
        context.myacc = None
        #登录交易账号
        if context.accounts["回测期货"].Login() :
            context.myacc = context.accounts["回测期货"]
    
    #每天行情初始化的,获取当前的豆粕期货主力合约作为标的,获取对应的平价期权
    def OnMarketQuotationInitialEx(context, exchange,daynight):
    #     过滤掉非大商所的信号
        if exchange != 'DCE' or daynight!='night':
            return
        print('登陆交易账户')
        
        exchange = GetExchangeInfo('DCE')
        print(exchange)
        
        #获取主力合约期权标的
        g.biaodi = GetMainContract('DCE', 'm',20)
        print (g.biaodi)
        
        klinedata = GetHisData2(g.biaodi, BarType.Day)      
        lastclose = klinedata[-1].close
        print(lastclose)
        
        #获取期权
        g.atmopc = GetAtmOptionContract(g.biaodi,None,lastclose,0)
        print (g.atmopc)
    

      

  • 相关阅读:
    web性能优化
    9.1_the end
    8.28_the end
    1.获取元素绝对位置
    8.14_end
    JavaScript 函数用途
    JavaScirpt事件处理
    《JavaScript语言精粹》读书笔记
    《图解http协议》之HTTPs学习笔记
    Laya 1.x 按文件夹TS代码合并
  • 原文地址:https://www.cnblogs.com/adam012019/p/14717332.html
Copyright © 2011-2022 走看看