def setUp(self): #prepare data sopen = np.array([randint(10000, 15000) for i in range(2000)]) sclose = np.array([randint(10000, 15000) for i in range(2000)]) svolume = np.array([randint(1000, 15000) for i in range(2000)]) shigh = np.max(np.array([sopen, sclose]), axis=0) slow = np.max(np.array([sopen, sclose]), axis=0) savg = sopen + sclose / 2 samount = svolume * sopen / 1000 trans = [sopen, sclose, svolume, shigh, savg, samount, svolume] g5 = np.array([randint(0, 10000) for i in range(2000)]) g20 = np.array([randint(0, 10000) for i in range(2000)]) g60 = np.array([randint(0, 10000) for i in range(2000)]) g120 = np.array([randint(0, 10000) for i in range(2000)]) g250 = np.array([randint(0, 10000) for i in range(2000)]) s = BaseObject(code='SH00TEST', transaction=trans, g5=g5, g20=g20, g60=g60, g120=g120, g250=g250) s.catalog = {s: g5} s.c60 = {s: g5} self.stock = s
def setUp(self): #prepare data sopen = sclose = svolume = shigh = slow = savg = samount = np.array( [randint(10000, 15000) for i in range(2000)]) shour = np.array([randint(10000, 15000) for i in range(8000)]) trans = [sopen, sclose, svolume, shigh, savg, samount, svolume] vi = np.array([i for i in range(2000)]) g = np.array([randint(0, 10000) for i in range(2000)]) s = BaseObject(code='SH50TEST', zgb=10000000, ag=4000, transaction=trans, atr=g, atr2=g, silver=g, g5=g, g20=g, g60=g, g120=g, g250=g, diff=g, dea=g, mfilter=g, ma0=g, ma1=g, ma2=g, ma3=g, ma4=g, ma5=g, t5=g, t4=g, t3=g, t2=g, t1=g, t0=g, above=g, golden=g, thumb=g, magic=g, hour=shour, hmxc=g, xru3=g, xru=g, ma4_up=g, hup=g, hdown=g, hdev=g, mup_100=g, svap_ma_67=(g, vi), svap_ma_67_2=(g, vi), i_cofw=np.arange(0, 2000, 5)) s.ref = s #指向自己 s.catalog = {s: g} s.c60 = {s: g} self.stock = s
def test_gevaluate(self): trade1 = Trade(1,20050101,1000,1) trade2 = Trade(1,20050101,1100,-1) trade3 = Trade(2,20050501,1000,1) trade4 = Trade(2,20050501,1100,-1) #trade5 = Trade(3,20050501,1100,1) datemap = {20050101:0,20050501:1} nt1 = BaseObject(name='test1',evaluation=Evaluation([],datemap),trades=[[trade1,trade2]]) nt2 = BaseObject(name='test1',evaluation=Evaluation([],datemap),trades=[[trade3,trade4]]) #nt3 = BaseObject(name='test1',evaluation=Evaluation([]),trades=[trade5]) ev = gevaluate([nt1,nt2],datemap) self.assertEquals([[trade1,trade2],[trade3,trade4]],ev.matchedtrades) self.assertEquals(nt1,trade1.parent) self.assertEquals(nt1,trade2.parent) self.assertEquals(nt2,trade3.parent) self.assertEquals(nt2,trade4.parent)
def test_last_trade_with_begin(self): stock = BaseObject(code='test') tdate = np.array([ 20050101, 20050102, 20050103, 20050104, 20050105, 20050106, 20050107, 20050108, 20050109, 20050110 ]) tbuy = np.array([101, 102, 103, 104, 105, 106, 107, 108, 109, 110]) tsell = np.array( [1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110]) signal1 = np.array([0, 0, 1, -1, 0, 1, 0, -1, 1, 0]) trades = last_trade(stock, signal1, tdate, tbuy, tsell, begin=20050101) self.assertEquals(1, len(trades)) self.assertEquals(20050109, trades[0].tdate) self.assertEquals(109, trades[0].tprice) self.assertEquals(1000, trades[0].tvolume) trades = last_trade(stock, signal1, tdate, tbuy, tsell, begin=20050201) self.assertEquals(0, len(trades)) trades = last_trade(stock, signal1, tdate, tbuy, tsell, begin=20050103) self.assertEquals(1, len(trades)) self.assertEquals(20050109, trades[0].tdate) self.assertEquals(109, trades[0].tprice) self.assertEquals(1000, trades[0].tvolume) trades = last_trade(stock, signal1, tdate, tbuy, tsell, begin=20050104) self.assertEquals(1, len(trades)) #全部已经平仓,无未平仓,以卖出开始 trades = last_trade(stock, signal1, tdate, tbuy, tsell, begin=20050105) self.assertEquals(1, len(trades)) self.assertEquals(20050109, trades[0].tdate) self.assertEquals(109, trades[0].tprice) self.assertEquals(1000, trades[0].tvolume) signal1 = np.array([0, 0, 1, -1, 0, 1, 0, -1, -1, 0]) trades = last_trade(stock, signal1, tdate, tbuy, tsell, begin=20050101) self.assertEquals(1, len(trades)) self.assertEquals(20050109, trades[0].tdate) self.assertEquals(1109, trades[0].tprice) self.assertEquals(-1000, trades[0].tvolume)
def test_atr_extra(self): stock = BaseObject(code='test', atr=np.array([1, 2, 3])) trade = Trade(stock.code, 20010101, 10000, 1) atr_extra(trade, stock, 0) self.assertEquals(1, trade.atr) self.assertEquals(type(1), type(trade.atr)) atr_extra(trade, stock, 2) self.assertEquals(3, trade.atr)
def test_finishing(self): sbuy = np.array([0, 1, 1, 0, 1, 0, 0]) s = BaseObject() fbuy = lambda x: np.array([1, 0]) fsell = lambda x, y: np.array([0, 1]) m = Mediator(fbuy, fsell) m.finishing(s, sbuy, sbuy) self.assertTrue(True)
def setUp(self): #prepare data sopen = sclose = svolume = shigh = slow = savg = samount = np.array([randint(10000,15000) for i in range(2000)]) shour = np.array([randint(10000,15000) for i in range(8000)]) trans = [sopen,sclose,svolume,shigh,savg,samount,svolume] vi = np.array([i for i in range(2000)]) g = np.array([randint(0,10000) for i in range(2000)]) s = BaseObject(code='SH50TEST',zgb=10000000,ag=4000,transaction=trans, atr=g,atr2=g,silver=g,g5=g,g20=g,g60=g,g120=g,g250=g,diff=g,dea=g, mfilter = g, ma0=g,ma1=g,ma2=g,ma3=g,ma4=g,ma5=g,t5=g,t4=g,t3=g,t2=g,t1=g,t0=g,above=g,golden=g,thumb=g,magic=g, hour=shour,hmxc=g,xru3=g,xru=g,ma4_up=g,hup=g,hdown=g,hdev=g,mup_100=g, svap_ma_67=(g,vi),svap_ma_67_2=(g,vi), i_cofw = np.arange(0,2000,5) ) s.ref = s #指向自己 s.catalog = {s:g} s.c60 = {s:g} self.stock = s
def setUp(self): #prepare data sopen = np.array([randint(10000,15000) for i in range(2000)]) sclose = np.array([randint(10000,15000) for i in range(2000)]) svolume = np.array([randint(1000,15000) for i in range(2000)]) shigh = np.max(np.array([sopen,sclose]),axis=0) slow = np.max(np.array([sopen,sclose]),axis=0) savg = sopen + sclose / 2 samount = svolume * sopen /1000 trans = [sopen,sclose,svolume,shigh,savg,samount,svolume] g5 = np.array([randint(0,10000) for i in range(2000)]) g20 = np.array([randint(0,10000) for i in range(2000)]) g60 = np.array([randint(0,10000) for i in range(2000)]) g120 = np.array([randint(0,10000) for i in range(2000)]) g250 = np.array([randint(0,10000) for i in range(2000)]) s = BaseObject(code='SH00TEST',transaction=trans,g5=g5,g20=g20,g60=g60,g120=g120,g250=g250) s.catalog = {s:g5} s.c60 = {s:g5} self.stock = s
def test_make_trades_with_begin(self): stock = BaseObject(code='test') tdate = np.array([ 20050101, 20050102, 20050103, 20050104, 20050105, 20050106, 20050107, 20050108, 20050109, 20050110 ]) tbuy = np.array([101, 102, 103, 104, 105, 106, 107, 108, 109, 110]) tsell = np.array( [1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110]) signal1 = np.array([0, 0, 1, -1, 0, 1, 0, -1, 1, 0]) trades = make_trades(stock, signal1, tdate, tbuy, tsell, begin=20050101) self.assertEquals(5, len(trades)) trades = make_trades(stock, signal1, tdate, tbuy, tsell, begin=20050201) self.assertEquals(0, len(trades)) trades = make_trades(stock, signal1, tdate, tbuy, tsell, begin=20050103) self.assertEquals(5, len(trades)) trades = make_trades(stock, signal1, tdate, tbuy, tsell, begin=20050104) self.assertEquals(3, len(trades)) #舍弃20050104的第一个卖出信号 trades = make_trades(stock, signal1, tdate, tbuy, tsell, begin=20050105) self.assertEquals(3, len(trades)) #特殊情况,去除第一个买入信号后,卖出信号也应该抛弃掉,即序列仍然相当于空信号 signal2 = np.array([0, 0, 1, 0, 0, -1, 0, 0, 0, 0]) trades = make_trades(stock, signal2, tdate, tbuy, tsell, begin=20050104) self.assertEquals(0, len(trades))
def test_pricers(self): s = BaseObject(transaction=np.array([[1], [2], [3], [4], [5], [6], [7]]), down_limit=np.array([8])) self.assertEquals([2], cl_pricer[0](s).tolist()) self.assertEquals([8], cl_pricer[1](s).tolist()) self.assertEquals([1], ol_pricer[0](s).tolist()) self.assertEquals([8], ol_pricer[1](s).tolist()) self.assertEquals([1], oo_pricer[0](s).tolist()) self.assertEquals([1], oo_pricer[1](s).tolist()) self.assertEquals([2], co_pricer[0](s).tolist()) self.assertEquals([1], co_pricer[1](s).tolist())
def test_append_attribute_extra(self): stock = BaseObject(code='test', atr=np.array([1, 2, 3])) trade = Trade(stock.code, 20010101, 10000, 1) append_attribute_extra(trade, stock, 0, 'atr') self.assertEquals(1, trade.atr) append_attribute_extra(trade, stock, 2, 'atr') self.assertEquals(3, trade.atr) append_attribute_extra(trade, stock, 0, 'atr', 'vtr') #指定不同的目的名字 self.assertEquals(1, trade.vtr) #属性不存在测试 append_attribute_extra(trade, stock, 2, 'xtr') self.assertRaises(AttributeError, lambda: trade.xtr)
def evaluate_all(tradess, pos_manager, date_manager): ''' 针对单个方法的一站式评估 trades为从mediator.calc_matched返回的matched trades pos_manager为position manager的实例 date_manager为DateManager的实例 返回表示结果数据的对象rev和交易输出 ''' pre_ev = evaluate(tradess, date_manager.date_map) spre = unicode(pre_ev) #恢复干净环境,否则上一次调用时的trades还在pos_manager里面,但它们的parent已经被删除了,会在下次删除时出错 pos_manager.clear() g_ev = gevaluate([BaseObject(evaluation=pre_ev, trades=tradess)], date_manager.date_map, pos_manager.filter) rev = BaseObject( RPR=pos_manager.calc_net_indicator(date_manager), CSHARP=pos_manager.calc_net_indicator(date_manager, CSHARP), AVGRANGE=pos_manager.calc_net_indicator(date_manager, AVG_DECLINE), MAXRANGE=pos_manager.calc_net_indicator(date_manager, MAX_DECLINE), assets=pos_manager.assets(), income_rate=pos_manager.income_rate(), pre_ev=pre_ev.copy_header(), g_ev=g_ev.copy_header(), history=str(pos_manager.net_history())) #print 'types:',type(rev.RPR),type(rev.CSHARP),type(rev.AVGRANGE) #print type(rev.income_rate),type(rev.assets) srev = yaml.dump(rev) #srev = unicode(g_ev) #for trades in g_ev.matchedtrades: # for trade in trades: # del trade.parent sg = unicode(g_ev) return rev, '%s\npre_ev:\n%s\ng_ev:\n%s' % (srev, spre, sg)
def test_finishing(self): sbuy = np.array([0, 1, 1, 0, 1, 0, 0]) smfe = np.array([1, 2, 3, 4, 5, 6, 7]) smae = np.array([10, 20, 30, 40, 50, 60, 70]) s = BaseObject(mfe=smfe, mae=smae) fbuy = lambda x: np.array([1, 0]) fsell = lambda x, y: np.array([0, 1]) m = MM_Mediator(fbuy, fsell) m.finishing(s, sbuy, sbuy) #print s.mfe_sum,s.mae_sum self.assertEquals(8, s.mfe_sum) self.assertEquals(100, s.mae_sum) self.assertEquals(3, s.mm_count) self.assertEquals(type(1), type(s.mm_count))
def __init__(self, init_size=100000000, max_proportion=200, risk=6, calc_lost=ev_lost, position=Position): self.init_size = init_size #现金,#以0.001元为单位 self.max_proportion = max_proportion #满足risk条件下单笔占总金额的最大占比(千分比) self.risk = risk #每笔交易承担的风险占总金额的比例(千分比) self.calc_lost = calc_lost #print position self.position = position() #现有仓位: code ==> trade self.cash = init_size self.earning = 0 #当前盈利 self.vhistory = [BaseObject(date=0, value=self.init_size)] #净值历史
def run(self, trades): for trade in trades: climit = self.cur_limit() crisk = self.cur_risk() if trade.tvolume > 0: #买入 #print u'买入,before cash:',self.cash,'tstock:',trade.tstock,'tdate:',trade.tdate self.cash += self.position.push(trade, self.calc_lost(trade), crisk, climit) #print u'买入,after cash:',self.cash else: #卖出 #print u'卖出,before cash:',self.cash,'tstock:',trade.tstock,'tdate:',trade.tdate income, cost = self.position.pop(trade) if income: #非空转 self.cash += income self.earning += (income + cost) self.vhistory.append( BaseObject(date=int(trade.tdate), value=self.assets()))
def test_make_trades(self): #begin=0 stock = BaseObject(code='test') tdate = np.array([ 20050101, 20050102, 20050103, 20050104, 20050105, 20050106, 20050107, 20050108, 20050109, 20050110 ]) tbuy = np.array([101, 102, 103, 104, 105, 106, 107, 108, 109, 110]) tsell = np.array( [1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110]) signal0 = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) trades = make_trades(stock, signal0, tdate, tbuy, tsell) self.assertEquals([], trades) signal1 = np.array([0, 0, 1, -1, 0, 1, 0, -1, 1, 0]) trades = make_trades(stock, signal1, tdate, tbuy, tsell) self.assertEquals(5, len(trades)) self.assertEquals(type(1), type(trades[0].tprice)) #确认是平凡的int数据类型,非numpy.intxx self.assertEquals(type(1), type(trades[0].tdate)) self.assertEquals(type(1), type(trades[0].tvolume))
def test_default_extra(self): trade = BaseObject() stock = BaseObject() self.assertEquals(trade, default_extra(trade, stock, 0))
def clear(self): self.cash = self.init_size self.earning = 0 self.position.clear() self.vhistory = [BaseObject(date=0, value=self.init_size)]
#vama2_groups = ['fast','slow','pre_length','ma_standard'] vama2_pattern = r'ma_standard=(?P<ma_standard>\d+),slow=(?P<slow>\d+),fast=(?P<fast>\d+)' vama2_groups = ['fast', 'slow', 'ma_standard'] #vama2x_pattern = r'slow=(?P<slow>\d+),base=(?P<base>\d+),pre_length=(?P<pre_length>\d+),ma_standard=(?P<ma_standard>\d+),extend_days=(?P<extend_days>\d+),fast=(?P<fast>\d+)' #vama2x_groups = ['fast','slow','base','pre_length','ma_standard','extend_days'] vama2x_pattern = r'ma_standard=(?P<ma_standard>\d+),base=(?P<base>\d+),fast=(?P<fast>\d+),slow=(?P<slow>\d+)' vama2x_groups = ['fast', 'slow', 'base', 'ma_standard'] ma3_pattern = r'ma_standard=(?P<ma_standard>\d+),slow=(?P<slow>\d+),extend_days=(?P<extend_days>\d+),fast=(?P<fast>\d+),mid=(?P<mid>\d+)' ma3_groups = ['fast', 'mid', 'slow', 'ma_standard', 'extend_days'] pmappings = { 'svama2': BaseObject(pattern=svama2_pattern, groups=svama2_groups), 'svama2b': BaseObject(pattern=svama2b_pattern, groups=svama2b_groups), 'csvama2': BaseObject(pattern=csvama2_pattern, groups=csvama2_groups), 'svama2c': BaseObject(pattern=svama2c_pattern, groups=svama2c_groups), 'svama2x': BaseObject(pattern=svama2x_pattern, groups=svama2x_groups), 'svama3': BaseObject(pattern=svama3_pattern, groups=svama3_groups), 'svama3b': BaseObject(pattern=svama3b_pattern, groups=svama3b_groups), 'csvama3': BaseObject(pattern=csvama3_pattern, groups=csvama3_groups), 'svama2s': BaseObject(pattern=svama2s_pattern, groups=svama2s_groups), 'vama3': BaseObject(pattern=vama3_pattern, groups=vama3_groups), 'vama2': BaseObject(pattern=vama2_pattern, groups=vama2_groups), 'vama2x': BaseObject(pattern=vama2x_pattern, groups=vama2x_groups), 'ma3': BaseObject(pattern=ma3_pattern, groups=ma3_groups), }