VeighNa量化社区
你的开源社区量化交易平台
KeKe's Avatar
Member
离线
187 帖子
声望: 51

海龟策略一般用于 日线级别的国内期货。

用的是本地停止单,就比如就比如当前价格是100点,海龟策略发出信号,在下一根K线的120线发出买入:
若价格没突破到120点,继续挂着。
若价格从100涨到130,那么在120点的时候停止单变成市价单追上去保证尽可能成交。
若下一根K线的开盘价大于120,那么以开盘价来立刻成交

收到,这是个bug,我们尽快修复。

原因是查询持仓的回调函函数(onRspQryInvestorPosition)中是data['InstrumentID']这里插入数据报错, InstrumentID仅仅指的是合约代码,不包含交易所代码。所以插入套利合约(SPC c1907&cs1909)会报错。

除了委托价格外,还需要填写交易数量,如买1手,2手

请提供一下截图。
一个简单的方法是在ctp发单函数里面 print 合约,委托号,价格等; 然后在委托回报里面也print 同样的信息。
在cmd上查看是这类信息是否正常打印

发单既要填合约品种,也要填交易所。
如交易螺纹钢,那么交易所是SHFE,品种代码是rb1905

有时候第二套(盘后测试)ctp连接不了,会出现上面报错。
但是第一套ctp可以连接。
这是SimNow自身出现的问题

VtTIckData字段是对接ThostFtdcUserApiStruct.h文件中CThostFtdcDepthMarketDataField的结构体,你可以修改或者插入新的字段["Turnover"]

///深度行情
struct CThostFtdcDepthMarketDataField
{
    ///交易日
    TThostFtdcDateType  TradingDay;
    ///合约代码
    TThostFtdcInstrumentIDType  InstrumentID;
    ///交易所代码
    TThostFtdcExchangeIDType    ExchangeID;
    ///合约在交易所的代码
    TThostFtdcExchangeInstIDType    ExchangeInstID;
    ///最新价
    TThostFtdcPriceType LastPrice;
    ///上次结算价
    TThostFtdcPriceType PreSettlementPrice;
    ///昨收盘
    TThostFtdcPriceType PreClosePrice;
    ///昨持仓量
    TThostFtdcLargeVolumeType   PreOpenInterest;
    ///今开盘
    TThostFtdcPriceType OpenPrice;
    ///最高价
    TThostFtdcPriceType HighestPrice;
    ///最低价
    TThostFtdcPriceType LowestPrice;
    ///数量
    TThostFtdcVolumeType    Volume;
    ///成交金额
    TThostFtdcMoneyType Turnover;
    。。。。。。

请问是哪间期货公司?
并且再次一下他们申请产品名称、授权编码。

(因为这两样东西是6月前要求强制上线,当前还有些公司没有提供)

getContract函数是直接从内存上获取的dict类型数据的

请检查一下你Python/Anaconda版本 ; 和numpy版本

在ctp_gateway.py的持仓查询回报函数可以修改插入字段和逻辑,下面是该函数

    def onRspQryInvestorPosition(self, data: dict, error: dict, reqid: int, last: bool):
        """"""
        if not data:
            return

        # Get buffered position object
        key = f"{data['InstrumentID'], data['PosiDirection']}"
        position = self.positions.get(key, None)
        if not position:
            position = PositionData(
                symbol=data["InstrumentID"],
                exchange=symbol_exchange_map[data["InstrumentID"]],
                direction=DIRECTION_CTP2VT[data["PosiDirection"]],
                gateway_name=self.gateway_name
            )
            self.positions[key] = position

        # Get contract size, return if size value not collected
        size = symbol_size_map.get(position.symbol, None)
        if not size:
            return

        # For SHFE position data update
        if position.exchange == Exchange.SHFE:
            if data["YdPosition"] and not data["TodayPosition"]:
                position.yd_volume = data["Position"]
        # For other exchange position data update
        else:
            position.yd_volume = data["Position"] - data["TodayPosition"]

        # Calculate previous position cost
        cost = position.price * position.volume * size

        # Update new position volume
        position.volume += data["Position"]
        position.pnl += data["PositionProfit"]

        # Calculate average position price
        if position.volume:
            cost += data["PositionCost"]
            position.price = cost / (position.volume * size)

        # Get frozen volume
        if position.direction == Direction.LONG:
            position.frozen += data["ShortFrozen"]
        else:
            position.frozen += data["LongFrozen"]

        if last:
            for position in self.positions.values():
                self.gateway.on_position(position)

            self.positions.clear()

github网址:https://github.com/vnpy/vnpy
wiki上是老版本的vnpy开发文档,2.0版本的文档在以后会上线
project上是2.0版本的开发计划

这1.9.2版本trade copy模块是基于py2.7,32位写的。
报错内容是ui图形界面报错。
先检查一下你python版本对不对

deap库提供了scoop和multiprocessing库的支持。但是发现在jupter notebook上运行仍然是单进程(纯py文件正常),另外有时会无法输入最终结果pop。
多进程问题在修复中

1.9版本的应用模块是在trader/app文件夹内。
vnpy2.0把app文件移动至vnpy根目录。(当前暂时移植了cta策略模块)

vnpy\trader文件夹下的object有定义的vt_symbol,可以去看一下

这是查询持仓的回调函函数(onRspQryInvestorPosition)报错。

 

查看原函数后,发现是data['InstrumentID']这里插入数据报错, InstrumentID仅仅指的是合约代码,不包含交易所代码。所以插入套利合约(SPC c1905&cs1905)会报错。这个bug我们尽量修复一下

    def onRspQryInvestorPosition(self, data: dict, error: dict, reqid: int, last: bool):
        """"""
        if not data:
            return

        # Get buffered position object
        key = f"{data['InstrumentID'], data['PosiDirection']}"
        position = self.positions.get(key, None)
        if not position:
            position = PositionData(
                symbol=data["InstrumentID"],
                exchange=symbol_exchange_map[data["InstrumentID"]],
                direction=DIRECTION_CTP2VT[data["PosiDirection"]],
                gateway_name=self.gateway_name
            )
            self.positions[key] = position

如果是trader文件夹,打开vnpy根目录就可以看到。
如果指的是vnTrader(GUI图形界面),则可以通过运行run.py来打开

在之前的一个帖子上可以提供了解决途径提问求助 VN trader里面选好接口按启动就没反应了,可以试试这个方法:

 

你是不是在启动页面选择底层接口时,选择了盈透证券那一个选项。你可以去掉盈透和富途证券选项以后试试,估计你的vnconda缺ib的接口文件。
http://interactivebrokers.github.io/#
在这里下载最新版本并安装TWS API\source\pythonclient\ibapi到site-packages

talib没装好,可以试一下另一种方法:手动安装

  1. 进入Unofficial Windows Binaries for Python Extension Packages中找到talib对应的版本(如py3.7,64位)
  2. 下载对应版本的文件TA_Lib‑0.4.17‑cp37‑cp37m‑win_amd64.whl
  3. 下载好whl文件之后,直接在命令行下安装文件即可,如下。成功后会显示“Sucessful installed TA_Lib‑0.4.17”
    pip install TA_Lib‑0.4.17‑cp37‑cp37m‑win_amd64.whl
© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】