Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기

마지막 업데이트: 2022년 3월 13일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
포렉스 로봇의 백테스트 수행

거래 자동화

프로젝트 히스토리 보러가기▼

아래의 내용은 유튜브 '조코딩'님의 '파이썬으로 주식거래 자동화만들기'를 참고한 내용입니다.

앞서서 삼성전자 현재가를 슬랙알람으로 받는걸 테스트해봤는데, 이제 진짜로 주식거래 자동화 프로그램을 만들어보자.

1. 요구사항

1) 거래가 빈번하게 이루어져서 수수료가 적어야한다.

그래서 주식(수수료: 약 0.269%)보다 ETF(수수료: 약 0.019%)가 비용적인 측면에서 유리하다.

다만, 변동성은 ETF보다 주식이 더 클 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 수 있기 때문에 하이리스크,하이리턴을 선호하면 주식종목으로 변경가능

2) ETF를 중심으로 자동거래를 한다면, 유동성공급자가 활동하는 시간을 고려햔다.

그래서 유동성공급자가 활동하는 시간인 9:05~15:20이므로 해당 프로그램은 적어도 15:15분에 모든 물량을 매도한다.

2. 제약사항

pip install pandas

pip install slacker

2) 슬랙 봇 토큰 및 채널명 입력

한계점 - 대신 해당 파이썬코드를 실행하기 위해서는 사전에 크레온plus가 로그인되어 있어야함

대안책 - 매번 로그인하기 귀찮으니까 autoConnect.py 프로그램 돌려놓기

Contribute to INVESTAR/StockAnalysisInPython development by creating an account on GitHub.

크레온plus로그인 및 자동매매 프로그램을 자동으로 실행하기 위해서 윈도우 작업스케쥴러 등록

한계점 - 대신 항상 windows컴퓨터가 항상 켜져있어야함

대안책 - aws의 ligthsail을 이용해서 윈도우pc 인스턴스를 run, 대신 사용한만큼 비용부과

3. 코드리뷰

symbol_list =[] # 자동매매를 원하는 종목코드

bought_list = [] # 매수가 완료된 종목들을 담아두는 목적

target_buy_count = 4 # 매수할 종목 수

buy_percent = 0.25 # 몇퍼센트씩 살건지

stocks = get_stock_balance( 'ALL' ) # 보유한 모든 종목 조회

total_cash = int (get_current_cash()) # 100% 증거금 주문 가능 금액 조회

buy_amount = total_cash * buy_percent # 종목별 주문 금액 계산

while True : 반복적으로 단기매매 진행

IF 토요일이나 일요일이면 -> 자동종료

IF 장이 시작할때(9시~9시5분) 아직도 남아있는 종목이 있으면 -> 모두판다

IF 시작시간~매도시간(9시5분~15시15분)이면 -> 자동매매 진행( buy_etf) , 30분마다 현재 잔고확인( get_stock_balance)

IF 장이 끝나갈때(15시15분~15시20분) -> 모두판다

IF 장이 끝났을때 (15시 20분 이후) -> 프로그램 종료

def buy_etf ( code ):

3가지 전략에 따라서 자동매매를 수행한다.

이때 매개변수code는 매수할종목인 symbol_list에서 하나씩 꺼내온 값

[0] 예외처리 : 이미 매수완료한 종목이면 더이상 매수하지 않음 -> return false

[1] 매수할 종목의 현재가( current_price) 알아오기 : get_current_price(code)

2.매수목표가(target_price) 알아오기 : get_target_price(code) -> 전략1.변동성돌파전략

3.5일 이동평균가( ma5_price) 알아오기 : get_movingaverage(code, 5 ) ->전략2. 이동평균선 5일

3.10일 이동평균가( ma5_price) 알아오기 : get_movingaverage(code, 10 ) -> 전략3. 이동평균선 10일

매수할종목의 현재가가 현재가격이 전략1,전략2, 전략3을 모두 만족할때 자동매매진행

cpTradeUtil.TradeInit() API의 거래모듈 시작

매수,주식상품, 종목코드, 매수할수량, FOK, 최유리 방식

IOC 방식 : 5000주 산다고 했는데, 10주만 파는사람만 있으면 10주만 사고 남은수량 취소하는 방식

FOK 방식 : 5000주 산다고 했는데, 10주만 파는사람만 있으면 그냥 아예 안삼.

출처 : 조코딩

거래 자동화

[YES24 X kittybunnypony] 나만의 독서 패턴 : 감각적인 패턴을 담은 9월의 굿즈 - 키티버니포니 파우치

9월의 얼리리더 주목신간 : 웰컴 투 북월드 배지 증정

[대학생X취준생] 꼭 공부를 해야 할 상황이라면? 2학기, 공부할 결심!

박해선 저자의 머신러닝/딥러닝 패스

[단독]『혼자 공부하는 파이썬』 개정판 출간

내일은 개발자! 코딩테스트 대비 도서전

[단독] 에듀윌 IT 자격증 기획전 - 가장 빠른 합격출구 EXIT

YES24 트윈링 분철 : 인서트라벨/스티커 택1 증정

9월 전사

쇼핑혜택

이 책을 구입하신 분들이 산 책

품목정보
출간일 2020년 02월 12일
쪽수, 무게, 크기 348쪽 | 188*240*30mm
ISBN13 9791158391881
ISBN10 1158391889

이 상품의 태그

퀀트 전략 파이썬으로 세워라

파이썬과 리액트를 활용한 주식 자동거래 시스템 구축

상장·코스닥 기업분석 2021년 가을

주식 자동매매 시스템 만들기

R을 이용한 퀀트 투자 포트폴리오 만들기

파이썬과 케라스를 이용한 딥러닝/강화학습 주식투자

출판사 리뷰 출판사 리뷰 보이기/감추기

이 책에서 다루는 내용

◎ 증권사(이베스트)에서 제공하는 API를 이용해 파이썬으로 거래 자동화 시스템을 개발한다.

◎ 외부로 기능을 제공하기 위한 Restful API 서버를 구현한다.

◎ 리액트를 이용해 웹과 앱에 필요한 화면을 만들어 본다.

◎ 데이터 분석에 필요한 기본적인 방법을 익히고, 퀀트 전략을 구현해 본다.

한줄평 (9건) 한줄평 총점 7.2

배송/반품/교환 안내

배송 안내

안전하고 정확한 포장을 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 위해 CCTV를 설치하여 운영하고 있습니다.

고객님께 배송되는 모든 상품을 CCTV로 녹화하고 있으며, 철저한 모니터링을 통해 작업 과정에 문제가 없도록 최선을 다 하겠습니다.

강화 학습을 이용한 주식 거래 자동화

주식 시장에서 자주 들을 수 있는 말은 곰과 소다. 베어런(bearrun)은 장기간에 걸친 시장 가격 하락을 암시하는 용어이고, 불런(bull run)은 그 반대를 가리킨다. 이것들은 당일 거래를 거래하는 트레이더들이 사용하는 용어이다. 장중거래는 거래자가 같은 거래일 내에 금융상품을 사고팔아 그날 시장이 마감되기 전에 모든 시장 포지션이 폐쇄되는 증권 투기의 한 형태다. 많은 양의 금융상품이 인더데이 거래 방식을 통해 거래된다.

이것은 통상적인 무역 계획 및 뉴스 트렌드와 함께 작용해 왔다. 데이터 사이언스 및 머신 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 러닝의 등장으로, 다양한 연구 접근 방식이 이 수동 프로세스를 자동화하도록 설계되고 있다. 이 자동화된 거래 프로세스는 더 나은 계산을 통해 적시에 어드바이스를 제공하는 데 도움이 될 것이다. 뮤추얼 펀드와 헤지펀드는 최대 이익을 주는 자동화된 거래 전략이 매우 바람직하다. 예상되는 수익의 종류에는 어느 정도의 잠재적 위험이 따를 것이다. 수익성이 높은 자동화된 거래 전략을 설계하는 것은 복잡한 작업이다.

모든 사람은 주식 시장에서 최대한의 잠재력을 얻고 싶어한다. 대부분의 사람들에게 혜택을 줄 수 있는 균형 잡힌 저위험 전략을 설계하는 것 역시 매우 중요하다. 그러한 접근 방식 중 하나는 과거 데이터에 기반한 자동화된 거래 전략을 제공하기 위해 강화 학습 에이전트를 사용하는 것에 대해 말한다.

강화학습

강화 학습은 환경과 에이전트가 있는 머신 러닝의 일종이다. 이러한 에이전트는 보상을 최대화하기 위한 조치를 취한다. 강화 학습은 AI 모델 훈련을 위한 시뮬레이션에 사용될 때 매우 큰 잠재력을 가지고 있다. 데이터와 관련된 레이블은 없으며, 강화 학습은 매우 적은 데이터 포인트로 더 잘 학습할 수 있다. 이 경우 모든 결정은 순차적으로 내려진다. 가장 좋은 예는 로봇공학 및 게임학에서 찾을 수 있다.

Q – Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 러닝

Q-러닝은 모델이 없는 강화 학습 알고리즘이다. 그것은 에이전트에게 상황에 따라 어떤 조치를 취해야 하는지 알려준다. 임박한 액션에 대한 정보를 에이전트에 제공하는 데 사용되는 값 기반 방법이다. q-러닝 함수가 임의의 작업을 수행하는 것과 같이 현재 정책 외부에 있는 동작에서 학습하므로 정책이 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 필요하지 않기 때문에 정책 외 알고리즘으로 간주된다.

Q 여기서 Q는 Quality를 나타낸다. 퀄리티는 조치된 보상이 얼마나 유익한지에 대한 행동 품질을 나타낸다. Q-테이블은 [state,action] 차원으로 작성된다. 에이전트는 exploit과 explore이라는 두 가지 방법으로 환경과 상호 작용한다. exploit 옵션은 모든 작업이 고려되고 환경에 최대값을 제공하는 작업이 수행됨을 나타낸다. explore 옵션은 미래의 최대 보상을 고려하지 않고 무작위 조치를 고려하는 옵션이다.

Q의 st과 at는 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 상태 s에서 수행되었을 때 최대 할인된 미래 보상을 계산하는 공식으로 표현된다.

정의된 함수는 훈련 주기 또는 반복 횟수가 끝날 때 최대 보상을 제공한다.

거래는 다음과 같은 콜을 할 수 있다. – 매수, 매도, 홀드

Q-러닝은 각 동작에 대한 등급을 매기고 최대값을 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 가진 동작을 추가로 선택한다. Q-Learning은 Q-table의 값을 학습하는 것을 기반으로 한다. 보상 함수와 상태 전이 확률 없이 잘 작동한다.

주식거래 강화학습

강화 학습은 다양한 유형의 문제를 해결할 수 있다. 거래는 엔드 포인트가 없는 지속적인 작업이다. 거래 또한 부분적으로 관찰 가능한 마르코프 결정 과정이다. 왜냐하면 우리는 시장에서 거래자에 대한 완전한 정보를 가지고 있지 않기 때문이다. 보상 함수와 전이 확률을 모르기 때문에 모델 없는 강화 학습인 Q-Learning을 사용한다.

RL 에이전트를 실행하는 단계:

  1. 라이브러리 설치
  2. 데이터 가져오기
  3. Q-Learning 에이전트 정의
  4. 에이전트 훈련
  5. 에이전트 테스트
  6. 콜 플롯

라이브러리 설치

필요한 NumPy, Panda, Matplotlib, Seaborn 및 Yahoo finance 라이브러리를 설치하고 가져온다.

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

!pip install yfinance –upgrade –no-cache-dir

from pandas_datareader import data as pdr

import fix_yahoo_finance as yf

from collections import deque

Import tensorflow.compat.v1 as tf

데이터 가져오기

야후 파이낸스 라이브러리를 사용하여 특정 주식에 대한 데이터를 가져온다. 우리의 분석에 사용되는 주식은 인포시스 주식이다.

df_full = pdr.get_data_yahoo(“INFY”, start=”2018-01-01″).reset_index()

이 코드는 2년 동안의 INFY의 주가를 포함하는 df_full이라는 데이터 프레임을 생성한다.

Q-Learning 에이전트 정의

첫 번째 함수는 에이전트 클래스로 상태 사이즈, 윈도우 사이즈, 배치 사이즈, 사용된 메모리, 인벤토리를 리스트로 정의한다. 또한 epsilon, decay, gamma 등과 같은 일부 정적 변수를 정의한다. 두 개의 신경망 레이어는 매수, 홀드 및 매도 콜에 대해 정의된다. GradientDescent Optimizer도 사용된다.

에이전트에는 매수 및 매도 옵션에 대해 정의된 기능이 있다. get_state 및 act 함수는 신경망의 다음 상태를 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 생성하기 위해 신경망을 사용한다. 이후 콜 옵션을 실행함으로써 생성된 값을 더하거나 빼서 보상을 계산한다. 다음 상태에서 수행되는 작업은 이전 상태에서 수행된 작업의 영향을 받는다. 1은 매수 통화를 의미하고 2는 매도 통화를 의미한다. 모든 반복에서, 상태는 일부 주식을 매수하거나 매도하는 조치를 취하는 것에 기초하여 결정된다. 전체 보상은 총 이익 변수에 저장된다.

name = ‘Q-learning agent’

def __init__(self, state_size, window_size, trend, skip, batch_size):

self.half_window = window_size // 2

self.memory = deque(maxlen = 1000)

self.X = tf.placeholder(tf.float32, [None, self.state_size])

self.Y = tf.placeholder(tf.float32, [None, self.action_size])

feed = tf.layers.dense(self.X, 256, activation = tf.nn.relu)

self.logits = tf.layers.dense(feed, self.action_size)

self.cost = tf.reduce_mean(tf.square(self.Y – self.logits))

def act(self, state):

self.sess.run(self.logits, feed_dict = )[0]

def get_state(self, t):

window_size = self.window_size + 1

d = t – window_size + 1

block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]

for i in range(window_size – 1):

res.append(block[i + 1] – block[i])

def replay(self, batch_size):

for i in range(l – batch_size, l):

X = np.empty((replay_size, self.state_size))

Y = np.empty((replay_size, self.action_size))

states = np.array([a[0][0] for Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 a in mini_batch])

new_states = np.array([a[3][0] for a in mini_batch])

Q = self.sess.run(self.logits, feed_dict = )

Q_new = self.sess.run(self.logits, feed_dict = )

for i in range(len(mini_batch)):

state, action, reward, next_state, done = mini_batch[i]

target[action] += self.gamma * np.amax(Q_new[i])

cost, _ = self.sess.run(

[self.cost, self.optimizer], feed_dict =

if self.epsilon > self.epsilon_min:

def buy(self, initial_money):

for t in range(0, len(self.trend) – 1, self.skip):

next_state = self.get_state(t + 1)

if action == 1 and initial_money >= self.trend[t] and t < (len(self.trend) – self.half_window):

print(‘day %d: buy 1 unit at price %f, total balance %f’% (t, self.trend[t], initial_money))

elif action == 2 and len(inventory):

invest = ((close[t] – bought_price) / bought_price) * 100

‘day %d, sell 1 unit at price %f, investment %f %%, total balance %f,’

% (t, close[t], invest, initial_money)

invest = ((initial_money – starting_money) / starting_money) * 100

total_gains = initial_money – starting_money

return states_buy, states_sell, total_gains, invest

def train(self, iterations, checkpoint, initial_money):

for i in range(iterations):

for t in range(0, len(self.trend) – 1, self.skip):

next_state = self.get_state(t + 1)

if action == 1 and starting_money >= self.trend[t] and t < (len(self.trend) – self.half_window):

elif action == 2 and len(inventory) > 0:

total_profit += self.trend[t] – bought_price

invest = ((starting_money – initial_money) / initial_money)

self.memory.append((state, action, invest,

batch_size = min(self.batch_size, len(self.memory))

if (i+1) % checkpoint == 0:

print(‘epoch: %d, total rewards: %f.3, cost: %f, total money: %f’%(i + 1, total_profit, cost,

에이전트 훈련

에이전트가 정의되면 에이전트를 초기화한다. 에이전트가 매수 또는 매도 옵션을 결정하도록 훈련할 반복 횟수, 초기 비용 등을 지정한다.

agent = Agent(state_size = window_size,

agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)

결과

에이전트 테스트

매수 함수는 매수, 매도, 이익, 투자 수치를 반환한다.

states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)

콜 플롯

총 이득 대비 투자된 수치를 표시한다. 모든 매수 및 매도 콜은 신경망에서 제안하는 매수/매도 옵션에 따라 적절히 표시되었다.

fig = plt.figure(figsize = (15,5))

plt.plot(close, color=’r’, lw=2.)

plt.plot(close, ‘^’, markersize=10, color=’m’, label = ‘buying signal’, markevery = states_buy)

plt.plot(close, ‘v’, markersize=10, color=’k’, label = ‘selling signal’, markevery = states_sell)

plt.title(‘total gains %f, total investment %f%%’%(total_gains, invest))

결과

마무리

Q-러닝은 자동화된 거래 전략을 개발하는 데 도움이 되는 기술이다. 매수 또는 매도 옵션을 실험하는 데 사용할 수 있다. 실험할 수 있는 강화학습 거래 대행사가 많이 있다. 다른 종류의 RL 에이전트와 다른 주식으로 시도해보자.

Course

MetaTrader 4의 전략 테스터 사용

포렉스 로봇의 백테스트 수행

포렉스 로봇 최적화

MetaTrader 4로 기록 데이터 가져오기

Forx 로봇의 전진 테스트 수행

여러 MT4 단자에서 Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 동시에 데모 테스트 실행


MetaTrader 4 스킬을 향상시키고자 하는 모든 사람

Forex 로봇을 테스트하는 방법을 배우고 싶은 사람

거래 시스템의 수익성을 극대화하고 싶은 사람

상업용 Expert Advisor를 구입한 사람

자체 알고리즘 트레이딩 시스템을 개발한 사람

마지막으로, 로봇으로 포렉스로부터 돈을 벌 수 있다는 증거를 원하는 사람은 누구나 있다.

본 강의에서는 Meta Teader 4에서 Forex 로봇을 테스트하고 최적화하는 방법에 대해 알아봅니다. 데모 계정으로 학습할 수 있도록 무료 실습 EA를 제공합니다. 본 강의를 통해 Forex 로봇을 능숙하게 사용하는 방법에 대해 배우세요. 당신의 시간, 돈, 노력을 절약할 수 있습니다.

EA Python 주식 자동매매4 - 주식거래 자동화 프로그램 만들기 또는 알고리즘 트레이딩 시스템 최적화를 위한 단계별 가이드를 제공합니다. MT4 관련하여 가장 완벽하고 최적화된 강의일 것이라 자부합니다.

다음과 같은 주제를 배우십시오.
● MetaTrader 4의 전략 테스터 사용
● MetaTrader 4로 기록 데이터 가져오기
● 포렉스 로봇의 백테스트 수행
● Forex 로봇의 전진 테스트 수행
● 포렉스 로봇 최적화
● 여러 MT4 단자에서 동시에 데모 테스트 실행
● 알고리즘 트레이딩 시스템의 의미 있는 실제 테스트 실행
● FX 로봇에 시험되고 시험된 안정성 기준 적용
● MT4 최적화에 대한 제한 설정
● MT4의 유전 알고리즘 및 2D 표면 활용
● 시스템에 대한 지속적인(롤링) 최적화 예약
● 최적화 결과를 Excel로 내보내기
● FX 시스템의 회수율 계산 및 적용

고지 사항:
이 과정에 포함된 모든 정보나 조언은 본질적으로만 일반적이며 개인 또는 투자 자문을 구성하지 않는다. 당사는 그러한 정보의 사용 또는 의존으로 인해 직접적 또는 간접적으로 발생할 수 있는 이익의 손실을 포함하여 어떠한 손실이나 손상에 대해서도 제한 없이 책임을 지지 않는다.금융상품을 취득하기 전에 독립적인 재무자문을 구해야 한다.모든 증권 및 금융상품 또는 금융상품 거래는 위험을 수반한다.과거의 성능 결과가 반드시 미래의 결과를 나타내는 것은 아니라는 점을 기억하십시오.


0 개 댓글

답장을 남겨주세요