vn.py量化社区
By Traders, For Traders.
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
加入于:
帖子: 42
声望: 0

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

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3