def __init__(self, strategy_engine, strategy_name: str, spread: SpreadData,
                 setting: dict):
        """"""
        super().__init__(strategy_engine, strategy_name, spread, setting)

        self.bg = BarGenerator(self.on_spread_bar)
        self.am = ArrayManager()
예제 #2
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        self.bg = XminBarGenerator(self.on_bar,
                                   1,
                                   self.on_hour_bar,
                                   interval=Interval.HOUR)
        self.am = ArrayManager()

        self.liq_price = 0
        self.trading_size = 0

        self.on_bar_time = time1(0, 0)
        self.clearance_time = time1(14, 57)
        self.liq_time = time1(14, 59)

        self.day_clearance = False

        self.buy_svt_orderids = []
        self.sell_svt_orderids = []
        self.short_svt_orderids = []
        self.cover_svt_orderids = []

        self.sell_lvt_orderids = []
        self.cover_lvt_orderids = []
예제 #3
0
class Single_bar:
    """
    用来生成单品种的K线
    
    """
    def __init__(self, strategy: StrategyTemplate, vt_symbol: str):
        """"""
        # 和portfolio的接口
        self.portfolio = strategy
        self.vt_symbol = vt_symbol

        # 需要合成的K线周期设置
        self.bar_interval = self.portfolio.bar_interval
        self.bar_frequency = self.portfolio.bar_frequency

        # K线合成工具和储存容器
        self.bg = BarGenerator(self.on_bar, self.bar_interval,
                               self.on_5min_bar, self.bar_frequency)
        self.am = ArrayManager()

        # K线合成计数
        self.bar_count = 0

    def on_bar(self, bar: BarData):
        """
        Callback of new bar data update.
        """
        self.bg.update_bar(bar)

    def on_5min_bar(self, bar: BarData):
        """"""
        self.bar_count += 1
        self.am.update_bar(bar)
예제 #4
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super(TurtleSignalStrategy, self).__init__(cta_engine, strategy_name,
                                                   vt_symbol, setting)

        self.bg = BarGenerator(self.on_bar)
        self.am = ArrayManager()
예제 #5
0
    def __init__(self, strategy_engine: StrategyEngine, strategy_name: str,
                 vt_symbols: List[str], setting: dict):
        """"""
        super().__init__(strategy_engine, strategy_name, vt_symbols, setting)

        # self.y_symbol = (self.vt_symbols[0].split('.'))[0]
        # self.x_symbol = (self.vt_symbols[1].split('.'))[1]
        self.y_symbol = self.vt_symbols[0]
        self.x_symbol = self.vt_symbols[1]

        self.x_fixed_size = int(np.abs(self.fixed_size * self.x_multiplier))
        self.y_fixed_size = int(np.abs(self.fixed_size * self.y_multiplier))

        self.open_direction_dict['x_symbol'] = 0
        self.open_direction_dict['y_symbol'] = 0

        self.close_direction_dict['x_symbol'] = 0
        self.close_direction_dict['y_symbol'] = 0

        self.ams: Dict = {}
        self.ams[self.y_symbol] = ArrayManager(size=self.hedge_ratio_window +
                                               50)
        self.ams[self.x_symbol] = ArrayManager(size=self.hedge_ratio_window +
                                               50)
        self.sam = SpreadArrayManager(
            size=max(self.std_window, self.mean_window) + 50)
예제 #6
0
 def clear_all(self) -> None:
     """
     Clear all data in the item.
     """
     super().clear_all()
     self._arrayManager = ArrayManager(max(self.MA_PARAMS) + 1)
     self.mas = defaultdict(dict)
     self.last_ix = 0
     self.last_picture = QtGui.QPicture()
예제 #7
0
 def __init__(self, manager: BarManager):
     """"""
     super().__init__(manager)
     # self.periods = [5, 10, 20, 30, 60]
     self.init_setting()
     self._arrayManager = ArrayManager(max(self.MA_PARAMS) + 1)
     self.mas = defaultdict(dict)
     self.last_ix = 0
     self.last_picture = QtGui.QPicture()
예제 #8
0
    def __init__(self, fast_window: int, slow_window: int):
        """"""
        super(MaSignal, self).__init__()

        self.fast_window = fast_window
        self.slow_window = slow_window

        self.bg = BarGenerator(self.on_bar, 5, self.on_5min_bar)
        self.am = ArrayManager()
예제 #9
0
 def __init__(self, manager: BarManager):
     """"""
     super().__init__(manager)
     self.init_setting()
     self._arrayManager = ArrayManager(150)
     self.last_ix = 0
     self.last_picture = QtGui.QPicture()
     self.incs = defaultdict(dict)
     self.br_max = 0
     self.br_min = 0
예제 #10
0
    def __init__(self, cci_window: int, cci_level: float):
        """"""
        super(CciSignal, self).__init__()

        self.cci_window = cci_window
        self.cci_level = cci_level
        self.cci_long = self.cci_level
        self.cci_short = -self.cci_level

        self.bg = BarGenerator(self.on_bar)
        self.am = ArrayManager()
예제 #11
0
    def __init__(self, rsi_window: int, rsi_level: float):
        """Constructor"""
        super(RsiSignal, self).__init__()

        self.rsi_window = rsi_window
        self.rsi_level = rsi_level
        self.rsi_long = 50 + self.rsi_level
        self.rsi_short = 50 - self.rsi_level

        self.bg = BarGenerator(self.on_bar)
        self.am = ArrayManager()
예제 #12
0
 def clear_all(self) -> None:
     """
     Clear all data in the item.
     """
     super().clear_all()
     self._arrayManager = ArrayManager(150)
     self.last_ix = 0
     self.last_picture = QtGui.QPicture()
     self.rsis = defaultdict(dict)
     self.br_max = -np.inf
     self.br_min = np.inf
예제 #13
0
 def __init__(self, manager: BarManager):
     """"""
     super().__init__(manager)
     # self.periods = [6, 12, 24]
     self.init_setting()
     self._arrayManager = ArrayManager(150)
     self.rsis = defaultdict(dict)
     self.last_ix = 0
     self.br_max = -np.inf
     self.br_min = np.inf
     self.last_picture = QtGui.QPicture()
예제 #14
0
파일: rsrs_test.py 프로젝트: CatTiger/vnpy
def draw_his(zscore_data, test_data):
    # RSRS标准分分布
    am = ArrayManager(200, zscore_data, 18)

    rsrs = []
    for bar in test_data:
        am.update_bar(bar)
        rsrs.append(am.rsrs_std())

    ser = pd.Series(rsrs)
    ser.hist(bins=50, color='b', edgecolor='gray', alpha=0.7, grid=False)
    plt.show()
예제 #15
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super(MultiTimeframeStrategy, self).__init__(cta_engine, strategy_name,
                                                     vt_symbol, setting)

        self.rsi_long = 50 + self.rsi_signal
        self.rsi_short = 50 - self.rsi_signal

        self.bg5 = BarGenerator(self.on_bar, 5, self.on_5min_bar)
        self.am5 = ArrayManager()

        self.bg15 = BarGenerator(self.on_bar, 15, self.on_15min_bar)
        self.am15 = ArrayManager()
예제 #16
0
    def __init__(self, strategy_engine, strategy_name: str, spread: SpreadData,
                 setting: dict):
        """"""
        super().__init__(strategy_engine, strategy_name, spread, setting)

        self.bg = BarGenerator(self.on_open_spread_bar, self.open_window,
                               self.on_open_spread_bar)
        self.am = ArrayManager()

        self.spread_pos = 0.0
        self.boll_up = 0.0
        self.boll_down = 0.0
        self.boll_mid = 0.0
예제 #17
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super(BollChannelStrategy, self).__init__(cta_engine, strategy_name,
                                                  vt_symbol, setting)

        self.bg = BarGenerator(self.on_bar, 15, self.on_15min_bar)
        self.am = ArrayManager()
예제 #18
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        self.bg = XminBarGenerator(self.on_bar, self.interval,
                                   self.on_xmin_bar)
        self.am = ArrayManager()

        self.liq_price = 0

        self.on_bar_time = time1(0, 0)
        self.clearance_time = time1(14, 57)
        self.liq_time = time1(14, 59)

        trade_record_fields = [
            "vt_symbol", "orderid", "tradeid", "offset", "direction", "price",
            "volume", "datetime", "strategy", "strategy_name"
        ]
        self.trade_record_file = open(
            "D:/CTA/1-策略开发/1-开发中的策略/14-oscillator_drive/backtesting_trade_record.csv",
            "a",
            newline="")
        self.trade_record_file_writer = csv.DictWriter(self.trade_record_file,
                                                       trade_record_fields)
        self.trade_record_file_writer.writeheader()
예제 #19
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        self.bg = XminBarGenerator(self.on_bar, self.interval, self.on_xmin_bar)
        self.am = ArrayManager()

        self.liq_price = 0
        self.trading_size = 0

        self.on_bar_time = time1(0, 0)
        self.clearance_time = time1(14, 57)  # 清仓开始时间
        self.liq_time = time1(14, 59)  # 交易所结算开始时间

        self.day_clearance = False

        self.buy_svt_orderids = []
        self.sell_svt_orderids = []
        self.short_svt_orderids = []
        self.cover_svt_orderids = []

        self.sell_lvt_orderids = []
        self.cover_lvt_orderids = []

        # 2021年5月10日有极端行情,收益异常高,不具有普遍参考价值,因此在回测中跳过这一天
        extreme_date = "2021-05-10"
        extreme_date = time.strptime(extreme_date, "%Y-%m-%d")
        year, month, day = extreme_date[:3]
        self.extreme_date = datetime.date(year, month, day)
예제 #20
0
    def __init__(
        self,
        strategy_engine: StrategyEngine,
        strategy_name: str,
        vt_symbols: List[str],
        setting: dict
    ):
        """"""
        super().__init__(strategy_engine, strategy_name, vt_symbols, setting)

        self.bgs: Dict[str, BarGenerator] = {}
        self.ams: Dict[str, ArrayManager] = {}

        self.rsi_data: Dict[str, float] = {}
        self.atr_data: Dict[str, float] = {}
        self.atr_ma: Dict[str, float] = {}
        self.intra_trade_high: Dict[str, float] = {}
        self.intra_trade_low: Dict[str, float] = {}

        self.targets: Dict[str, int] = {}
        self.last_tick_time: datetime = None

        # Obtain contract info
        for vt_symbol in self.vt_symbols:
            def on_bar(bar: BarData):
                """"""
                pass

            self.bgs[vt_symbol] = BarGenerator(on_bar)
            self.ams[vt_symbol] = ArrayManager()
            self.targets[vt_symbol] = 0
    def __init__(self, strategy_engine: StrategyEngine, strategy_name: str,
                 vt_symbols: List[str], setting: dict):

        super(TurtleStrategy, self).__init__(strategy_engine, strategy_name,
                                             vt_symbols, setting)
        self.vt_symbols = vt_symbols
        # 合约的list
        self.total_long = 0
        # 所有合约的多仓位和
        self.total_short = 0
        # 所有合约的空仓位和
        self.context = {
            symbol: {
                'entry_long': 0,  # 开/加多仓价格阈值
                'entry_short': 0,  # 开/加空仓价格阈值
                'exit_long': 0,  # 平多仓价格阈值
                'exit_short': 0,  # 平空仓价格阈值
                'atr_value': 0,  # ATR
                'stop_loss_long': 0,  # 多仓止损价格
                'stop_loss_short': 0,  # 空仓止损价格
                'multiplier': 0,  # 合约规模
                'unit': 0,  # 仓位
                'am': ArrayManager(),
            }
            for symbol in vt_symbols
        }

        def on_bar(bar: BarData):
            pass

        self.bgs = {symbol: BarGenerator(on_bar)
                    for symbol in vt_symbols}
        self.last_tick_time: datetime = None
예제 #22
0
    def __init__(
        self,
        strategy_engine: StrategyEngine,
        strategy_name: str,
        vt_symbols: List[str],
        setting: dict
    ):
        """"""
        super().__init__(strategy_engine, strategy_name, vt_symbols, setting)
        
        self.last_tick_time: datetime = None
        self.ams:Dict[str, ArrayManager] = {}
        self.bgs: Dict[str, BarGenerator] = {}

        # 策略内动态调整OLS相关参数,小数参数会被int()


       
        self.short_entry_multiplier = abs(self.entry_multiplier)
        self.short_exit_multiplier = 0
        self.long_entry_multiplier =  -abs(self.entry_multiplier)
        self.long_exit_multiplier = 0

        self.mean_window = int(self.std_window * self.std_mean_window_ratio)

        

        self.y_symbol = self.vt_symbols[0]
        self.x_symbol = self.vt_symbols[1]


        self.x_fixed_size = np.abs(self.fixed_size * 1)
        self.y_fixed_size = np.abs(self.fixed_size * 1)

        self.x_pos_target = 0
        self.y_pos_target = 0




        # 实例化缓存期货品种价格序列容器
        for vt_symbol in self.vt_symbols:

            self.ams[vt_symbol] =  ArrayManager(size=max(self.std_window,self.mean_window)+50)

        #实例化bg容器
        

        for vt_symbol in self.vt_symbols:

            def on_bar(bar: BarData):
                """"""
                pass

            self.bgs[vt_symbol] = BarGenerator(on_bar)


        # 实例化缓存价差价格序列容器
        self.sam = SpreadArrayManager(size=max(self.std_window,self.mean_window)+50)
예제 #23
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        self.bg = XminBarGenerator(self.on_bar, self.interval,
                                   self.on_xmin_bar)
        self.am = ArrayManager()

        self.liq_price = 0
        self.trading_size = 0

        self.on_bar_time = time1(0, 0)
        self.clearance_time = time1(14, 57)  # 清仓开始时间
        self.liq_time = time1(14, 59)  # 交易所结算开始时间

        self.day_clearance = False

        self.buy_svt_orderids = []
        self.sell_svt_orderids = []
        self.short_svt_orderids = []
        self.cover_svt_orderids = []

        self.buy_lvt_orderids = []
        self.sell_lvt_orderids = []
        self.short_lvt_orderids = []
        self.cover_lvt_orderids = []

        self.path = Path.cwd()
        self.trade_record_dict = {}

        self.tick_count = 0

        trade_record_fields = [
            "vt_symbol", "orderid", "tradeid", "offset", "direction", "price",
            "volume", "datetime", "strategy"
        ]

        self.trade_record_wb = openpyxl.load_workbook(
            self.path / "strategies" / "PaperAccount_reord_table.xlsx")
        self.trade_record_wb.iso_dates = True

        sheet_names = self.trade_record_wb.sheetnames

        if self.strategy_name not in sheet_names:
            self.trade_record_sheet = self.trade_record_wb.create_sheet(
                index=0, title=self.strategy_name)
        else:
            self.trade_record_sheet = self.trade_record_wb[self.strategy_name]

        if not self.trade_record_sheet.cell(row=1, column=1).value:
            for i in range(1, len(trade_record_fields) + 1):
                column = get_column_letter(i)
                self.trade_record_sheet[column +
                                        str(1)] = trade_record_fields[i - 1]

        self.trade_record_sheet.freeze_panes = "A2"

        self.trade_record_wb.save(self.path / "strategies" /
                                  "PaperAccount_reord_table.xlsx")
예제 #24
0
    def __init__(self, strategy: StrategyTemplate, vt_symbol: str):
        """"""
        # 和portfolio的接口
        self.portfolio = strategy
        self.vt_symbol = vt_symbol

        # 需要合成的K线周期设置
        self.bar_interval = self.portfolio.bar_interval
        self.bar_frequency = self.portfolio.bar_frequency

        # K线合成工具和储存容器
        self.bg = BarGenerator(self.on_bar, self.bar_interval,
                               self.on_5min_bar, self.bar_frequency)
        self.am = ArrayManager()

        # K线合成计数
        self.bar_count = 0
예제 #25
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super(DualThrustStrategy, self).__init__(cta_engine, strategy_name,
                                                 vt_symbol, setting)

        self.bg = BarGenerator(self.on_bar)
        self.am = ArrayManager()
        self.bars = []
예제 #26
0
    def __init__(self, strategy_engine: StrategyEngine, strategy_name: str,
                 vt_symbols: List[str], setting: dict):
        """"""
        super().__init__(strategy_engine, strategy_name, vt_symbols, setting)

        self.vt_symbol = vt_symbols[0]
        self.bg = BarGenerator(self.on_bar)
        self.am = ArrayManager()
예제 #27
0
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super(KingKeltnerStrategy, self).__init__(
            cta_engine, strategy_name, vt_symbol, setting
        )

        self.bg = BarGenerator(self.on_bar, 5, self.on_5min_bar)
        self.am = ArrayManager()
예제 #28
0
def calculate_adaptive_channel(am: ArrayManager, n: int, dev: float):
    """"""
    ma = am.sma(n)
    std = am.std(n)
    
    boll_up = ma + std * dev
    boll_down =  ma - std * dev

    kk_up = ma + atr * dev 
    kk_down =  ma - atr * dev

    donchian_up = am.high[-n:].max()
    donchian_down = am.low[-n:].min()

    channel_up =  max(boll_up, kk_up, donchian_up)
    channel_down = min(boll_down, kk_down, donchian_down)

    return channel_up, channel_down
    def __init__(self, strategy: StrategyTemplate, vt_symbol: str):
        """"""

        self.portfolio = strategy
        self.vt_symbol = vt_symbol

        self.long_ma_window = self.portfolio.long_ma_window
        self.short_ma_window = self.portfolio.short_ma_window
        self.trailing_percent = self.portfolio.trailing_percent
        self.fixed_size = self.portfolio.fixed_size

        self.long_ma_value = 0
        self.short_ma_value = 0
        self.intra_trade_high = 0
        self.intra_trade_low = 0

        self.bg = BarGenerator(self.on_bar, 5, self.on_5min_bar)
        self.am = ArrayManager()
예제 #30
0
    def __init__(self, strategy_engine: StrategyEngine, strategy_name: str,
                 vt_symbols: List[str], setting: dict):
        """"""
        super().__init__(strategy_engine, strategy_name, vt_symbols, setting)
        self.bgs: Dict[str, BarGenerator] = {}
        self.ams: Dict[str, ArrayManager] = {}
        self.intra_trade_lows: Dict[str, float] = {}
        self.intra_trade_highs: Dict[str, float] = {}
        self.atr_values: Dict[str, float] = {}
        self.atr_mas: Dict[str, float] = {}
        self.rsi_values: Dict[str, float] = {}

        def on_bar(bar: BarData):
            """"""
            pass

        self.bgs[self.vt_symbols[0]] = BarGenerator(on_bar, 15,
                                                    self.on_15min_symbol_bar1)
        self.bgs[self.vt_symbols[1]] = BarGenerator(on_bar, 15,
                                                    self.on_15min_symbol_bar2)
        # self.bgs[self.vt_symbols[2]] = BarGenerator(on_bar,15,self.on_15min_symbol_bar3)

        self.ams[self.vt_symbols[0]] = ArrayManager()
        self.ams[self.vt_symbols[1]] = ArrayManager()
        # self.ams[self.vt_symbols[2]] = ArrayManager()

        self.intra_trade_lows[self.vt_symbols[0]] = 0
        self.intra_trade_lows[self.vt_symbols[1]] = 0
        # self.intra_trade_lows[self.vt_symbols[2]] = 0

        self.intra_trade_highs[self.vt_symbols[0]] = 0
        self.intra_trade_highs[self.vt_symbols[1]] = 0
        # self.intra_trade_highs[self.vt_symbols[2]] = 0

        self.atr_values[self.vt_symbols[0]] = 0
        self.atr_values[self.vt_symbols[1]] = 0
        # self.atr_values[self.vt_symbols[2]] = 0

        self.atr_mas[self.vt_symbols[0]] = 0
        self.atr_mas[self.vt_symbols[1]] = 0
        # self.atr_mas[self.vt_symbols[2]] = 0

        self.rsi_values[self.vt_symbols[0]] = 0
        self.rsi_values[self.vt_symbols[1]] = 0