forked from qmhedging/poboquant
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path期货跨月价差交易范例Futures Calendar Spread
70 lines (63 loc) · 3.25 KB
/
期货跨月价差交易范例Futures Calendar Spread
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# coding:utf-8
#!/usr/bin/env python
from PoboAPI import *
import datetime
import numpy as np
#用poboquant python实现,在poboquant上运行,如果有问题 可加群 726895887 咨询
#简单的价差交易例子,并不挣钱,细节读者自己添加
#在用户设置里查一下自己的初始测试账户名称,是不是“回测期货”,不是的话改成你自己的测试期货账户名称即可
#A very simple example of calendar spread trade of futures
#开始时间,用于初始化一些参数
def OnStart(context) :
print "I\'m starting..."
#登录交易账号,需在主页用户管理中设置账号,并把证券测试替换成您的账户名称
context.myacc = None
if context.accounts.has_key("回测期货") :
print "登录交易账号[回测期货]"
if context.accounts["回测期货"].Login() :
context.myacc = context.accounts["回测期货"]
SubscribeQuote(["ma901.CZCE","ma905.CZCE"]) #同时订阅ma901和ma905
g.code1="ma901.CZCE"
g.code2="ma905.CZCE"
def OnOrderChange(context, AccountName, order) :
Test = context.accounts["回测期货"].GetOrder(order.id)
print str(Test.volume)
#实时行情事件,当有新行情出现时调用该事件
def OnQuote(context,code) :
option=PBObj()
#option.buysellflag='0'
pos = context.accounts["回测期货"].GetPositions()
#print "positions ",pos
#print "len(pos) ",len(pos)
dyndatama1901 = GetQuote(g.code1)
dyndatama1905 = GetQuote(g.code2)
ma1901now=dyndatama1901.now
ma1905now=dyndatama1905.now
print "spread ",ma1901now-ma1905now
#如果使用默认回测设置,将计算每日15:00的价差
if ma1901now-ma1905now<=159 and len(pos)==0 :#最新价差小于159且没有持仓就买入
print "to buy Spread...."
context.myacc.InsertOrder(g.code1, BSType.BuyOpen, ma1901now, 1)
context.myacc.InsertOrder(g.code2, BSType.SellOpen, ma1905now, 1)
print "positions bought"
bal=context.accounts["回测期货"].AccountBalance.AssetsBalance #返回成交后账户权益
#api参考https://quant.pobo.net.cn/quant/doc?name=api#%E6%8C%81%E4%BB%93%E5%AF%B9%E8%B1%A1position%E7%94%A8%E6%B3%95
print "账户金额 :"+str(bal)
#orders = context.accounts["回测期货"].GetOrder(order.id)
#print str(orders.volume)
#OnOrderChange(context, "回测期货", order)
TradeDetails = context.accounts["回测期货"].GetTradeDetails()
print TradeDetails
#print "len(pos) in trade ",len(pos)
pos = context.accounts["回测期货"].GetPositions()
print "len(pos) str in trade "+str(len(pos))
#ma1下穿ma2时卖出平仓
if ma1901now-ma1905now>164 and len(pos)>0: #有持仓且最新价差大于164就卖出
print "to sell Spread..."
context.myacc.InsertOrder(g.code1, BSType.BuyClose, ma1901now, 1)
context.myacc.InsertOrder(g.code2, BSType.SellClose, ma1905now, 1)
print "positions sold"
bal=context.accounts["回测期货"].AccountBalance.AssetsBalance #返回成交后账户权益
print "账户金额 :"+str(bal)
pos = context.accounts["回测期货"].GetPositions()
print "len(pos) str in trade "+str(len(pos))