2. 해외선물/2-4. 해외선물 API (사용)

(키움증권 해외선물 OpenAPI-W) 패턴 만들기 (4) 패턴 개념 이해하기

봄이오네 2023. 1. 17. 08:09
반응형
목 차
1. 들어가며
2. 사전설명
   1) 패턴이란?
   2) 코딩 적용 방법
     ①1분전 데이터에 대한 패턴
     ②진입을 위해 사용자가 설정한 패턴
3. 코드 기본 설명
4. 마치며

 

1. 들어가며

지난 글에서는 패턴만들기의 필요성에 대해 알아보았다.

1분 전 데이터(OHLC)를 활용하여 문자 조합을 하고,

 사용자가 설정한 패턴과 동일하면 진입하는 구조로 패턴을 만들어 갈 것이다.

 

이번 글에서는 필자가 설명하고자 하는 패턴에 대해 설명하고, 그 패턴을 만들어가는 과정에 대해 알아보자.


2. 사전설명

1) 패턴이란?

이전 글에서도 설명하였지만,

진입을 위한 패턴을 착상해내는 것은 상당한 고민이 필요하다.

 

어떤 사람은 3음봉이 출현하면 기술적 반등을 생각하여 long으로 진입할 수도 있고,

또, 어떤 사람은 폭등한 종목에 대해 short으로 진입할 수도 있다.

 

이처럼 사용자마다 각각 진입시점이 다른 것은

각각 수익이 날 수 있는 방법을 고민한 결과물이자, 경험의 산물일 것이다.

 

필자가 생각하고 코드로 구현할 패턴은 아래와 같다.

패턴 = (고가 - 시가) & (저가 - 시가) & (종가 - 시가)의 형태이다.

이러한 패턴에 대한 설명은 국내주식에서 이미 한번 하였다.

    * 국내주식의 패턴을 만드는 방법 링크

 

국내주식의 패턴만들기와 다른 점은, 해외선물은 틱단위가 소수점이 나오기 때문에

사칙연산을 해주는 경우 "부동소수점 문제"가 발생한다.

이를 해소하고자, 이전 글에서 부동소수점 문제 회피하기를 설명하였다.

 

필자가 만들고자 하는 패턴은

시가/고가/저가/종가에 각각 10,000을 곱하여 정수화를 시키면,

부동소수점 문제를 회피할 수 있다는 점이다.

 

2) 코딩 적용 방법

2가지 "패턴으로 된 문자"를 비교할 것이다.

①키움증권에서 받아오는 1분전 데이터에 대한 패턴

②진입을 위해 사용자가 설정한 패턴

 

위에서 설명한 패턴이 동일(①=②)하면,

진입(sendorder)을 할 수 있도록 코딩을 할 것이다.

    * 패턴 동일성 체크 링크 (input 내장함수와 for문을 활용)

    * 패턴의 동일성 여부를 확인하는 방법 링크(eval 및 for 문을 활용하여 패턴 동일성 확인)


3. 코드 기본 설명

키움측에서 제공받은 패턴사용자 설정 패턴 비교하면 좋을 것으나, 일단 여기서는 감만 잡도록 하자.

키움측에서 제공받는 패턴을 input 함수를 통해 받아오는 패턴으로 가정하고,

사용자가 설정한 패턴을 임의로 만들어 본다.

 

futures_lists = ["NQH23", "ESH23", "6JH23", "6BH23"]  # 나스닥, S&P 500, 엔화, 파운드
pattern_lists = ["1-1-1", "2-2-2", "3-3-3", "4-4-4"]

stock_list_input = input("파이참의 실행창에 종목코드를 입력 : ")
pattern_list_input = input("파이참의 실행창에 패턴을 입력 : ")

def pattern_check():
    for i, j in zip(futures_lists, pattern_lists):
        if stock_list_input == i:
            if pattern_list_input == j:
                print(f" 종목명{i}의 패턴은 {j}입니다")
        else:
            print("입력한 내용의 정보는 존재하지 않습니다.")

pattern_check()



# (expected result)
# 파이참의 실행창에 종목코드를 입력 : NQH23
# 파이참의 실행창에 패턴을 입력 : 2-2-2
# 입력한 내용의 정보는 존재하지 않습니다.
# 입력한 내용의 정보는 존재하지 않습니다.
# 입력한 내용의 정보는 존재하지 않습니다.

 

위의 코드에 대해 설명하도록 한다.

1~2줄 : 임의로 선물의 종목과 패턴을 선언해준다. (여기서는 패턴의 감각만 키우자)

             8줄에서 확인하겠지만, zip 함수는 각각의 리스트 태형을 매칭시켜준다.

3~4줄 : input 함수를 이용하여 1~2줄의 종목 및 패턴을 입력받는다. (키움에서 제공받는 데이터라고 생각하자)

 

8줄 : zip 함수를 이용하여 종목/패턴을 매칭하여 for문을 돌려준다.

         * 파인썬 zip 함수 설명 링크

            → zip 함수는 2개의 리스트에 있는 내용을 매칭해서 축출한다.

                위와 같은 경우라면, NQH23은 "1-1-1"과 매칭되며, ESH23은 "2-2-2"와 매칭된다.

 

9~11줄 : 이글의 핵심이다. 잘 이해하고 넘어가자.

             입력(제공)받은 종목/패턴 데이터가 8줄~9줄의 종목/패턴과 동일하면, 11줄을 출력하라.

  • 4줄에서 입력받은 데이터는 stock_list_input 변수에 저장되어 있고,
  • 8줄의 for문을 돌리면서 종목(futrues_lists)에서 하나씩 뽑아와서 9~10줄에서 비교하고 있다.

 

※ 사용자는 위의 코드에서 2가지만 입력해 보면, 종목/패턴이 어떻게 적용될지 감을 잡을 수 있다.

  • NQH23, 1-1-1을 입력해 보면, 11줄이 출력되며, → 종목/패턴이 동일하면, "진입" 활용 예정
  • NQH23, 2-2-2를 입력해보면, 13줄이 출력된다.  → 종목/패턴이 다르면, pass (미진입)으로 활용 예정

4. 마치며

input 함수를 이용하여 사용자가 설정한 패턴이 동일한 경우,

진입할 수 있는 방법의 개념에 대해 알아보았다.

 

무엇보다도 개념을 머릿속에 먼저 그려보아야, 코드를 봐도 쉽게 이해할 수 있었다.

다음 글에서는 해외선물의 패턴을 만들어보자.

반응형