예제 #1
0
def getBackTestReturns(memkeylist, stopStep, stats, namespace):
    ''' Using list(set()) to de-duplicate key list. '''
    algkeys = list(set([key.split('_')[-1] for key in stats]))
    algs = meTools.memGet_multi(meSchema.meAlg,algkeys)
    cuekeys = [algs[key].BuyCue for key in algs]
    cuekeys.extend([algs[key].SellCue for key in algs])
    cuekeys = list(set(cuekeys))
    tradecues = meTools.memGet_multi(meSchema.tradeCue,cuekeys)
    stopStepQuotes = princeFunc.getStepQuotes(stopStep)
    backTestReturns = {}
    # Pre-populate dict to avoid doing __contains__ on every key.
    for memkey in stats:
        algkey = memkey.split('_')[-1]
        startMonth = memkey.split('_')[0]
        if not backTestReturns.__contains__(algkey):
            buycue = tradecues[algs[algkey].BuyCue]
            sellcue = tradecues[algs[algkey].SellCue]
            fingerprint = { 'buy'  : [buycue.QuoteDelta, buycue.TimeDelta],
                            'sell' : [sellcue.QuoteDelta, sellcue.TimeDelta] }
            backTestReturns[algkey] = {'fingerprint' : fingerprint, 'returns' : {} }
        
    for memkey in stats:
        algkey = memkey.split('_')[-1]    # Memkey has form: startStep_stopStep_algKey
        startMonth = memkey.split('_')[0]
        testStopStep   = memkey.split('_')[1]
        positionsValue = 0.0
        for key in stats[memkey]['Positions']:
            currentPrice = stopStepQuotes[key]
            posPrice = stats[memkey]['Positions'][key]['Price']
            shares = stats[memkey]['Positions'][key]['Shares']
            positionsValue += (currentPrice-posPrice)*shares
        stepReturn = (positionsValue + stats[memkey]['PandL'])/algs[algkey].Cash
        # 'algKey' : 
        #    { 'fingerprint' :  'buy = TradeCue, TimeDelta : sell = TradeCue, TimeDelta',
        #      'returns'     :
        #              { 'startMonth(1)' :
        #                              { 'return' : 'x1%', 'PandL' : '$y1', 'PosVal' : '$z1'},
        #                'startMonth(2)' :
        #                              { 'return' : 'x2%', 'PandL' : '$y2', 'PosVal' : '$z2'}
        #               }
        backTestReturns[algkey]['returns'][int(startMonth)] = {'return'    : stepReturn,
                                                               'lastBuy'   : stats[memkey]['lastBuy'],
                                                               'lastSell'  : stats[memkey]['lastSell'],
                                                               'numTrades' : len(stats[memkey]['CashDelta']),
                                                               'PandL'     : stats[memkey]['PandL'],
                                                               'PosVal'    : positionsValue,
                                                               'stopStep'  : int(testStopStep),
                                                               'CashDelta' : repr(stats[memkey]['CashDelta']),
                                                               'Positions' : repr(stats[memkey]['Positions'])}
    return backTestReturns
예제 #2
0
def getDesires(step,alphaAlg=1,omegaAlg=3540):
    keylist = []
    model = meSchema.desire
    for i in range(alphaAlg,omegaAlg+1):
        key_name = meTools.buildDesireKey(step, str(i))
        keylist.append(key_name)
    desires = meTools.memGet_multi(model,keylist)
    return desires
예제 #3
0
def getAlgStats(alphaAlg=1,omegaAlg=3540):
    keylist = []
    model = meSchema.algStats
    for i in range(alphaAlg,omegaAlg+1):
        key_name = meTools.buildAlgKey(str(i))
        keylist.append(key_name)
    algs = meTools.memGet_multi(model,keylist)
    return algs
예제 #4
0
def getStepQuotes(step):
    from google.appengine.api import namespace_manager
    originalNameSpace = namespace_manager.get_namespace()
    namespace_manager.set_namespace('')
    stckKeyList = []
    for i in range(1,5):
        stckKeyList.append(str(i) + "_" + str(step))
    quotes = meTools.memGet_multi(meSchema.stck, stckKeyList)
    stepQuotes = {}
    for quote in quotes:
        symbol = meTools.getStckSymbol(quotes[quote].ID)
        stepQuotes[symbol] = quotes[quote].quote
    namespace_manager.set_namespace(originalNameSpace)
    return stepQuotes
예제 #5
0
def memGetStcks(stckKeyList):
    meList = []
    results = meTools.memGet_multi(meSchema.stck, stckKeyList)
    for key in stckKeyList:
        meList.append(results[key])
    return meList