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

如题所述,我先利用一个空策略完成了tick数据到minutebar的合成和存储,然后利用原始的tick数据和新和成的minute bar同时进行vnpy示例策略:double_MA_strategy的回测。结果出乎意料地出现了许多不同,请问这是为何?

# tick数据合成分钟k并存储到数据库中
import csv
from datetime import datetime
from vnpy_ctastrategy import (
    CtaTemplate,
    StopOrder,
    TickData,
    BarData,
    TradeData,
    OrderData,
    BarGenerator,
    ArrayManager,
)

from pymongo import MongoClient
from datetime import datetime, timezone
import os 
from vnpy.trader.constant import Exchange
from vnpy.trader.database import get_database
from vnpy.trader.object import TickData

# 获取数据库管理器
database_manager = get_database()
class TickDataToBarData(CtaTemplate):
    """"""



    parameters = [

    ]
    variables = [

    ]

    def on_init(self) -> None:
        """
        Callback when strategy is inited.
        """
        self.write_log("策略初始化")

        # # 初始化CSV文件
        # self.csv_file = open(f"bar_data_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv", 'w', newline='', encoding='utf-8')
        # self.csv_writer = csv.writer(self.csv_file)
        # # 写入CSV表头
        # self.csv_writer.writerow([
        #     'symbol', 'exchange', 'datetime', 'interval', 
        #     'open_price', 'high_price', 'low_price', 'close_price',
        #     'volume', 'turnover', 'open_interest'
        # ])

        self.bg = BarGenerator(self.on_bar)


    def on_start(self) -> None:
        """
        Callback when strategy is started.
        """
        self.write_log("策略启动")

    def on_stop(self) -> None:
        """
        Callback when strategy is stopped.
        """
        self.write_log("策略停止")
        # 关闭CSV文件
        # self.csv_file.close()

    def on_tick(self, tick: TickData) -> None:
        """
        Callback of new tick data update.
        """
        self.bg.update_tick(tick)

    def on_bar(self, bar: BarData) -> None:
        """
        Callback of new bar data update.
        """

        bars = []
        bars.append(bar)
        database_manager.save_bar_data(bars)
        # 将BarData写入CSV文件
        # self.csv_writer.writerow([
        #     bar.symbol,
        #     bar.exchange.value,  # 转换为字符串
        #     bar.datetime.strftime('%Y-%m-%d %H:%M:%S'),
        #     bar.interval.value,
        #     bar.open_price,
        #     bar.high_price,
        #     bar.low_price,
        #     bar.close_price,
        #     bar.volume,
        #     bar.turnover,
        #     bar.open_interest
        # ])

        self.put_event()

    def on_order(self, order: OrderData) -> None:
        """
        Callback of new order data update.
        """
        pass

    def on_trade(self, trade: TradeData) -> None:
        """
        Callback of new trade data update.
        """
        self.put_event()

    def on_stop_order(self, stop_order: StopOrder) -> None:
        """
        Callback of stop order update.
        """
        pass
Member
avatar
加入于:
帖子: 3
声望: 0

description

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

description

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

沪公网安备 31011502017034号

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