def on_pos(context, pos_handler, request_id, source, rcv_time): # print 'on_pos..' # print pos_handler.dump() # print pos_handler.get_tickers() stbase.TradeManager().kf_proxy.on_pos(pos_handler, request_id, source, rcv_time)
def init(): tm = stbase.TradeManager().init(context,logpath='z:/ams/main',strategy_name='main') stock = tm.addStock('1000001') stock2 = tm.addStock('1300252') stock3 = tm.addStock('1300310') stock4 = tm.addStock('1300025') stock.add_tick_handler(on_tick) stock2.add_tick_handler(on_tick) stock3.add_tick_handler(on_tick) stock4.add_tick_handler(on_tick) # stock.add_bar_handler(on_bar_m1,'m1') stock.add_bar_handler(on_bar_m5,'m5') stock.add_bar_handler(on_bar_m15,'m15') stock2.add_bar_handler(on_bar_m5, 'm5') stock2.add_bar_handler(on_bar_m15, 'm15') stock3.add_bar_handler(on_bar_m5, 'm5') stock3.add_bar_handler(on_bar_m15, 'm15') stock4.add_bar_handler(on_bar_m5, 'm5') stock4.add_bar_handler(on_bar_m15, 'm15') print_line(hash_object(context.Strategy.Product)) prd = context.Strategy.Product print_line(prd.Name) print_line(prd.Stk_UseableAmt) print_line(prd.Stk_CurrentAmt) print_line(prd.Stk_StkValue) pos_list = prd.S_Pos print_line('len:{}'.format(len(pos_list))) pos_list=[] for pos in pos_list: print_line('ServerCode:{}'.format(pos.ServerCode)) print_line('BsFlag:{}'.format(pos.BsFlag)) print_line('CurrentQty:{}'.format(pos.CurrentQty)) print_line('PositionQty:{}'.format(pos.PositionQty)) print_line('TDTotalQty:{}'.format(pos.TDTotalQty)) print_line('YdQty:{}'.format(pos.YdQty)) print_line('TdQty:{}'.format(pos.TdQty)) print_line('YdClosingqty:{}'.format(pos.YdClosingqty)) print_line('TdClosingqty:{}'.format(pos.TdClosingqty)) print_line('MarginUsedAmt:{}'.format(pos.MarginUsedAmt)) print_line('OpenAvgPrice:{}'.format(pos.OpenAvgPrice)) print_line('PostCostAmt:{}'.format(pos.PostCostAmt)) print_line('--'*20) for bar in stock.get_hist_bars(ktype='week',limit=10): print_line(stock.bar_data(bar)) print 'last_price:{} ,yesterday_close_price:{}'.format(stock.last_price , stock.yesterday_close_price)
def record_signal(code, data, name=''): stbase.print_line(data, stdout=True) if name: name = name + '_' + code + '.signal' fname = stbase.TradeManager().getDataPath(name) data = current_datetime_string() + ' ' + data fp = open(fname, 'a+') # fp.writelines([data]) fp.write(data + '\n') fp.close()
def strategy_inday(code, bar, num=100, limit=0.02): """日内涨跌幅策略 @:param code: 股票代码 @:param num :买卖数量 @:param limit: 价格浮动限 """ stock = stbase.TradeManager().getStock(code) zf = stock.last_price / stock.yesterday_close_price - 1 if zf <= -limit: #跌幅过限 amount = stbase.TradeManager().kf_proxy.get_ammount() pos_sum = stock.pos.net_total if stock.last_price * pos_sum <= amount * 0.1: """持仓资金占总资金 <= 10% """ stbase.TradeManager().kf_proxy.buy(code, num) elif zf >= limit: if stock.pos.net_total >= num: stbase.TradeManager().kf_proxy.sell(code, num)
def strategy_ma(code=CODE, interval=5): """计算均线策略""" close = get_bars(code, interval) print 'size:', len(close) # print close # nbar = interval a, b = ta.MA(close, 5)[-2:] c, d = ta.MA(close, 10)[-2:] if b >= d and a < c: num = 100 amount = stbase.TradeManeager().kf_proxy.get_ammount() last_price = stbase.TradeManager().getStock(code).last_price cost = last_price * num if cost <= amount * 0.1: stbase.TradeManager().kf_proxy.buy(code, num) if b <= d and a > c: num = 100 if num <= stbase.TradeManager().getStock(code).pos.net_yd: stbase.TradeManager().kf_proxy.sell(code, num)
def init(): tm = stbase.TradeManager().init(context, logpath='z:/ams/pufa', strategy_name='pufa') # 不保存行情数据 codes = ['1000001', '1300252', '1300310', '1300025', '0600000'] # stock = tm.addStock('0600000') # stock = tm.addStock('1300310') #宜通世纪 stocks = [] for code in codes: stock = tm.addStock(code) stocks.append(stock) stock.add_tick_handler(on_tick)
def on_tick(stock, stk): import simple_st # simple_st.strategy_inday(stock.code) # stk = stock.stk # print_line(stk.ServerCode,stk.KnockPrice,stk.KnockTime,stk.BuyPrice1 print_line(stock.last_price) if not context.data.get('buy', False): print 'do buy()..' # order_no = stbase.TradeManager().xy_proxy.buy(stock.code,stock.last_price,100) order_no = stbase.TradeManager().xy_proxy.sell(stock.code, stock.last_price, 100) context.data['buy'] = True print 'order_no is:' + str(order_no)
def on_tick(stock, stk): import simple_st # simple_st.strategy_inday(stock.code) # stk = stock.stk # print_line(stk.ServerCode,stk.KnockPrice,stk.KnockTime,stk.BuyPrice1 print_line(stock.last_price) print_line('BuyPrice1:{} BuyQty1:{} SellPrice1:{} SellQty1:{}'.format( stk.BuyPrice1, stk.BuyQty1, stk.SellPrice1, stk.SellQty1)) if not context.data.get('buy', False): qty = int((stk.SellQty1 * 0.1) / 100) * 100 print 'do buy()..', qty order_no = stbase.TradeManager().xy_proxy.buy(stock.code, stk.SellPrice1, qty) # order_no = stbase.TradeManager().xy_proxy.sell(stock.code,stk.BuyPrice1,100) # context.data['buy'] = True print 'order_no is:' + str(order_no)
def init(): tm = stbase.TradeManager().init(context, logpath='z:/ams/md', strategy_name='md_rec', market_data_save=True) codes = [ '1000001', '1300252', '1300310', '1300025', '0600000', '1300638', '1300504', '0601162' ] # stock = tm.addStock('0600000') # stock = tm.addStock('1300310') #宜通世纪 stocks = [] for code in codes: stock = tm.addStock(code) stocks.append(stock)
def strategy_ma(code=CODE, interval=5): """计算均线策略""" # close = get_bars(code, interval) stock = stbase.TradeManager().getStock(code) bars = stock.get_hist_bars('m{}'.format(interval), limit=30) close = map(lambda _: _.Close, bars) close = np.array(close) stbase.print_line('size:%s' % len(close)) # if not close: # print 'error: close is null.' print close.tolist() stbase.print_line(close.tolist()) print 'to ma calculating...' ma5 = ta.MA(close, 5) ma10 = ta.MA(close, 10) a, b = ma5[-2:] c, d = ma10[-2:] strategy_name = 'strategy_ma' # print 'ma5:',ma5 # print 'ma10:',ma10 stbase.print_line('=={}=={}=='.format(code, interval)) stbase.print_line('(strategy_ma) ma5:{}'.format(ma5.tolist()), stdout=False) stbase.print_line('(strategy_ma) ma10:{}'.format(ma10.tolist()), stdout=False) stbase.print_line('(strategy_ma)a:{} b:{} c:{} d:{}'.format(a, b, c, d), stdout=False) last_price = stbase.TradeManager().getStock(code).last_price if b >= d and a < c: num = 100 # stbase.print_line('-*'*20,stdout=False) # stbase.print_line('strategy_ma signal occur. (b >= d and a< c)',stdout=False) # stbase.print_line('a:{} b:{} c:{} d:{}'.format(a,b,c,d),stdout=False) stbase.record_signal(code, '-*' * 20) stbase.record_signal(code, '=={}=={}=='.format(code, interval)) stbase.record_signal(code, 'strategy_ma signal occur. (b >= d and a< c)') stbase.record_signal(code, 'a:{} b:{} c:{} d:{}'.format(a, b, c, d)) amount = stbase.TradeManager().xy_proxy.get_stock_amount_useable() cost = last_price * num if cost <= amount * 0.1: stbase.record_signal( code, 'do buy: {} , {} , {}'.format(code, last_price, num)) stbase.TradeManager().xy_proxy.buy(code, last_price, num) if b <= d and a > c: num = 100 # stbase.print_line('-*' * 20, stdout=False) # stbase.print_line('strategy_ma signal occur. (b <=d and a > c)',stdout=False) # stbase.print_line('a:{} b:{} c:{} d:{}'.format(a, b, c, d),stdout=False) stbase.record_signal(code, '-*' * 20) stbase.record_signal(code, '=={}=={}=='.format(code, interval)) stbase.record_signal(code, 'strategy_ma signal occur. (b <=d and a > c)') stbase.record_signal(code, 'a:{} b:{} c:{} d:{}'.format(a, b, c, d)) if num <= stbase.TradeManager().getStock(code).pos.net_yd: stbase.record_signal( code, 'do sell: {} ,{}, {}'.format(code, last_price, num)) stbase.TradeManager().xy_proxy.sell(code, last_price, num)
def strategy_inday(code, num=100, limit=0.02, base_price=0): """日内涨跌幅策略 @:param code: 股票代码 @:param num :买卖数量 @:param limit: 价格浮动限 base_price : 参考基准价格 , 0 表示采用昨收盘价格 当日仅仅允许买卖各触发一次 """ stock = stbase.TradeManager().getStock(code) if base_price == 0: zf = stock.last_price / stock.yesterday_close_price - 1 else: zf = stock.last_price / base_price - 1 st_price = stock.yesterday_close_price * (1 + limit) st_price = round(st_price, 2) # stbase.println('st_price:%s '%st_price) stbase.println('zf:{} limit:{} diff:{}'.format(zf, limit, zf - limit)) if zf <= -limit and stock.any.flag_buy: stbase.print_line( '(strategy_inday) zf:%s last_price:%s base_price:%s' % (zf, stock.last_price, base_price)) stbase.record_signal(code, '=={}=='.format(code)) stbase.record_signal(code, 'strategy_inday signal occur. (zf <= -limit)') stbase.record_signal(code, 'zf:{} limit:{}'.format(zf, limit)) #跌幅过限 amount = stbase.TradeManager().xy_proxy.get_stock_amount_useable() pos_sum = stock.pos.net_total # if stock.pos.post_cost_amount <= amount * 0.1: """持仓资金占总资金 <= 10% """ stbase.record_signal( code, 'do buy: {} ,{}, {}'.format(code, st_price, num)) stbase.TradeManager().xy_proxy.buy(code, st_price, num) strategy_inday_buy_count[code] = 1 stock.any.flag_buy = 0 stock.any.flag_sell = 1 if zf >= limit and stock.any.flag_sell: # print '=*'*20 stbase.print_line( '(strategy_inday) zf:%s last_price:%s base_price:%s' % (zf, stock.last_price, base_price)) stbase.TM.record_signal(code, '=={}=='.format(code)) stbase.TM.record_signal(code, '-*' * 20) stbase.TM.record_signal(code, 'strategy_inday signal occur. (zf >= -limit)') stbase.TM.record_signal(code, 'zf:{} limit:{}'.format(zf, limit)) stbase.TM.record_signal( code, 'net_total:{} net_yd:{}'.format(stock.pos.net_total, stock.pos.net_yd)) if stock.pos.net_total >= num: stbase.TM.record_signal( code, 'do sell: {} ,{}, {}'.format(code, st_price, num)) stbase.TradeManager().xy_proxy.sell(code, st_price, num) strategy_inday_sell_count[code] = 1 stock.any.flag_sell = 0 stock.any.flag_buy = 1
#coding:utf-8 from utils.useful import hash_object from functools import partial import stbase import simple_st context = None print_line = stbase.TradeManager().print_line def init(): tm = stbase.TradeManager().init(context,logpath='z:/ams/main',strategy_name='main') stock = tm.addStock('1000001') stock2 = tm.addStock('1300252') stock3 = tm.addStock('1300310') stock4 = tm.addStock('1300025') stock.add_tick_handler(on_tick) stock2.add_tick_handler(on_tick) stock3.add_tick_handler(on_tick) stock4.add_tick_handler(on_tick) # stock.add_bar_handler(on_bar_m1,'m1') stock.add_bar_handler(on_bar_m5,'m5') stock.add_bar_handler(on_bar_m15,'m15') stock2.add_bar_handler(on_bar_m5, 'm5')
def init(): tm = stbase.TradeManager().init(context, logpath='z:/ams/test') # stock = tm.addStock('1000001') # stock = tm.addStock('0600006') stock = tm.addStock('0600000') # stock = tm.addStock('1300123') # # stock = tm.addStock('1300252') # stock.add_tick_handler(on_tick) # stock.add_bar_handler(on_bar_m1,'m1') # stock.add_bar_handler(on_bar_m5,'m5') # stock.add_bar_handler(on_bar_m15,'m15') # print '='*20 print_line(hash_object(context.Strategy.Product)) prd = context.Strategy.Product print_line(prd.Name) print_line(prd.Stk_UseableAmt) print_line(prd.Stk_CurrentAmt) print_line(prd.Stk_StkValue) pos_list = prd.S_Pos print_line('len:{}'.format(len(pos_list))) pos_list = [] for pos in pos_list: # if not pos.ServerCode == '1000001': # if not pos.ServerCode == '0600000': # if not pos.ServerCode == '1300252': # continue print_line('ServerCode:{}'.format(pos.ServerCode)) print_line('BsFlag:{}'.format(pos.BsFlag)) print_line('CurrentQty:{}'.format(pos.CurrentQty)) print_line('PositionQty:{}'.format(pos.PositionQty)) print_line('TDTotalQty:{}'.format(pos.TDTotalQty)) print_line('YdQty:{}'.format(pos.YdQty)) print_line('TdQty:{}'.format(pos.TdQty)) print_line('YdClosingqty:{}'.format(pos.YdClosingqty)) print_line('TdClosingqty:{}'.format(pos.TdClosingqty)) print_line('MarginUsedAmt:{}'.format(pos.MarginUsedAmt)) print_line('OpenAvgPrice:{}'.format(pos.OpenAvgPrice)) print_line('PostCostAmt:{}'.format(pos.PostCostAmt)) print_line('--' * 20) # for bar in stock.get_hist_bars(ktype='week',limit=10): # print_line(stock.bar_data(bar)) # # print 'last_price:{} ,yesterday_close_price:{}'.format(stock.last_price , stock.yesterday_close_price) # simple_st.strategy_ma(stock.code,5) print_line('get_stock_amount_useable:%s' % stbase.TradeManager().xy_proxy.get_stock_amount_useable()) print_line('get_stock_amount_asset:%s' % stbase.TradeManager().xy_proxy.get_stock_amount_asset()) print_line('pos detail:%s' % stock.pos) # bars = stock.get_hist_bars('m1', limit=30) # bars = stock.get_hist_bars('m5', limit=30) # close = map(lambda _: _.Close, bars) # print_line(close) # test - ordering # stbase.TradeManager().addTimer(on_timer) # stock.add_trade_handler(on_trade) # print 'code:',stock.code # print 'net_yd:',stock.pos.net_yd # print str(stock) #查询委托订单 # print_line("orders:%s"% len(context.Strategy.All_Order)) orders = stbase.TradeManager().xy_proxy.get_orders().filter(code='0600008', serial=39917) for order in orders.to_list(): println(stbase.format_order(order))
def on_tick(context, md, source, rcv_time): stbase.TradeManager().kf_proxy.on_tick(md, source, rcv_time)
def strategy_inday(code, num=100, limit=0.02): """日内涨跌幅策略 @:param code: 股票代码 @:param num :买卖数量 @:param limit: 价格浮动限 当日仅仅允许买卖各触发一次 """ global strategy_inday_buy_count global strategy_inday_sell_count stock = stbase.TradeManager().getStock(code) zf = stock.last_price / stock.yesterday_close_price - 1 # stbase.print_line('(strategy_inday) zf:%s last_price:%s yd_close_price:%s'%(zf,stock.last_price,stock.yesterday_close_price),stdout=False ) # stbase.print_line('strategy_inday,=={}=='.format(code)) strategy_name = 'strategy_inday' st_price = stock.yesterday_close_price * (1 + limit) st_price = round(st_price, 2) # stbase.println('st_price:%s '%st_price) stbase.println('zf:{} limit:{} diff:{}'.format(zf, limit, zf - limit)) if zf <= -limit: stbase.print_line( '(strategy_inday) zf:%s last_price:%s yd_close_price:%s' % (zf, stock.last_price, stock.yesterday_close_price), stdout=False) stbase.record_signal(code, '=={}=='.format(code)) stbase.record_signal(code, 'strategy_inday signal occur. (zf <= -limit)') stbase.record_signal(code, 'zf:{} limit:{}'.format(zf, limit)) #跌幅过限 amount = stbase.TradeManager().xy_proxy.get_stock_amount_useable() pos_sum = stock.pos.net_total # if stock.pos.post_cost_amount <= amount * 0.1 and strategy_inday_buy_count.get( code, 0) == 0: """持仓资金占总资金 <= 10% """ stbase.record_signal( code, 'do buy: {} ,{}, {}'.format(code, st_price, num)) stbase.TradeManager().xy_proxy.buy(code, st_price, num) strategy_inday_buy_count[code] = 1 if zf >= limit: # print '=*'*20 stbase.print_line( '(strategy_inday) zf:%s last_price:%s yd_close_price:%s' % (zf, stock.last_price, stock.yesterday_close_price)) stbase.TM.record_signal(code, '=={}=='.format(code)) stbase.TM.record_signal(code, '-*' * 20, 'strategy_inday') stbase.TM.record_signal(code, 'strategy_inday signal occur. (zf >= -limit)') stbase.TM.record_signal(code, 'zf:{} limit:{}'.format(zf, limit)) stbase.TM.record_signal( code, 'net_total:{} net_yd:{}'.format(stock.pos.net_total, stock.pos.net_yd)) if stock.pos.net_total >= num and strategy_inday_sell_count.get( code, 0) == 0: stbase.TM.record_signal( code, 'do sell: {} ,{}, {}'.format(code, st_price, num)) stbase.TradeManager().xy_proxy.sell(code, st_price, num) strategy_inday_sell_count[code] = 1
def initialize(context): stbase.TradeManager().kf_proxy.on_init(context) stbase.TradeManager().any.trade = True print '==' * 30
#coding:utf-8 """ wingchun strategy -n s1 -p test_by.py """ import stbase import simple_st STOCK_LIST = simple_st.STOCK_LIST bar_log_file = 'bar.log' tick_log_file = 'tick.log' stbase.TradeManager().init().addStock(STOCK_LIST) def print_line(text, fp=None): text = str(text) # if fp: # fp.write(text+'\n') # fp.flush() print text def on_timer(context): # print '>> onTimer()..' context.insert_func_after_c(1, on_timer) def initialize(context): stbase.TradeManager().kf_proxy.on_init(context)