コード例 #1
0
def test_cobra_backtest():
    bars = read_1min()
    signals = bt.generate_signals(bars,
                                  len(bars) - 10000, bt.get_default_signals)

    long_open_event = Event(
        name="开多",
        operate=Operate.LO,
        factors=[
            Factor(name="5分钟三买",
                   signals_all=[Signal("5分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
        ])
    long_exit_event = Event(
        name="平多",
        operate=Operate.LE,
        factors=[
            Factor(name="1分钟一卖",
                   signals_all=[Signal("1分钟_倒1笔_类买卖点_类一卖_任意_任意_0")]),
            Factor(name="5分钟一卖",
                   signals_all=[Signal("5分钟_倒1笔_类买卖点_类一卖_任意_任意_0")]),
            Factor(name="5分钟二卖",
                   signals_all=[Signal("5分钟_倒1笔_类买卖点_类二卖_任意_任意_0")]),
            Factor(name="5分钟三卖",
                   signals_all=[Signal("5分钟_倒1笔_类买卖点_类三卖_任意_任意_0")])
        ])
    pairs, pf = bt.long_trade_simulator(signals,
                                        long_open_event,
                                        long_exit_event,
                                        T0=True,
                                        verbose=True)
    assert len(pairs) == 65
    assert pf['累计收益(%)'] > pf['基准收益(%)']

    event = Event(name="多头过滤",
                  operate=Operate.LO,
                  factors=[
                      Factor(name="多头过滤",
                             signals_all=[
                                 Signal("30分钟_倒1K_DIF多空_多头_任意_任意_0"),
                             ]),
                  ])
    pairs, pf = bt.one_event_estimator(signals, event)
    assert len(pairs) == 8
    assert pf['累计收益(%)'] > pf['基准收益(%)']
コード例 #2
0
ファイル: test_advanced_trader.py プロジェクト: sjm44/czsc
def run_advanced_trader(T0=True):
    bars = read_1min()
    kg = BarGenerator(base_freq='1分钟',
                      freqs=['5分钟', '15分钟', '30分钟', '60分钟', '日线'],
                      max_count=3000)
    for row in tqdm(bars[:150000], desc='init kg'):
        kg.update(row)

    long_events = [
        Event(name="开多",
              operate=Operate.LO,
              factors=[
                  Factor(name="5分钟一买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类一买_任意_任意_0")]),
                  Factor(name="1分钟一买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类一买_任意_任意_0")]),
              ]),
        Event(name="加多1",
              operate=Operate.LA1,
              factors=[
                  Factor(name="5分钟二买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类二买_任意_任意_0")]),
                  Factor(name="1分钟二买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类二买_任意_任意_0")]),
              ]),
        Event(name="加多2",
              operate=Operate.LA1,
              factors=[
                  Factor(name="5分钟三买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
                  Factor(name="1分钟三买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
              ]),
        Event(name="平多",
              operate=Operate.LE,
              factors=[
                  Factor(name="5分钟二卖",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类二卖_任意_任意_0")]),
                  Factor(name="5分钟三卖",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类三卖_任意_任意_0")])
              ]),
    ]
    long_pos = PositionLong(symbol='000001.SH',
                            hold_long_a=0.5,
                            hold_long_b=0.8,
                            hold_long_c=1,
                            T0=T0)
    short_events = [
        Event(name="开空",
              operate=Operate.SO,
              factors=[
                  Factor(name="5分钟一买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类一买_任意_任意_0")]),
                  Factor(name="1分钟一买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类一买_任意_任意_0")]),
              ]),
        Event(name="加空1",
              operate=Operate.SA1,
              factors=[
                  Factor(name="5分钟二买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类二买_任意_任意_0")]),
                  Factor(name="1分钟二买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类二买_任意_任意_0")]),
              ]),
        Event(name="加空2",
              operate=Operate.SA1,
              factors=[
                  Factor(name="5分钟三买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
                  Factor(name="1分钟三买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
              ]),
        Event(name="平空",
              operate=Operate.SE,
              factors=[
                  Factor(name="5分钟二卖",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类二卖_任意_任意_0")]),
                  Factor(name="5分钟三卖",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类三卖_任意_任意_0")])
              ]),
    ]
    short_pos = PositionShort(symbol='000001.SH',
                              hold_short_a=0.5,
                              hold_short_b=0.8,
                              hold_short_c=1,
                              T0=T0)
    ct = CzscAdvancedTrader(
        bg=kg,
        get_signals=get_default_signals,
        long_events=long_events,
        long_pos=long_pos,
        short_events=short_events,
        short_pos=short_pos,
    )
    assert len(ct.s) == 28
    for row in tqdm(bars[150000:], desc="trade"):
        ct.update(row)
        # if long_pos.pos_changed:
        #     print(" : long op     : ", long_pos.operates[-1])
        # if short_pos.pos_changed:
        #     print(" : short op    : ", short_pos.operates[-1])

        if ct.long_pos.pos > 0:
            assert ct.long_pos.long_high > 0
            assert ct.long_pos.long_cost > 0
            assert ct.long_pos.long_bid > 0

        if ct.short_pos.pos > 0:
            assert ct.short_pos.short_low > 0
            assert ct.short_pos.short_cost > 0
            assert ct.short_pos.short_bid > 0

    long_yk = pd.DataFrame(ct.long_pos.pairs)['盈亏比例'].sum()
    short_yk = pd.DataFrame(ct.short_pos.pairs)['盈亏比例'].sum()
    assert abs(long_yk) == abs(short_yk)
    print(f"\nT0={T0}: 多头累计盈亏比例:{long_yk};空头累计盈亏比例:{short_yk}")
    if not T0:
        assert ct.s['多头_最大_盈利'] == '超过800BP_任意_任意_0'
        assert ct.s['多头_累计_盈亏'] == '盈利_超过800BP_任意_0'
        assert ct.s['空头_最大_回撤'] == '超过800BP_任意_任意_0'
        assert ct.s['空头_累计_盈亏'] == '亏损_超过800BP_任意_0'
コード例 #3
0
ファイル: test_bar_generator.py プロジェクト: Spallasss/czsc
# coding: utf-8
import os
import pandas as pd
from tqdm import tqdm

from czsc.objects import RawBar, Freq
from czsc.utils.bar_generator import BarGenerator, freq_end_time
from test.test_analyze import read_1min

cur_path = os.path.split(os.path.realpath(__file__))[0]
kline = read_1min()


def test_freq_end_time():
    assert freq_end_time(pd.to_datetime("2021-11-11 09:43"),
                         Freq.F1) == pd.to_datetime("2021-11-11 09:43")
    assert freq_end_time(pd.to_datetime("2021-11-11 09:43"),
                         Freq.F5) == pd.to_datetime("2021-11-11 09:45")

    assert freq_end_time(pd.to_datetime("2021-11-11 09:43"),
                         Freq.F15) == pd.to_datetime("2021-11-11 09:45")
    assert freq_end_time(pd.to_datetime("2021-11-11 09:45"),
                         Freq.F15) == pd.to_datetime("2021-11-11 09:45")
    assert freq_end_time(pd.to_datetime("2021-11-11 14:56"),
                         Freq.F15) == pd.to_datetime("2021-11-11 15:00")

    assert freq_end_time(pd.to_datetime("2021-11-11 09:43"),
                         Freq.F30) == pd.to_datetime("2021-11-11 10:00")
    assert freq_end_time(pd.to_datetime("2021-11-11 09:43"),
                         Freq.F60) == pd.to_datetime("2021-11-11 10:30")
    assert freq_end_time(pd.to_datetime("2021-11-11 09:43"),
コード例 #4
0
ファイル: test_advanced_trader.py プロジェクト: liuts/czsc
def test_advanced_trader_with_t0():
    bars = read_1min()
    kg = KlineGenerator(max_count=3000,
                        freqs=['1分钟', '5分钟', '15分钟', '30分钟', '60分钟', '日线'])
    for row in tqdm(bars[:150000], desc='init kg'):
        kg.update(row)

    events = [
        Event(name="开多",
              operate=Operate.LO,
              factors=[
                  Factor(name="5分钟一买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类一买_任意_任意_0")]),
                  Factor(name="1分钟一买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类一买_任意_任意_0")]),
              ]),
        Event(name="加多1",
              operate=Operate.LA1,
              factors=[
                  Factor(name="5分钟二买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类二买_任意_任意_0")]),
                  Factor(name="1分钟二买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类二买_任意_任意_0")]),
              ]),
        Event(name="加多2",
              operate=Operate.LA1,
              factors=[
                  Factor(name="5分钟三买",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
                  Factor(name="1分钟三买",
                         signals_all=[Signal("1分钟_倒1笔_类买卖点_类三买_任意_任意_0")]),
              ]),
        Event(name="平多",
              operate=Operate.LE,
              factors=[
                  Factor(name="5分钟二卖",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类二卖_任意_任意_0")]),
                  Factor(name="5分钟三卖",
                         signals_all=[Signal("5分钟_倒1笔_类买卖点_类三卖_任意_任意_0")])
              ]),
    ]
    long_pos = PositionLong(symbol='000001.SH',
                            hold_long_a=0.5,
                            hold_long_b=0.8,
                            hold_long_c=1,
                            T0=True)
    ct = CzscAdvancedTrader(kg=kg,
                            get_signals=get_default_signals,
                            long_events=events,
                            long_pos=long_pos)
    assert len(ct.s) == 16
    for row in tqdm(bars[150000:], desc="trade"):
        ct.update(row)
        if long_pos.pos_changed:
            print(" : op    : ", long_pos.operates[-1])

        if ct.long_pos.pos > 0:
            assert ct.long_pos.long_high > 0
            assert ct.long_pos.long_cost > 0
            assert ct.long_pos.long_bid > 0

    print(pd.DataFrame(ct.long_pos.evaluate_operates())['盈亏比例'].sum())