< 7. 알고리즘 최적화를 통한 수익율 극대화 (키움 open api 주식 알고리즘 테스트 프로그래밍) >


1. 키움 open api를 이용한 주식 알고리즘 테스트 프로그래밍

2. DB 설계

3. DB 구현

4. 주식 데이터 불러오기

5. 알고리즘을 통한 매수, 매도 테스트


해당 포스트를 읽기 전에 위의 포스트들을 읽기 바란다.


우리는 지난 포스트까지 알고리즘을 적용하기 전과 후의 매수/매도 수익율을 구한 다음 비교해보았다. 이번에는 구현한 알고리즘의 변수를 조정해서 수익율을 극대화하는 코드를 구현할 것이다. 구현은 간단하다. '5. 알고리즘을 통한 매수,매도 테스트' 에서 배운 'set_var1_and_var2(self,var1,var2)' 메서드를 이용하면 된다. var1과 var2는 알고리즘내에 기준 변수가 되어 해당 변수를 토대로 매수할 지 매도할 지 결정한다. 


'optimize()' 메서드는 사용자가 var1과 var2에 대한 범위를 주면 범위 내의 var1과 var2에 대한 총 수익율을 구하고 이를 DB에 저장한다. 

    def optimize(self,var1_start, var1_end, var2_start, var2_end,start, end):
        self.optimize_profit = pd.DataFrame(columns=('var1','var2','profit'))
        while var1_start<=var1_end:
            var2 = var2_start
            while var2<=var2_end:
                self.backTracking.set_var1_and_var2(var1,var2)
                profits_data = self.backTracking.get_days_profit(start,end)
                profit = profits_data['total_profit'][len(profits_data)-1]
                self.optimize_profit = self.optimize_profit.append(pd.Series({'var1' : var1, 'var2' : var2, 'profit' : profit}),ignore_index=True)
                self.db.insert_Profit(var1,var2,profit)
                var2+=0.0003

            var1_start+=1
        self.db.commit()

'var*_start'와 'var*_end'로 범위를 주고 start와 end로 수익율을 구할 기간을 정한다. 'self.optimize_profit'는 var1과 var2에 따른 수익율을 저장한다. for문을 통해 var1과 var2가 일정 간격으로 변한다. 'set_var1_and_var2(var1,var2)'로 알고리즘의 var1과 var2 값을 설정하고 'get_days_profit()'를 이용해 지정된 기간동안 수익율을 정한다. 결과 값을 'optimize_profit'에 저장하고 'insert_Profit'를 이용해 DB에 데이터를 저장한다.


'optimize' 함수를 이용해 var1과 var2에 따른 수익율을 'self.optimize_profit'에 저장했다. 수익율을 최대화하는 var1과 var2를 구하려면 다음 코드처럼 하면 된다. 

max_profit_data = self.optimize_profit.ix[self.optimize_profit['profit'].idxmax()]
print("최대 이익 : var1 => " + str(max_profit_data['var1']) + " var2 => "+ str(max_profit_data['var2']) + " profit : " + str(max_profit_data['profit']) )

더 구체적인 데이터 분석을 하고 싶다면 DB에 데이터를 저장했기 때문에 DB SQL문을 이용하면 된다.

 

+ Recent posts