VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 7
声望: 1

回馈老大和各位奉献者。

vnpy优点不必多讲,短板是在图表直观分析方面不足。当然我想本来的设计目标不在此。
现在鱼与熊掌想得兼,我考虑了一个思路:

  1. vnpy根据策略跑一个交易记录,保存为csv文件
  2. 用tbpy(交易开拓者的接口)把交易记录写入TBQuant
  3. TBQuant写指标读取上述数据,并根据它们交易

第2步代码:

import datetime
import csv
import tbpy

# 初始化
tbpy.init()
symbols = ['rb888.SHFE']
code = symbols[0]
freq = '5m'

# 下面读取csv文件
with open('c:\\trade.csv', 'r') as f:
    reader = csv.reader(f)
    # print(type(reader))
    for row in reader:
        if row[0] == "tradeid":
            continue
        r1 = row[4]
        r2 = row[5]
        r3 = row[6]
        r4 = row[8][0:19]
        if r1 == "多":
            direction = 1
        else:
            direction = -1
        if r2 == "开":
            offset = 1
        else:
            offset = -1
        price = float(r3)
        time = datetime.datetime.strptime(r4, "%Y-%m-%d %H:%M:%S")
        print(direction, offset, price, time)
        tbpy.write_fundamental("direction", code, time, direction)
        tbpy.write_fundamental("offset", code, time, offset)
        tbpy.write_fundamental("price", code, time, price)

第3步代码:

Params
	//此处添加参数
Vars
	//此处添加变量
	Dic<Integer> TBdirection("direction"); 
	Dic<Integer> TBoffset("offset"); 
	Dic<Numeric> TBprice("price"); 

Defs
	//此处添加公式函数
	
Events
	//此处实现事件函数

	//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
	OnBar(ArrayRef<Integer> indexs)
	{
		//只考察有效数据
		if(	TBdirection<>InvalidInteger && TBoffset<>InvalidInteger && TBprice<>InvalidNumeric && TBdirection[1]<>InvalidInteger )
		{
			if(TBdirection==1 && TBdirection[1]<>1) 
			{
				if(TBoffset==1 )
					buy(1,TBprice);
				Else if(TBoffset==-1)
					BuyToCover(1,TBprice);
			}
			Else if(TBdirection==-1 && TBdirection[1]<>-1) 
			{
				if(TBoffset==1 )
					SellShort(1,TBprice);
				Else if(TBoffset==-1)
					Sell(1,TBprice);
			}
		}
	}

Member
avatar
加入于:
帖子: 50
声望: 1

这个想法挺好的,不过在tbq中的数据,细节上跟vnpy的会有点差异,如果数据也能调得一致就很好了。
当然,想直观可视化是希望能看看信号是否正常,从这个角度来说,数据细节有差异并不是什么大问题。