vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 29
声望: 0

在vnpy.app.algo_trading/algos/ 文件夹里自建了一个 算法策略,可是登陆vnstation,点击算法交易模块, 算法一栏的下拉框里,就是找不到自己写的算法策略。 哪怕复制了dma_alog.py,从命名未dma2_algo. 也没有看到。请问是哪里还需要配置吗?

Administrator
avatar
加入于:
帖子: 3913
声望: 209

要在algo_trading/engine.py文件中手动添加的

Member
avatar
加入于:
帖子: 29
声望: 0

算法交易引擎启动,算法配置载入成功。
本地代码:XBTUSD.BITMEX,方向:Direction.LONG,类型:OrderrType.LIMIT,价格:9200,数量:166,开平:Offset.OPEN
状态: 算法状态:True
成交数量:0,
vt_orderid: ,
order_status: .

最后两行:请问为什么是空值。我计划完全仿照 DMA直接委托。
利用CTA交易,也是返回的委托ID是空值

Administrator
avatar
加入于:
帖子: 3913
声望: 209

这两个日志输出在哪里写的?

Member
avatar
加入于:
帖子: 29
声望: 0

class CycleAlgo(AlgoTemplate):
"""
循环开仓,平仓。固定开平价格。记录循环次数
"""

display_name = "Cycle 循环委托"

default_setting = {
    "vt_symbol": "XBTUSD.BITMEX",
    "direction": [Direction.LONG.value, Direction.SHORT.value],
    "order_type": [
        OrderType.MARKET.value,
        OrderType.LIMIT.value,
        OrderType.STOP.value,
        OrderType.FAK.value,
        OrderType.FOK.value
    ],
    "price": 0.0,
    "volume": 0.0,
    "offset": [
        Offset.NONE.value,
        Offset.OPEN.value,
        Offset.CLOSE.value,
        Offset.CLOSETODAY.value,
        Offset.CLOSEYESTERDAY.value
    ]
}

variables = [
    "traded",
    "vt_orderid",
    "order_status",
]

def __init__(
    self,
    algo_engine: BaseEngine,
    algo_name: str,
    setting: dict
):
    """"""
    super().__init__(algo_engine, algo_name, setting)

    # Parameters
    self.vt_symbol = setting["vt_symbol"]
    self.direction = Direction(setting["direction"])
    self.order_type = OrderType(setting["order_type"])
    self.price = setting["price"]
    self.volume = setting["volume"]
    self.offset = Offset(setting["offset"])
    if Direction(setting["direction"])==Direction.LONG:
        self.interval_price = 88
    else:
        self.interval_price = -88
    # Variables
    self.vt_orderid = ""
    self.traded = 0
    self.order_status = ""

    self.subscribe(self.vt_symbol)
    self.put_parameters_event()
    self.put_variables_event()

def on_tick(self, tick: TickData):
    """"""
    if self.vt_orderid:
        return    #有委托,就跳出

    if self.direction == Direction.LONG:
        """
            判断做多方向时,没有委托时,进行对应操作
            仓位0,无委托,进行开仓
            仓位0,有委托,不操作
            仓位不是0,无委托,进行平仓
            仓位不是0,有委托,不操作
        """
        if self.pos==0:
            self.vt_orderid = self.buy(
                self.vt_symbol,
                self.price,
                self.volume,
                self.order_type,
                self.offset
            )
        else:
            self.vt_orderid = self.sell(
                self.vt_symbol,
                self.price+self.interval_price,
                self.volume,
                self.order_type,
                self.offset 
            )

    else:
        """
            判断做空方向时,没有委托时,进行什么操作
        """
        if self.pos==0:
            self.vt_orderid = self.sell(
                self.vt_symbol,
                self.price,
                self.volume,
                self.order_type,
                self.offset
            )
        else:
            self.vt_orderid = self.buy(
                self.vt_symbol,
                self.price+self.interval_price,
                self.volume,
                self.order_type,
                self.offset 
            )

    self.put_variables_event()

def on_order(self, order: OrderData):
    """"""
    self.traded = order.traded
    self.order_status = order.status

    if not order.is_active():
        self.vt_orderid = ""
    self.put_variables_event()

def on_trade(self, trade: TradeData):
    """"""
    pass
Member
avatar
加入于:
帖子: 29
声望: 0

这是完整的循环策略代码, 就是看不到开仓委托。几乎完全仿照 dma_algo.py

Member
avatar
加入于:
帖子: 49
声望: 2

buy/sell不就是委托吗?

Member
avatar
加入于:
帖子: 29
声望: 0

可是返回来的 vt_orderid 是空值

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