Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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
Esempio n. 8
0
 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
Esempio n. 9
0
 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))
Esempio n. 10
0
 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())
Esempio n. 11
0
 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)
Esempio n. 12
0
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)
Esempio n. 13
0
 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))
Esempio n. 14
0
 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)]  #净值历史
Esempio n. 15
0
 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()))
Esempio n. 16
0
 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))
Esempio n. 17
0
 def test_default_extra(self):
     trade = BaseObject()
     stock = BaseObject()
     self.assertEquals(trade, default_extra(trade, stock, 0))
Esempio n. 18
0
 def clear(self):
     self.cash = self.init_size
     self.earning = 0
     self.position.clear()
     self.vhistory = [BaseObject(date=0, value=self.init_size)]
Esempio n. 19
0
#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),
}