PYTHON/Back test

2.2 백테스팅하기 - 일자 계산 코드 구축하기 (2)

  • -

지난 게시글에서 일자를 계산해주는 코드를 모두 구축했으니, 이번에는 그 일자를 바탕으로 백테스팅을 진행할 때 어떤 구조로 코드를 작성해야 하는지 살펴볼 예정이다.

 

[파일명 : algortihm_1] while문 이용해서 일자 계산하기

일단 기본적으로 boss 파일 내에 존재하는 클래스를 사용하기 위해서는 import와 인스턴스 생성을 모두 해주어야 한다. 너무 복잡한 개념처럼 들린다면 설명은 제외하고, 아래와 같이 맨 위에서 import한 후에   def __init__   안에서 calf = cal_function()이라는 코드를 통해 인스턴스를 생성해주면 된다. 

from boss import cal_function

class algo_1():
    def __init__(self, kospi_data, kosdaq_data, item_data):
        calf = cal_function()
        self.kospi_data = kospi_data
        self.kosdaq_data = kosdaq_data
        self.item_data = item_data

 

이제 def __init__ 함수 내에서 하루 동안의 시뮬레이션이 모두 끝났으면 자동적으로 다음 일자로 넘어가도록 하는 코드를 구축해보도록 하자. 여기서 사용할 것은 바로 while()문이다. 이 while문은 특정 조건이 충족되지 않을 때까지 계속해서 반복하게끔 하는 것이다.
※ 추가된 코드 : 10~13번째 줄

class algo_1():
    def __init__(self, kospi_data, kosdaq_data, item_data):
        calf = cal_function()
        self.kospi_data = kospi_data
        self.kosdaq_data = kosdaq_data
        self.item_data = item_data
        self._load_day_data()
        
        ## 일자 계산
        self.today = start_date
        while self.today <= end_date:

            self.today = calf.cal_addday(self.today, 1)

 

위의 코드 세 줄을 다시 한 번 살펴보도록 하자. 만약 start_date라는 변수에 20210101이라는 값이 입력되었다면 self.today에도 20210101이라는 값이 입력될 것이다. 그 후 while 문에서는 self.today 변수가 end_date(아래에서 설정할 예정)보다 작다면 self.today 값에 calf.cal_addday()를 통해 하루를 추가한 값을 입력하도록 하는 것이다.

 

 


728x90

 

 

[파일명 : algorithm_1] start_date 값과 end_date값 설정해주기

위의 코드를 봤다면 알 수 있듯이, start_date 값과 end_date 값이 별도로 설정되어 있어야만 while문이 제대로 동작한다. 그렇다면 start_date와 end_date를 코드 내에서 단순하게 입력해주어도 되겠지만, 현재 boss 파일 내에서는 ui 파일과 연결해서 사용하고 있는 만큼 프로그램에서 입력한 값을 받아와서 그 값을 바탕으로 start_date와 end_date라는 변수에 값이 설정될 수 있도록 해보자. 일단 gui 파일 안에서, 아래와 같이 두 개의 lineEdit을 추가해주도록 하자.

왼쪽이 lineEdit_2에 해당하고 오른쪽이 lineEdit_3에 해당한다. 그렇다면 여기서 각각 입력된 값들을 하나는 start_date, 하나는 end_date이라는 변수 안에 입력하도록 하는 코드를 구축해야 한다.

근데 문제는 바로 이 gui 파일이 boss 파일에서 열렸다는 것이고, 우리는 현재 algorithm_1 파일에서 작업을 진행하고 있다는 것이다. 하지만 boss 파일에서 열린 gui 파일을 algorithm_1 파일에서도 접근하기 위한 방법은 의외로 간단하다. 앞서 일자를 계산할 때   class cal_function()  을 import와 인스턴스를 생성했던 것처럼 마찬가지로 boss 파일 내에 있는   class tradesystem()  을 import하고 인스턴스를 생성해주면 된다.
※ 추가된 코드 : 4, 10, 11번째 줄

class algo_1():

    def __init__(self, kospi_data, kosdaq_data, item_data):
        boss = tradesystem()
        calf = cal_function()
        self.kospi_data = kospi_data
        self.kosdaq_data = kosdaq_data
        self.item_data = item_data

        ## 날짜 for 문 코드 구축하기
        start_date = boss.lineEdit_2.text()
        end_date = boss.lineEdit_3.text()

        self.today = start_date
        while self.today <= end_date:

            self.today = calf.cal_addday(self.today, 1)

즉,   tradesystem()  을 바탕으로 boss라는 인스턴스를 생성해준 후에,   boss.lineEdit_2  라고 입력하면 boss 파일에서 열린 ui 파일의 lineEdit_2에 접근할 수 있는 것이다. 따라서 lineEdit에 입력되어 있는 값을 가져오는 메서드인 .text()를 이용해   boss.lineEdit_2.text()  라는 코드를 제작해주면, 입력되어 있는 값을 start_date라는 변수에 저장할 수 있는 것이다. 그와 동일한 방법으로 end_date 역시   boss.lineEdit_3.text()  와 같이 입력해주면 된다.

그러면 이제 lineEdit_2에는 20210101을, lineEdit_3에는 20211231을 입력해보도록 하자. 자동으로 입력된 값을 받아온 후에, 하루씩 계산하면서 나아가게 되고 그 과정에서 주말에 해당하는 날짜는 자동적으로 제외하게 된다. 그 과정이 궁금하다면 while문 아래에 print(self.today)를 추가해보면, 현재 어느 날짜를 계산하고 있는지 확인할 수 있으며 주말에 해당하는 날짜는 출력되지 않는다는 점을 확인할 수 있다.

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.