2017-11-05 3 views
0

Shares의 값이 , 0-1000이라는 제약 조건을 감안할 때 미래를 들여다보고 전체 주식 가격이 산정 된 주식을 정확히 알 수 있다면 어떻게 구현하겠습니까? 또한 1000 개의 공유로 시작하십시오. 2000 주를 1000에서 -1000으로 직접 반입 할 수 있으며 그 반대의 경우도 마찬가지입니다. df_trades로를원래 데이터 프레임의 값 변경을 반영하는 새로운 데이터 프레임을 어떻게 형성 할 수 있습니까?

   JPM 
2008-01-02 38.47 
2008-01-03 38.20 
2008-01-04 37.33 
2008-01-07 37.71 
2008-01-08 36.21 
2008-01-09 36.72 

및 변환 :

나는이 같은 dataframe df_prices을 할

if df_prices['JPM'].shift(1) > df_prices['JPM'] & curr_hold == 0: 
    df_orders['Order'] = 'SELL' 
    df_orders['Shares'] += 1000 
elif df_prices['JPM'].shift(1) < df_prices['JPM'] & curr_hold == 0: 
    df_orders['Order'] = 'BUY' 
    df_orders['Shares'] -= 1000 
elif df_prices['JPM'].shift(1) > df_prices['JPM'] & curr_hold == -1000: 
    df_orders['Order'] = 'HOLD' 
elif df_prices['JPM'].shift(1) < df_prices['JPM'] & curr_hold == 1000: 
    df_orders['Order'] = 'HOLD' 

그것은 작동하지 않습니다

  Symbol Order Shares 
2008-01-02 JPM NOTHING 1000 
2008-01-03 JPM HOLD  1000 
2008-01-04 JPM HOLD  1000 
2008-01-07 JPM BUY  0 
2008-01-08 JPM SELL  -1000 
2008-01-09 JPM HOLD  0 

이 코드를 사용하여 하나. 오류 :

TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool] 
+0

정확히 무엇이 문제입니까? –

+0

어떻게 첫 번째 데이터 프레임을 두 번째 데이터 프레임으로 변환합니까? – dirtysocks45

+0

'curr_hold'란 무엇입니까? –

답변

0

나는 그것을 알 수있었습니다.

이 충분하다 :

for i in range(len(df_prices)): 
    if i == len(df_prices) - 1: 
     df_orders.set_value(i, 'Date', df_prices.index[i]) 
     df_orders.set_value(i, 'Order', 'BUY') 
     df_orders.set_value(i, 'Shares', 0) 
     df_orders.set_value(i, 'Symbol', symbol) 
     break 
    if df_prices.loc[df_prices.index[i + 1]][symbol] > df_prices.loc[df_prices.index[i]][symbol] and curr_hold == 0: 
     curr_hold += 1000 
     df_orders.set_value(i, 'Date', df_prices.index[i]) 
     df_orders.set_value(i, 'Order', 'BUY') 
     df_orders.set_value(i, 'Shares', 1000) 
     df_orders.set_value(i, 'Symbol', 'JPM') 
    elif df_prices.loc[df_prices.index[i + 1]][symbol] < df_prices.loc[df_prices.index[i]][symbol] and curr_hold == 0: 
     curr_hold -= 1000 
     df_orders.set_value(i, 'Date', df_prices.index[i]) 
     df_orders.set_value(i, 'Order', 'SELL') 
     df_orders.set_value(i, 'Shares', 1000) 
     df_orders.set_value(i, 'Symbol', symbol) 
    elif df_prices.loc[df_prices.index[i + 1]][symbol] > df_prices.loc[df_prices.index[i]][symbol] and curr_hold == -1000: 
     curr_hold += 2000 
     df_orders.set_value(i, 'Date', df_prices.index[i]) 
     df_orders.set_value(i, 'Order', 'BUY') 
     df_orders.set_value(i, 'Shares', 2000) 
     df_orders.set_value(i, 'Symbol', symbol) 
    elif df_prices.loc[df_prices.index[i + 1]][symbol] < df_prices.loc[df_prices.index[i]][symbol] and curr_hold == 1000: 
     curr_hold -= 2000 
     df_orders.set_value(i, 'Date', df_prices.index[i]) 
     df_orders.set_value(i, 'Order', 'SELL') 
     df_orders.set_value(i, 'Shares', 2000) 
     df_orders.set_value(i, 'Symbol', symbol) 

나는 아마 많이 모듈화 수 있지만.

관련 문제