ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MarketTimer_1.0: making note
    Service developing 2022. 9. 8. 13:49
    •  Service link(텔레그램 채널): 

    https://t.me/MarketTimer_alarm_bot

    •  Intro

    주식 퀀트투자 플랫폼 '젠포트' 단톡방에서 수요조사를 한 결과 실시간 코스닥 마켓타이밍 알람이 있었으면 좋겠다고 생각해서 개발하게 되었다. 사용한 주요 라이브러리는 FinanceDataReader, telegram, schedule, time, datetime 등이 있다.

    •  Service

    현재 제공하고 있는 기본기능으로는 코스닥 현재가와 3,5,10 이동평균선을 비교하여 현재가가 3,5,10 이동평균 중 하나라도 높으면 매수타이밍, 현재가가 3,5,10 이동평균 전부보다 낮다면 매도타이밍 알람을 보내준다. 알람 시각은 10시, 12시, 14시(KST한국시각)이다.

    서비스 예:

     

     

    완성 코드:

    #!/usr/bin/env python
    # coding: utf-8
    
    # In[ ]:
    
    
    import FinanceDataReader as fdr
    import matplotlib.pyplot as plt
    # get_ipython().run_line_magic('matplotlib', 'inline')
    import numpy as np
    import pandas as pd
    import datetime
    from datetime import date
    import sys
    fdr.__version__
    import schedule
    import time
    import pytz
    from numpyencoder import NumpyEncoder
    import telegram
    import json
    
    
    
    def job():
    
        # 한국시각, 주말 설정
    #     now = datetime.datetime.now(pytz.timezone('Asia/Seoul'))
        today = date.today()
        weekend = today.weekday()
        # 예외시간 설정. 주말에는 알람을 보내지 않음
        while weekend >= 5:
            print(weekend)
        
        # 봇 설정
        API_KEY = 'api key를 넣어준다'
        bot = telegram.Bot(token=API_KEY)
        bot.get_updates()
        public_chat_name = '@텔레그램 채팅방 주소'
    #     for i in updates:
    #     print(i.message['chat']['id'])
        
        # 코스닥지수
        code = 'KQ11'
        df = fdr.DataReader('KQ11','2022-08').reset_index()
        # 3,5,10 이동평균 딕셔너리에 할당
        df['close_sma3d'] = df['Close'].rolling(3).mean()
        df['close_sma5d'] = df['Close'].rolling(5).mean()
        df['close_sma10d'] = df['Close'].rolling(10).mean()
        # dataframe 재구성
        df2 = df.loc[: ,['Date','Close', 'close_sma3d','close_sma5d','close_sma10d']].iloc[-1:]
        alerts = df2[(df2['Close'] > df2['close_sma3d']) | (df2['Close'] > df2['close_sma5d']) | (df2['Close'] > df2['close_sma10d'])]
        alerts2 = df2[(df2['Close'] < df2['close_sma3d']) & (df2['Close'] < df2['close_sma5d']) & (df2['Close'] < df2['close_sma10d'])]
    
        for index, row in alerts.iterrows():
            z = row['Close']
            a = round(row['close_sma3d'], 2)
            b = round(row['close_sma5d'], 2)
            c = round(row['close_sma10d'], 2)
        # telegram 알람에서 출력하기 위해 datetime64만 json str 형식으로 변환
            row['Date'] = row['Date'].date()
            jsonstr1 = json.dumps(str(row['Date']))
            Market_timing = (f"{jsonstr1} 현재가가 3 or 5 or 10 단순이동평균보다 높습니다 코스닥_현재가 {z} 3일이동평균 {a} 5일이동평균 {b} 10일이동평균 {c}")
            bot.sendMessage(chat_id = public_chat_name, text=Market_timing).chat_id
        for index, row in alerts2.iterrows():
            z2 = row['Close']
            a2 = round(row['close_sma3d'], 2)
            b2 = round(row['close_sma5d'], 2)
            c2 = round(row['close_sma10d'], 2)
        # telegram 알람에서 출력하기 위해 datetime64만 json str 형식으로 변환
            row['Date'] = row['Date'].date()
            jsonstr2 = json.dumps(str(row['Date']))
            Market_timing2 = (f"{jsonstr2} 현재가가 3 and 5 and 10 단순이동평균보다 낮습니다 코스닥_현재가 {z2} 3일이동평균 {a2} 5일이동평균 {b2} 10일이동평균 {c2}")
            bot.sendMessage(chat_id = public_chat_name, text=Market_timing2).chat_id
    
    # 2 시간 마다 실행
    # schedule.every(2).hours.do(job)
    schedule.every().day.at("10:00").do(job)
    schedule.every().day.at("12:00").do(job)
    schedule.every().day.at("14:00").do(job)
    
    print('Start App..')
    
    while True:
        schedule.run_pending()
        time.sleep(1)

     

    •  활용방안 

    - 전략1: 전날 종가배팅한 종목을 들고 코스닥 마켓타이밍이 10시에 매수신호일 경우 홀딩, 매도신호일 경우 청산

    - 전략2: 10시에 코스닥 지수가 매도신호일 경우 눌림목 매수, 12시 매수신호일 경우 홀딩, 반대의 경우 청산, 14-15시 매도

    •  개선방안

    - 이후 공시 키워드 알람 등 기능을 추가해도 좋을 듯 싶다. '제3자유상증자' '액면분할' '수주' '인수합병' 같은 키워드를 실시간 포착, 재료에 따른 매매를 할 수 있다면 큰 도움이 될 것으로 보인다.

    - 클래스를 이용하여 코드를 줄일 수 있다면 더 좋을 듯 싶다.

     

     

     

    Github link:

    JoshuaChung93/MarketTimer (github.com)

Designed by Joshua Chung.