#STEP2:log logger.info("Starting yiboduo strategy for: %s"%SYMBOL) api = TqApi(TqSim()) klines = api.get_kline_serial(SYMBOL, duration_seconds=60*60*24, data_length=20) #ticks = api.get_tick_serial(SYMBOL) quote = api.get_quote(SYMBOL) while True: api.wait_update() # 跟踪log信息,日k数据会产生两个信号:一个是开盘时,另一个时收盘;如果想根据收盘k线分析前期趋势,用第二个信号 # 这样就没有之前认为必须开盘才能分析之前所存在的趋势型机会了。 # 实盘是只要14:59或盘后任何时间触发运行即可,一次退出; # 想尾盘参与策略型机会则收盘前运行回报策略型机会,次日择机参与则盘后任何时间运行即可 if api.is_changing(klines): df = klines.to_dataframe() #logger.info("DATE: %s, close: %f"%(get_market_day(klines[-1]["datetime"]), klines[-1]["close"])) trading_date = bases.get_market_day(klines[-1]["datetime"]) #STEP3-策略型机会判定 #logger.info("DEBUG: high is %s, close is %fLIANGBODUO"%(klines[-1]["high"], klines[-1]["close"])) is_yiboduo = stgy4zd.yi_bo_duo(quote, klines, logger) if is_yiboduo: logger.info("MYSTRATEGY - YIBODUO date: %s, for %s" %(trading_date, SYMBOL)) #实盘只要收盘后跑一次即可确定 break api.close() logger.removeHandler(fh)
# 交易预警参数 k_count = 0 signal_interval = 10 short_price = 0.0 sum_profit = 0.0 last_kong_index = 0 kaipan_di = False while True: api.wait_update() # 新产生一根K线计算分时均价,判断滞涨止跌信号 if api.is_changing(klines[-1], "datetime"): df = klines.to_dataframe() trading_date = bases.get_market_day(klines[-1]["datetime"]) if trading_date != cur_trading_date: current_volume = 0 traded_volume = 0 #logger.info("###%s, %s",trading_date, cur_trading_date) cur_trading_date = trading_date # workaround: ignore the first signal for kline with last day's close df["date"] = df.datetime.apply(lambda x: bases.get_market_day(x)) df = df[(df["date"] == cur_trading_date)] if len(df) > 1: continue df["time"] = df.datetime.apply(lambda x: bases.get_kline_time(x)) df["date"] = df.datetime.apply(lambda x: bases.get_market_day(x)) df = df[(df["date"] == cur_trading_date)]