2016-06-19 2 views
-1
Date  Open Close Buying Selling Cut_Off_Price 
2009.11.11 4.805 4.43 0  0 0 
2009.11.12 4.51 4.505 0  0 0 
2009.11.13 4.545 4.765 1  0 3.812 
2009.11.16 4.78 4.76 0  0 0 
2009.11.17 4.755 4.605 0  0 0 
2009.11.18 4.56 4.495 0  0 0 
2009.11.19 4.495 4.535 1  0 3.628 
2009.11.20 4.535 4.63 0  0 0 
2009.11.23 4.7  4.67 0  0 0 
2009.11.24 4.74 4.91 0  0 0 
2009.11.25 4.97 4.87 0  0 0 
2009.11.26 4.93 4.97 0  0 0 
2009.11.27 5  4.94 0  0 0 
2009.11.30 4.865 4.86 0  0 0 
2009.12.1 4.83 3.855 0  0 0 
2009.12.2 4.89 4.89 0  0 0 
2009.12.3 4.85 4.71 0  0 0 
2009.12.4 4.78 4.76 0  0 0 
2009.12.7 3.225 3.565 0  0 0 
2009.12.8 3.6  3.705 0  0 0 
2009.12.9 3.76 3.575 0  0 0 
2009.12.10 3.575 3.79 0  0 0 
2009.12.11 3.84 3.84 0  0 0 
2009.12.14 3.85 3.81 0  0 0 
2009.12.15 3.84 3.985 0  0 0 
2009.12.16 3.985 4.1  0  0 0 
2009.12.17 4.105 4.165 0  0 0 
2009.12.18 4.22 4.15 0  0 0 
2009.12.21 4.145 4.5  0  0 0 
2009.12.22 4.55 4.76 0  0 0 
2009.12.23 4.705 4.72 0  0 0 
2009.12.24 4.9  4.78 0  0 0 
  1. 데이터가 주가되고 난 Cut_Off_Price 가격을 구매의 일부 비율을 계산하며, 매매 신호를 만들어 dataframe. 시간이지나면서 가격의 첫날이 가격보다 낮아지면 신호를 팔고 싶습니다. 및 판매 날짜. 내가 원하는 그것은 너무 많은 시간이 걸렸습니다 무엇을 작동하지

    은 실행 시간을 reduece하는 방법, 팬더

    buying_list = data[data['Buying']==True] 
    data['Cut_Off_Signal']=False 
    def trading(data): 
         for idd in range(len(data.index)): 
          for ids in range(len(buying_list.index)): 
           if data.index[idd]>buying_list.index[ids]: 
            data['Cut_Off_Signal'][idd] = np.where(buying_list['Cut_Off_Price'][ids]>data['Close'][idd],True,False) 
            data[buying_list.index[ids],'Sell_Out_Signal'] = np.where(data['Cut_Off_Signal'][idd]== True,True,False) 
            #data.loc[buying_list.index[ids],'Sell_Out_Signal']=True 
           else: 
            continue 
    

    를 따르고 있습니다으로

    Date Open Close Buying Selling Cut_Off_Price Cut_Off_Signal Sell_Out Sell_Out_Date 
    2009.11.11 4.805 4.43 0  0 0 0 0  0 
    2009.11.12 4.510 4.505 0  0 0 0 0  0 
    2009.11.13 4.545 4.765 1  0 3.812 0 1  2009.12.1 
    2009.11.16 4.780 4.760 0  0 0 0 0  0 
    2009.11.17 4.755 4.605 0  0 0 0 0  0 
    2009.11.18 4.560 4.495 0  0 0 0 0  0 
    2009.11.19 4.495 4.535 1  0 3.628 0 1  2009.12.7 
    2009.11.20 4.535 4.630 0  0 0 0 0  0 
    2009.11.23 4.700 4.670 0  0 0 0 0  0 
    2009.11.24 4.740 4.910 0  0 0 0 0  0 
    2009.11.25 4.970 4.870 0  0 0 0 0  0 
    2009.11.26 4.930 4.970 0  0 0 0 0  0 
    2009.11.27 5.000 4.940 0  0 0 0 0  0 
    2009.11.30 4.865 4.860 0  0 0 0 0  0 
    2009.12.1 4.830 3.855 0  0 0 1 0  0 
    2009.12.2 4.890 4.890 0  0 0 0 0  0 
    2009.12.3 4.850 4.710 0  0 0 0 0  0 
    2009.12.4 4.780 4.760 0  0 0 0 0  0 
    2009.12.7 3.225 3.565 0  0 0 1 0  0 
    2009.12.8 3.600 3.705 0  0 0 0 0  0 
    2009.12.9 3.760 3.575 0  0 0 0 0  0 
    2009.12.10 3.575 3.790 0  0 0 0 0  0 
    2009.12.11 3.840 3.840 0  0 0 0 0  0 
    2009.12.14 3.850 3.810 0  0 0 0 0  0 
    2009.12.15 3.840 3.985 0  0 0 0 0  0 
    2009.12.16 3.985 4.100 0  0 0 0 0  0 
    2009.12.17 4.105 4.165 0  0 0 0 0  0 
    2009.12.18 4.220 4.150 0  0 0 0 0  0 
    2009.12.21 4.145 4.500 0  0 0 0 0  0 
    2009.12.22 4.550 4.760 0  0 0 0 0  0 
    2009.12.23 4.705 4.720 0  0 0 0 0  0 
    2009.12.24 4.900 4.780 0  0 0 0 0  0 
    

    내 코드를 다음과 같이

내 욕망 결과입니다. (총 행입니다 (970), 총 buying_list 행은 37입니다하지만 5 분 주위를했다. 내가 (내가 초보자입니다 ^^ ;;) 를 나는 당신의 조언을 주셔서 감사합니다!

답변

0
(F) .apply을 시도했지만 실패

당신을위한 데이터에 판다 내부 루프를 보자, 그냥 필터의 적절한 체인을 제공에 초점을 내가 data.txt로은 아래의 파일이 있다고 가정 :.

Date,Open,Close,Buying,Selling,Cut_Off_Price 
2009.11.11,4.805,4.43,0,0,0 
2009.11.12,4.51,4.505,0,0,0 
2009.11.13,4.545,4.765,1,0,5.812 
2009.11.16,4.78,4.76,0,0,0 
2009.11.17,4.755,4.605,0,0,0 
2009.11.18,4.56,4.495,0,0,0 
2009.11.19,4.495,4.535,1,0,3.628 
2009.11.20,4.535,4.63,0,0,0 
2009.11.23,4.7,4.67,0,0,0 
2009.11.24,4.74,4.91,0,0,0 

내가를 찾으려면 다음 코드를 사용할 수 있습니다 의 데이터 행 집합을 1로 설정하고 을 닫습니다.이 (가) Cut_Off_Price보다 큽니다.

  Date Open Close Buying Selling Cut_Off_Price 
6 2009.11.19 4.495 4.535  1  0   3.628 

에서

import pandas as pd 

df = pd.read_csv('data.txt') 
buy_signal = df[df.Buying & (df.Cut_Off_Price != 0) & 
       (df.Close > df.Cut_Off_Price)] 
print(buy_signal) 

결과는 열을 생성하고 싶다면, 먼저 필터를 조합 마스크를 만든 다음 열을 추가 할 수 있습니다.

  Date Open Close Buying Selling Cut_Off_Price Signal_Buy 
0 2009.11.11 4.805 4.430  0  0   0.000   0 
1 2009.11.12 4.510 4.505  0  0   0.000   0 
2 2009.11.13 4.545 4.765  1  0   5.812   0 
3 2009.11.16 4.780 4.760  0  0   0.000   0 
4 2009.11.17 4.755 4.605  0  0   0.000   0 
5 2009.11.18 4.560 4.495  0  0   0.000   0 
6 2009.11.19 4.495 4.535  1  0   3.628   1 
7 2009.11.20 4.535 4.630  0  0   0.000   0 
8 2009.11.23 4.700 4.670  0  0   0.000   0 
9 2009.11.24 4.740 4.910  0  0   0.000   0 
에서

buy_mask = df.Buying & (df.Cut_Off_Price != 0) & (df.Close > df.Cut_Off_Price) 
df['Signal_Buy'] = buy_mask + 0 #add 0 to convert from bool to int 
print(df) 

결과

관련 문제