[무료 주식 자동 매매 프로그램 V.1.0.0] 사용자 원하는 대로 업데이트 가능
본문 바로가기

프로그램 무료 공유[모의투자]/실투자 베타 버전 공유

[무료 주식 자동 매매 프로그램 V.1.0.0] 사용자 원하는 대로 업데이트 가능

반응형

 총 54강에 걸쳐 완성된 주식 자동매매 프로그램을 exe 실행파일로 만들어서 공유합니다. 물론 공유된 파일의 소스는 블로그에 다 오픈되어 있으니 누구든 원하는 형태로 수정 가능합니다.

 

 뿐만 아니라 다양한 방향으로 업데이트된(머신러닝, 미래예측, 시황확인 등) 프로그램을 모의투자로 누구든 사용할 수 있게 하였습니다. 여러분들이 스스로 느끼시고 학습하셔서 훌륭한 프로그램을 만들 수 있도록 오픈하였습니다.

 

 강의 링크(블로그/유튜브)와 프로그램을 다운 받을 수 있는 링크를 아래에 공유해 드리니 누구든/언제든 받아가셔서 경제적/시간적 자유를 누리시기 바랍니다. 단, 상업적인 프로그램 배포는 엄격히 금지되고 있습니다. 감사합니다.

목차

1. 프로그래머 알바는 누구인가

2. 무료 프로그램 강의 소개 : 블로그/유튜브 링크

3. 프로그램 주요기능 설명 : 다운로드 사이트 링크

4. 프로그램 기능 향상을 위한 주요 수정할 코드 설명

5. 알바가 제작 및 사용하고 있는 프로그램 공유 : 서비스

6. 프로그램 사용을 위한 준비물

7. 프로그램 공유 사이트

 

1. 프로그래머 알바는 누구인가

 우선 프로그램을 공유하고 강의하는 사람이 누구인지 궁금하실 것입니다.

 현직 정출 연 연구원으로 부자가 되어 파이어 하고 싶은 개미입니다. 시스템 체계를 관리하고 신호처리를 전공으로 하고 있습니다. 메인 프로그램은 Matlab이며, Labview를 주로 사용하고 있습니다. Python은 메인 언어는 아니나, Open API 개발에 유리하기 때문에 공부하기 시작했습니다.
 프로그램 등록증은 18개 이상 보유하고 있으며, 논문과 특허는 지속적으로 작성하고 있습니다. 우선 일반 업체들과는 다른 길을 걷고 있는 사람입니다.

반응형

프로그래머 알바
프로그래머 알바

 

2. 무료 프로그램 강의 소개

 프로그램 강의를 들으시면 궂이 공유된 프로그램을 다운로드 받지 않으셔도 누구든지 만드실 수 있습니다.

 강의는 블로그와 유튜브로 되어 있으며, 누구든 만드실 수 있도록 모든 소스를 다 오픈하여 공유해 드렸습니다. 한분이라도 소중히 모시도록 하겠습니다.

 

 [링크 : 블로그 무료 강의 54강]

 

 [링크 : 유튜브 무료 강의]

 

3. 프로그램 주요 기능 설명

 프로그램의 주요기능을 설명 드리겠습니다. 사전에 프로그램을 다운 받을 수 있는 카페를 공유해 드리겠습니다.

 

 [링크 : 네이버 카페, 파일 다운로드]

 

 

제공된 프로그램
제공된 프로그램

 우선 아래와 같이 기능을 간단히 설명드렸습니다. 하지만 아래 모든 사항은 강의만 들으시면 여러분이 원하시는 대로 변경 가능합니다. 

 

 (1) 본인 계좌 확인

   - 계좌의 총 합산 평가금액 전시

   - 계좌의 종목 당 합산 평가금액 전시

 (2) 계좌 위험도 판단

   - 기관 및 외국인이 3일~5일 연속 매도 한 종목에 대해서 위험도 경고

   - 역배열 주식에 대하여 역배열 유/무 판단 후 전시

 

 

 

 

 

 (3) 원하는 종목 및 매수/매도 조건 등록

   이부분 아주 중요합니다. 가격을 정확히 입력해야 원하는 가격에 매수/매도됩니다.

   - 종목 이름 입력 : 삼성전자

   - 매수 가격 : 원하는 가격 입력

   - 매수수량 : 원하는 수량 입력

   - 익절 가격 : 원하는 가격 입력

   - 손절 가격 : 원하는 가격 입력

   - 종목 추가 : 다 입력 후 종목 추가 

   - 선정 종목 삭제 : (4)의 표 안에서 삭제하고픈 종목 선택 후 클릭

   (4) 선정 종목 확인 및 DB 화

   선정된 종목에서 매수나 매도 가격 수정을 원하시면 표에서 수정하시면 돼요.

   - DB 저장 : 원하는 종목 선정 후 저장

   - DB로드 : 선정되어 저장된 종목을 불러옴

   - DB삭제 : 선정 되어 저장된 종목을 삭제

   (5) 자동매매 시작

    자동매매 구동 원리는 아래와 같습니다.

   - 매수 : 현재가가 매수 가격 대비 낮을 경우 매수 주문

   - 익절 : 현재가가 익절 가격 대비 높을 경우 익절 주문

   - 손절 : 현재가가 손절 가격 대비 낮을 경우 손절 주문

   - 매수 취소 : 현재가가 매수 가격 대비 1% 높을 경우(매수 취소 후 재매수합니다.)

   (별표) 사이트 소개

   - 프로그램 강의 블로그 : 강의 블로그로 가셔서 원하시는 프로그램을 만드세요.

   - 프로그램 강의 유튜브 : 블로그가 어려울 시 유튜브도 병행하세요.

   - 종목추천 블로그 : 환상적인 프로그램으로 추천된 종목을 확인하세요.

 

4. 프로그램 기능 향상을 위한 주요 수정할 코드 부분 설명

 하나의 팁을 드리겠습니다. 현재 오픈된 프로그램은 분할 매수/매도가 되지 않는데 그 기능을 업데이트 할 수 있는 코드를 보여 드리겠습니다. 물론 블로그 강의 중 중급반에서는 다 다루었으나 그래도 다시 오픈해 드리겠습니다.

 기초반을 완강하면 누구든 아래와 같이 수정이 가능하니 꼭 수강하시길 바랍니다.

            ###############################################################
            ############# 실시간을 위한 조건문 구성하기 ########################
            ###############################################################


            #1. 매수 알고리즘 가동

            #1차#############################################################################################
            if self.k.portfolio_stock_dict[sCode]["현재가"] <= self.k.portfolio_stock_dict[sCode]["매수가"]:
                if sCode not in self.orderitmelist_1:

                    wa = []
                    wa.append(sCode)

                    if len(wa) > 1:
                        wa.clear()
                        pass
                    else:
                        print("매수 시작 %s" % sCode)

                        self.orderitmelist_1.append(sCode)  # 이 기법을 더이상 사용하지 못하게 하기
                        order_success1 = self.k.kiwoom.dynamicCall("SendOrder(QString, QString, QString ,int, QString, int, int, QString, QString)",
                                                                   ["신규매수", self.k.portfolio_stock_dict[sCode]['주문용스크린번호'], self.account_num, 1, sCode,
                                                                    self.k.portfolio_stock_dict[sCode]["매수수량"], self.k.portfolio_stock_dict[sCode]["현재가"],
                                                                    self.realType.SENDTYPE['거래구분']['지정가'], ""])

                        wf2 = open("dist/mesu_database.txt", "a", encoding="utf8")  # "a" 달아 쓴다. "w" 덮어 쓴다. files라느 파이썬 페키지 볼더를 만든다.
                        wf2.write("%s\t%s\t%s\t%s\n" % ("1매수정보", self.k.portfolio_stock_dict[sCode]["종목명"], b, self.k.portfolio_stock_dict[sCode]["채결시간"]))  # t는 tap을 의미한다.
                        wf2.close()

                        if order_success1 == 0:
                            print("최우선매수호가로 주문 전달 성공")
                        else:
                            print("최우선매수호가로 주문 전달 실패")



            #2. 매도 알고리즘 가동

            #1차 익절 #############################################################################################
            if self.k.portfolio_stock_dict[sCode]["현재가"] >= self.k.portfolio_stock_dict[sCode]["익절가"]:
                if sCode not in self.orderitmelist_2:

                    wa = []
                    wa.append(sCode)

                    if len(wa) > 1:
                        wa.clear()
                        pass
                    else:
                        print("익절 시작 %s" % sCode)

                        self.orderitmelist_2.append(sCode)  # 이 기법을 더이상 사용하지 못하게 하기
                        order_success2 = self.k.kiwoom.dynamicCall("SendOrder(QString, QString, QString ,int, QString, int, int, QString, QString)",
                                                                   ["신규익절", self.k.portfolio_stock_dict[sCode]['주문용스크린번호'], self.account_num, 2, sCode,
                                                                    self.k.portfolio_stock_dict[sCode]["매수수량"], self.k.portfolio_stock_dict[sCode]["현재가"],
                                                                    self.realType.SENDTYPE['거래구분']['지정가'], ""])

                        wf2 = open("dist/mesu_database.txt", "a", encoding="utf8")  # "a" 달아 쓴다. "w" 덮어 쓴다. files라느 파이썬 페키지 볼더를 만든다.
                        wf2.write("%s\t%s\t%s\t%s\n" % ("1익절정보", self.k.portfolio_stock_dict[sCode]["종목명"], b, self.k.portfolio_stock_dict[sCode]["채결시간"]))  # t는 tap을 의미한다.
                        wf2.close()

                        if order_success2 == 0:
                            print("익절가로 주문 전달 성공")
                        else:
                            print("익절가로 주문 전달 실패")

            #1차 손절 #############################################################################################
            if self.k.portfolio_stock_dict[sCode]["현재가"] <= self.k.portfolio_stock_dict[sCode]["손절가"]:
                if sCode not in self.orderitmelist_3:
                    wa = []
                    wa.append(sCode)

                    if len(wa) > 1:
                        wa.clear()
                        pass
                    else:
                        print("손절 시작 %s" % sCode)

                        self.orderitmelist_3.append(sCode)  # 이 기법을 더이상 사용하지 못하게 하기
                        order_success3 = self.k.kiwoom.dynamicCall("SendOrder(QString, QString, QString ,int, QString, int, int, QString, QString)",
                                                                   ["신규손절", self.k.portfolio_stock_dict[sCode]['주문용스크린번호'], self.account_num, 2, sCode,
                                                                    self.k.portfolio_stock_dict[sCode]["매수수량"], self.k.portfolio_stock_dict[sCode]["현재가"],
                                                                    self.realType.SENDTYPE['거래구분']['지정가'], ""])

                        wf2 = open("dist/mesu_database.txt", "a", encoding="utf8")  # "a" 달아 쓴다. "w" 덮어 쓴다. files라느 파이썬 페키지 볼더를 만든다.
                        wf2.write("%s\t%s\t%s\t%s\n" % ("1손절정보", self.k.portfolio_stock_dict[sCode]["종목명"], b, self.k.portfolio_stock_dict[sCode]["채결시간"]))  # t는 tap을 의미한다.
                        wf2.close()

                        if order_success3 == 0:
                            print("손절가로 주문 전달 성공")
                        else:
                            print("손절가로 주문 전달 실패")


            #미체결 잔고 매수/매도 취소 #############################################################################################
            not_meme_list = list(self.k.not_account_stock_dict)  # 체결하지 않은 종목들을 실제 미체결 잔고에서 받아온다.
            if len(self.k.not_account_stock_dict) > 0:

                for order_num in not_meme_list:  # not_meme_listnot_meme_list에는 주문번호가 들어가 있다.

                    code = self.k.not_account_stock_dict[order_num]["종목코드"]
                    meme_price = self.k.not_account_stock_dict[order_num]['주문가격']
                    not_quantity = self.k.not_account_stock_dict[order_num]['미체결수량']
                    order_gubun = self.k.not_account_stock_dict[order_num]['주문구분']

                    ##### 매수에 대한 취소 주문 : 주문가격이 최우선 매수호가보다 작을 경우

                    if order_gubun == "매수" and not_quantity > 0 and (1.01 * meme_price) < self.k.portfolio_stock_dict[sCode]["현재가"]:

                        order_success = self.k.kiwoom.dynamicCall(
                            "SendOrder(QString, QString, QString ,int, QString, int, int, QString, QString)",
                            ["매수취소", self.k.portfolio_stock_dict[sCode]['주문용스크린번호'], self.account_num, 3, code, 0, 0,
                             self.realType.SENDTYPE['거래구분']['지정가'], order_num])  # order_num 은 어떤 주문을 취소할 것인가.

                        if order_success == 0:
                            print("%s 매수취소 전달 성공" % code)  # 체결잔고에서  del을 했기 때문에 여기서 하지 않는다.
                            self.cancel_the_order.append(code)  # 차 후 재매수를 위해 필요함
                        else:
                            print("%s 매수취소 전달 실패" % code)

                        wf2 = open("dist/chiso_database.txt", "a", encoding="utf8")  # "a" 달아 쓴다. "w" 덮어 쓴다. files라느 파이썬 페키지 볼더를 만든다.
                        wf2.write("%s\t%s\t%s\t%s\n" % ("매수취소", self.k.portfolio_stock_dict[sCode]["종목명"], not_quantity, self.k.portfolio_stock_dict[sCode]["채결시간"]))  # t는 tap을 의미한다.
                        wf2.close()

                    elif not_quantity == 0:
                        del self.k.not_account_stock_dict[order_num]


                    ##### 매도에 대한 취소 주문 : 주문가격이 최우선매도호가보다 클결우

                    elif order_gubun == "매도" and not_quantity > 0 and self.k.portfolio_stock_dict[sCode]["현재가"] < (0.99 * meme_price):

                        order_success = self.k.kiwoom.dynamicCall(
                            "SendOrder(QString, QString, QString ,int, QString, int, int, QString, QString)",
                            ["매도취소", self.k.portfolio_stock_dict[sCode]['주문용스크린번호'], self.account_num, 4, code, 0, 0,
                             self.realType.SENDTYPE['거래구분']['지정가'], order_num])  # order_num 은 어떤 주문을 취소할 것인가.

                        wf2 = open("dist/chiso_database.txt", "a",
                                   encoding="utf8")  # "a" 달아 쓴다. "w" 덮어 쓴다. files라느 파이썬 페키지 볼더를 만든다.
                        wf2.write("%s\t%s\t%s\t%s\n" % ("매도취소", self.k.portfolio_stock_dict[sCode]["종목명"], not_quantity,
                                                        self.k.portfolio_stock_dict[sCode]["채결시간"]))  # t는 tap을 의미한다.
                        wf2.close()

                        if order_success == 0:
                            print("%s 매도취소 전달 성공" % code)  # 체결잔고에서  del을 했기 때문에 여기서 하지 않는다.
                            self.cancel_the_order.append(code)  # 차 후 재매수를 위해 필요함

                        else:
                            print("%s 매도취소 전달 실패" % code)

                    elif not_quantity == 0:
                        del self.k.not_account_stock_dict[order_num]



            ########################
            # 5. 재 매수 알고리즘 : 현재가가 매수 되지 못하였을 경우를 대비하여 재 매수 알고리즘 가동
            ########################
            elif sCode in self.cancel_the_order:
                # 재매수#############################################################################################
                if self.k.portfolio_stock_dict[sCode]["현재가"] <= self.k.portfolio_stock_dict[sCode]["매수가"]:
                    if sCode not in self.orderitmelist_4:
                        wa = []
                        wa.append(sCode)

                        if len(wa) > 1:
                            wa.clear()
                            pass
                        else:
                            print("재매수 시작 %s" % sCode)

                            self.orderitmelist_4.append(sCode)  # 이 기법을 더이상 사용하지 못하게 하기
                            order_success3 = self.k.kiwoom.dynamicCall(
                                "SendOrder(QString, QString, QString ,int, QString, int, int, QString, QString)",
                                ["신규매수", self.k.portfolio_stock_dict[sCode]['주문용스크린번호'], self.account_num, 1, sCode,
                                 self.k.portfolio_stock_dict[sCode]["매수수량"], self.k.portfolio_stock_dict[sCode]["현재가"],
                                 self.realType.SENDTYPE['거래구분']['지정가'], ""])

                            wf2 = open("dist/mesu_database.txt", "a",
                                       encoding="utf8")  # "a" 달아 쓴다. "w" 덮어 쓴다. files라느 파이썬 페키지 볼더를 만든다.
                            wf2.write("%s\t%s\t%s\t%s\n" % ("재매수정보", self.k.portfolio_stock_dict[sCode]["종목명"], b,
                                                            self.k.portfolio_stock_dict[sCode][
                                                                "채결시간"]))  # t는 tap을 의미한다.
                            wf2.close()
                            if order_success3 == 0:
                                print("재매수 주문 전달 성공")
                            else:
                                print("재매수 주문 전달 실패")

 

5. 알바가 제작중인 모의투자 프로그램 공유

 아래 링크를 들어가시면 강의용이아닌 알바가 직접 더 제작하고 사용하는 프로그램을 사용할 수 있도록 공유해 드렸습니다. 누구든 참고하셔서 훌륭한 성과를 얻었으면 합니다.

 

[링크 : 모의투자 프로그램 공유 사이트]

 

 그리고 모의투자가 어떻게 사용하는지/어떤 기능이 있는지 설명하는 링크입니다.

 

 [링크 : 모의투자 기능과 사용법]

 

 또한 아래는 프로그램 사용 실적입니다.

 

 (1) 종목추천 기능을 이용한 투자

3월 수익만 보더라도 아래와 같습니다. 3월 이전의 수익은 카페에 있으며, 정말 놀랍게도 엄청난 수익이었죠.

수익수익
수익

 (2) 현재 개발중인 인버스/레버리지 시황 투자

 미래예측, 머신러닝, 시황분석, 주식 신지식 습득을 프로그램에 업데이트하여 한번 더 큰 도약을 맞이 하였습니다. 아래와 같이 소액으로 13번 투자하여 9승 4패의 70프로 실적이 나왔습니다. 아래 투자는 레버리지/인버스에 관한 것인데 레버리지 투자 시 개별 종목도 프로그램 추천주로 투자하고 있으므로 수익은 극대화됩니다.

실적
실적

 

6. 프로그램 사용을 위한 주요 준비물

 

 프로그램을 사용하기 위해서는 기본적으로 키움계좌가 있어야하며, 키움 Open API를 다운 받으셔야 됩니다. 구체적으로 준비하셔야될 준비물을 아래 링크에서 자세히 설명 드려 놓았습니다. 

 

 [링크 : 프로그램 사용전 준비해야 될 것]

 

 위의 블로그 링크만 보셔도 되나 혹시 몰라 아래와 같이 유튜브도 공유해 드립니다.

 

https://youtu.be/gkJR-XHyRbQ

 

 ● Open API : 1단계 / 2단계를 마무리하시고 3단계의 KOA Studio를 다운해 주세요

   - 키움증권 접속 :  https://www1.kiwoom.com/h/main
   - Open API 클릭
   - 사용신청
   - Open API 설치 및 KOA Studio 설치

Open API 설치 화면
Open API 설치 화면

 

 

7. 프로그램 공유 사이트

 용량이 30M가 넘기 때문에 카페에 올려 드립니다. 가입만 하시면 바로 다운로드 가능합니다. 

 

https://cafe.naver.com/moneytuja

 

혹시 알바가 사용하는 프로그램이 궁금하신 분은 연락 주시면 일정 기간 사용할 수 있는 기회를 드립니다.

반응형

.link_tit