def getFrontier(na_data):
    """Function gets a 100 sample point frontier for given returns"""

    # Special Case with fTarget=None, just returns average rets.
    (na_avgrets, na_std, b_error) = tsu.OptPort(na_data, None)

    # Declaring bounds on the optimized portfolio
    na_lower = np.zeros(na_data.shape[1])
    na_upper = np.ones(na_data.shape[1])

    # Getting the range of possible returns with these bounds
    (f_min, f_max) = tsu.getRetRange(na_data, na_lower, na_upper, na_avgrets, s_type="long")

    # Getting the step size and list of returns to optimize for.
    f_step = (f_max - f_min) / 100.0
    lf_returns = [f_min + x * f_step for x in range(101)]

    # Declaring empty lists
    lf_std = []
    lna_portfolios = []

    # Calling the optimization for all returns
    for f_target in lf_returns:
        (na_weights, f_std, b_error) = tsu.OptPort(na_data, f_target, na_lower, na_upper, s_type="long")
        lf_std.append(f_std)
        lna_portfolios.append(na_weights)

    return (lf_returns, lf_std, lna_portfolios, na_avgrets, na_std)
예제 #2
0
def getFrontier(naData):
    ''' Special case for fTarget = None, just get average returns '''
    (naAvgRets, naStd, b_error) = tsu.OptPort(naData, None)

    naLower = np.zeros(naData.shape[1])
    naUpper = np.ones(naData.shape[1])

    (fMin, fMax) = tsu.getRetRange(naData,
                                   naLower,
                                   naUpper,
                                   naAvgRets,
                                   s_type="long")

    fStep = (fMax - fMin) / 100.0

    lfReturn = [fMin + x * fStep for x in range(101)]
    lfStd = []
    lnaPortfolios = []
    ''' Call the function 100 times for the given range '''
    for fTarget in lfReturn:
        (naWeights, fStd, b_error) = tsu.OptPort(naData,
                                                 fTarget,
                                                 naLower,
                                                 naUpper,
                                                 s_type="long")
        #if b_error == False:
        lfStd.append(fStd)
        lnaPortfolios.append(naWeights)
        #lfReturn.pop(lfReturn.index(fTarget))
    return (lfReturn, lfStd, lnaPortfolios, naAvgRets, naStd)
예제 #3
0
def getFrontier(naData):
    ''' Special case for fTarget = None, just get average returns '''
    (naAvgRets,naStd, b_error) = tsu.OptPort( naData, None )

    naLower = np.zeros(naData.shape[1])
    naUpper = np.ones(naData.shape[1])

    (fMin, fMax) = tsu.getRetRange( naData, naLower, naUpper, naAvgRets, s_type="long")
    
    '''Modification- squeeze fMin/fMax to avoid infeasability on the
    upper and lower limits.  These usually manifest with a CVXOPT
    error, and QSTK responds by telling you the KKT matrix is singular
    By avoiding the absolute edges you can eliminate this error'''
    reduce_amount = 0.0001
    fMin += reduce_amount
    fMax -= reduce_amount
    '''End Modification'''

    fStep = (fMax - fMin) / 100.0

    lfReturn =  [fMin + x * fStep for x in range(101)]
    lfStd = []
    lnaPortfolios = []

    ''' Call the function 100 times for the given range '''
    for fTarget in lfReturn:
        (naWeights, fStd, b_error) = tsu.OptPort( naData, fTarget, naLower, naUpper, s_type = "long")
        #if b_error == False:
        lfStd.append(fStd)
        lnaPortfolios.append( naWeights )
        #lfReturn.pop(lfReturn.index(fTarget))
    return (lfReturn, lfStd, lnaPortfolios, naAvgRets, naStd)
예제 #4
0
파일: tutorial8.py 프로젝트: KWMalik/QSTK
def getFrontier(naData):
    ''' Special case for fTarget = None, just get average returns '''
    (naAvgRets,naStd, b_error) = tsu.OptPort( naData, None )

    naLower = np.zeros(naData.shape[1])
    naUpper = np.ones(naData.shape[1])
    
    (fMin, fMax) = tsu.getRetRange( naData, naLower, naUpper, naAvgRets, s_type="long")
    
    fStep = (fMax - fMin) / 100.0
    
    lfReturn =  [fMin + x * fStep for x in range(101)]
    lfStd = []
    lnaPortfolios = []
    
    ''' Call the function 100 times for the given range '''
    for fTarget in lfReturn: 
        (naWeights, fStd, b_error) = tsu.OptPort( naData, fTarget, naLower, naUpper, s_type = "long")
        #if b_error == False:
        lfStd.append(fStd)
        lnaPortfolios.append( naWeights )
        #lfReturn.pop(lfReturn.index(fTarget))
    return (lfReturn, lfStd, lnaPortfolios, naAvgRets, naStd)