거래기술에 관한 정보

Algorithmic Trading with Python:(Python을 사용한 알고리즘 트레이딩:)

효성공인 2020. 7. 8. 14:51

Algorithmic Trading with Python:(Python을 사용한 알고리즘 트레이딩:)

 

This was a post by Troy Bombardia

 

Most traders begin trading with discretionary trading strategies since these strategies are usually easier to understand. Just pull up a chart, overlay some indicators onto the chart, and voila! You can start to understand, analyze, and learn about the market from Day 1! But as your trading experience and knowledge accumulates over the years, you may want to level up(평준화하다) your trading by looking at quantitative trading strategies. These trading strategies are more difficult to understand and can be quite difficult to create if you don’t have a background in computer programming. So if you’re interested in quantitative trading, I’m going to share with you how quants(퀀터) like myself use Python for trading.

대부분의 트레이더들은 재량적인(임의적인) 거래 전략을 가지고 거래를 시작한다. 왜냐하면 이러한 전략들은 보통 이해하기 쉽기 때문이다. 차트를 세우고 차트에 표시기를 덧씌우고 짜잔! 당신은 1일부터 시장에 대해 이해하고 분석하고 배울 수 있다! 하지만 당신의 거래 경험과 지식이 수년간 축적됨에 따라, 당신은 양적인 거래 전략을 살펴봄으로써 당신의 거래를 평준화하는 것을 원할지도 모른다. 이러한 거래 전략은 더 이해하기 어렵고 컴퓨터 프로그래밍의 배경이 없다면 만들기가 상당히 어려울 수 있다. 양적 거래에 관심이 있으시다면 저와 같은 쿼터들이 어떻게 파이썬을 거래에 사용하는지 공유하고자 한다.

What is Python, and why not stick with Excel?

Python이란 무엇이며, 엑셀을 고수하는 것은 어떠한가?

 

Python is a high-level programming language that’s more user and beginner-friendly than many other popular programming languages. Many quants write Python code to backtest strategies and execute their trades. Now you may be wondering, “what if I don’t know Python? Learning it sounds difficult, and I can just stick to Excel!”

파이톤은 다른 많은 인기 있는 프로그래밍 언어보다 사용자도 많고 초보자도 친숙한 고급 프로그래밍 언어다. 많은 쿼터들이 Python 코드를 써서 역주행 전략을 세우고 거래를 실행한다. 이제 여러분은 "내가 파이썬을 모르면 어떡하지? 배우는 것은 어렵게 들리고, 나는 엑셀만 고수할 수 있어!"

You certainly can stick with Excel. Excel is great for backtesting simple trading strategies such as “go long when the S&P 500 is above its 200 day moving average, otherwise sell and shift into cash”.

너는 엑셀과 함께 있을 수 있다. 엑셀은 "S&P 500이 200일 이동 평균 이상일 때 오래가고 그렇지 않으면 팔고 현금으로 바꾸는 것"과 같은 간단한 거래 전략을 되짚어 보는 데 아주 좋다.

너는 엑셀과 함께 있을 수 있다. 엑셀은 "S&P 500이 200일 이동 평균 이상일 때 오래가고 그렇지 않으면 팔고 현금으로 바꾸는 것"과 같은 간단한 거래 전략을 되짚어 보는 데 아주 좋다.

 

While Excel is great for beginners, it isn’t very scalable(확장할 수 있는) the way Python is. Some of these problems can be mitigated with the use of Excel VBA, (Visual Basic for Application) but VBA isn’t as functional(실용적) as Python:

엑셀은 초보자에게는 훌륭하지만 파이썬처럼 확장성이 크지 않다. Excel VBA를 사용하면 이러한 문제를 완화할 수 있지만 VBA는 Python만큼 작동하지 않는다.

Let’s assume I want to backtest a trading model that can simultaneously look at 1000 different stocks, and pick the 50 best stocks to trade. Backtesting such a model in Excel would be a nightmare, since it would take forever to work on 1000 columns of price data. Backtesting such a strategy is much easier in Python.

1000개의 다른 주식을 동시에 볼 수 있는 거래 모델을 백스트하고, 거래할 50개의 가장 좋은 주식을 고르고 싶다고 가정해 봅시다. 그런 모델을 엑셀에서 다시 테스트하는 것은 악몽이 될 것이다. 가격 데이터 1000 행에서 작업하는 데 오래 걸리기 때문이다. 파이썬에서는 그런 전략을 백테스트 해 보는 것이 훨씬 쉽다.

Let’s assume that I want to optimize my trading model (while being careful of curve fitting:맞추기). I recently did this to test 65,000 pairs of MACD settings to find the best one. If you try to do this Excel, it will take days if not weeks to find the best setting. But in Python, all you need to do is write a short piece of code. Let your computer execute the code and within a few minutes, you will have the answer you’re looking for.

(커브 피팅을 주의하면서) 거래 모델을 최적화하고 싶다고 가정해 봅시다. 나는 최근에 가장 좋은 것을 찾기 위해 6만 5천 쌍의 MACD 설정을 테스트하기 위해 이것을 했다. 만약 당신이 이 엑셀을 하려고 한다면, 가장 좋은 설정을 찾는데 몇 주가 걸리지는 않을  지라도 몇 일은 걸릴 것이다. 하지만 파이썬에서는 코드만 짧게 쓰면 돼. 컴퓨터에서 코드를 실행하게 하면 몇 분 안에 원하는 대답을 얻을 수 있을 것이다.

Why Python instead of other programming languages for trading?

왜 다른 프로그래밍 언어 대신 Python을 거래하는가?

If you’re new to programming, the sheer(엄청난 수 완전한) number of programming languages that you can use for quantitative trading may seem daunting(주눅이 들다). Python, C++, C#, Java, R, etc. Which language should you start with?

프로그래밍에 익숙하지 않다면, 양적 거래에 사용할 수 있는 프로그래밍 언어의 수가 엄청나게 많아 보일 수 있다. Python, C++, C#, Java, R 등. 어느 언어부터 시작해야 하는가?

I personally prefer Python (and that’s what I started with). Python is one of the most widely used programming languages in quantitative trading since it’s a high-level language (which means that the code is easier to understand and hence, more user friendly). Other programming languages such as C++ are older and as middle-level languages, are harder to learn/use. In addition, Python has some great libraries such as Pandas which uses “dataframes” which look quite similar to Excel spreadsheets.

나는 개인적으로 파이썬을 선호한다.(그 것이 갖고 시작한 것이였다) 파이톤은 높은 수준의 언어(암호가 이해하기가 쉬웠기에 많은 사용자에게 우호적이였음을 의미함) 였기에 양적 거래에서 가장 널리 사용되는 프로그래밍 언어 중 하나이다. C++와 같은 다른 프로그래밍 언어는 더 오래되었고 중간 수준의 언어로서 배우거나 사용하기가 더 어렵다. 게다가 파이썬은 엑셀 스프레드시트와 꽤 비슷한 "데이터프레임"을 사용하는 판다와 같은 훌륭한 문서보관소들을 가지고 있다.

Aside from Python, Java is probably one of the most popular programming languages for trading, but is more difficult for beginners to learn.

파이썬을 제외하고 자바어는 아마도 무역을 위한 가장 인기 있는 프로그래밍 언어 중 하나이지만 초보자들이 배우기가 더 어렵다.

 

Python + Pandas

파이톤+팬더

 

On its own, Python for trading is quite hard to use. That’s where the Pandas library for Python comes into play(나타나다). From a layman’s(비전문가) perspective, Pandas essentially turns data into a table (or “dataframe”) that looks like an Excel spreadsheet. Once the market price data looks like a spreadsheet with Pandas, you can more easily run Python code for trading purposes (e.g. building trading models). This means that in order to effectively use Python for trading, you need to use Python + Pandas together.

거래하는 파이썬 자체로는 사용하기 어렵다. 그곳이 바로 파이썬을 위한 판다 보관소가 나타나는 곳이다 . 비전문가의 입장에서 볼 때 판다는 기본적으로 데이터를 엑셀 스프레드시트처럼 보이는 테이블(또는 "데이터프레임")으로 바꾼다. 일단 시장 가격 데이터가 팬더와 함께 스프레드시트처럼 보이면 거래 목적(예: 거래 모델 구축)을 위해 파이썬 코드를 더 쉽게 실행할 수 있다. 거래에 효과적으로 파이썬을 이용하려면 파이썬+팬더를 함께 이용해야 한다는 의미다

 

How can you use Python for trading?

어떻게 파이썬을 거래에 사용할 수 있니?

There are many different use cases for Python when trading. The most notable use cases are:

거래할 때 파이썬은 여러 가지 사용 사례가 있다. 가장 주목할 만한 사용 사례는 다음과 같다:

Backtesting & building trading models

백테스트 및 빌딩 거래 모델

 

Many traders begin with discretionary trading strategies.

많은 거래자들은 자유재량적인 거래전략으로 시작한다.

But the problem with discretionary trading is that:

그러나 재량권 거래의 문제는 다음과 같다.

You don’t know how well your trading strategy works through time and under different types of market environments.

당신은 당신의 거래 전략이 시간 경과와 다른 유형의 시장 환경에서 얼마나 잘 작동하는지 모른다

Does it work well in a bull market, a bear market, a choppy market, a strongly trending market?

강세 시장, 약세 시장, 약세 시장, 강세 시장에서도 효과가 좋은가

Even if your discretionary trading strategy worked well so far, how do you know it works because of skill and not luck? E.g. any strategy – even flipping a coin – would have worked very well in 2017 when the market went up nonstop. Relying on one’s “trading experience” can be misleading because unless you’ve been trading for 10-20 years, your experience is short. Your strategy might have succeeded so far not because of skill, but because the market’s environment and price pattern thusfar just so happens to fit the strategy you’ve employed.

지금까지의 재량적 거래 전략이 잘 먹혔다고 해도 운이 아니라 실력 때문에 효과가 있다는 것을 어떻게 알겠는가. 예를 들어, 어떤 전략이라도 - 심지어 동전을 던져도 - 시장이 쉬지 않고 상승했던 2017년에는 매우 잘 먹혔을 것이다. 자신의 '거래 경험'에 의존하는 것은 10~20년 동안 거래한 적이 없는 한 경험이 짧기 때문에 오해를 불러일으킬 수 있다. 당신의 전략은 기술 때문이 아니라, 지금까지 시장의 환경과 가격 패턴이 당신이 고용한 전략에 부합하기 때문에 지금까지 성공했을지도 모른다

That’s where quantitative backtesting comes in. Backtesting allows you to see how well your strategy works under different market environments, including market environments that you haven’t personally experienced yet. In a nutshell,(간단히 말해서 ) backtesting stress-tests(중좀적으로 태스트한다) your strategy.

그곳이  정량적 백테스트가  들어온 장소이다. 백테스팅이  아직 개인적으로 경험하지 못한 시장 환경을 비롯하여 다양한 시장 환경하에서 전략이 얼마나 잘 작동하는지 확인하게 되는 것이다 . 간단히 말해서, 백테스팅은  당신의 전략을 테스트한다.

You can easily backtest simple trading models in Excel. But if you want to backtest hundreds or thousands of trading strategies, Python allows you to do so more quickly at scale. Moreover, some complicated strategies (e.g. ones that trade hundreds of markets) are hard to backtest in Excel, but are easy to backtest in Python.

당신은 엑셀에서 간단한 거래 모델을 쉽게 되짚어 볼 수 있다. 그러나 만약 당신이 수백 혹은 수천 개의 거래 전략을 되짚어보고 싶다면, 파이썬은 당신이 규모에 따라 더 빨리 그렇게 할 수 있게 해준다. 게다가 일부 복잡한 전략(예: 수백 개의 시장을 거래하는 전략)은 Excel에서는 백테스트하기 어렵지만 Python에서는 백테스트하기 쉽다.

Optimizing trading models

거래 모델 최적화

 

Let’s face it(그것을 직시하다) – all traders optimize their strategy to a certain extent. While over-optimizing your strategy or trading model is bad, doing some optimizing is still a good idea. Python allows you to optimize your strategy and look for the best indicator parameters with for loops(파이션 언어로 반복문 처리문). While this optimization might take days in Excel, it’ll just take a few minutes with Python.

현실을 직시하자 – 모든 거래자들은 어느 정도 전략을 최적화한다. 전략이나 거래 모델을 과도하게 최적화하는 것은 나쁘지만, 일부 최적화를 하는 것은 여전히 좋은 생각이다. Python은 당신이 당신의 전략을 최적화하고 루프(처리문)를 위한 최고의 지표 파라미터를 찾을 수 있게 해준다. Excel에서는 이 최적화에 며칠이 걸릴 수 있지만 Python에서는 몇 분이면 충분할 겁니다.

Automatically executing trades

자동으로 거래 실행

And finally, you can use Python to automatically scan for trade setups and execute trades. This will help you save time on a day-to-day basis when it comes to market analysis, and also helps you save them when implementing trades. For example, I’m working on a trading model right now that goes through 2000 stocks and trades 50 stocks at a time. Can you imagine scanning through 2000 charts every day? It would be a nightmare! Moreover, executing each of the 50 trades every single day is very time consuming. It’s far more efficient to allow my program to automatically execute the trading strategy.

마지막으로 파이썬을 사용하여 자동으로 트레이드 설정을 검색하고 트레이드를 실행할 수 있다. 이는 시장 분석에 관한 한 일상적으로 시간을 절약하는 데 도움이 될 뿐만 아니라 거래를 이행할 때 시간을 절약하는 데도 도움이 될 것이다. 예를 들어, 나는 지금 2000개의 주식을 거쳐 한번에 50개의 주식을 거래하는 거래 모델을 만들고 있다. 당신은 매일 2000개의 차트를 스캔하는 것을 상상할 수 있는가? 악몽이 될 거야! 게다가 매일 50건의 거래를 실행하는 것은 매우 시간 소모적인 일이다. 내 프로그램이 자동으로 거래 전략을 실행할 수 있게 하는 것이 훨씬 더 효율적이다.

Thanks for reading this post! If you don’t know how to code(코드화하다), I highly recommend you learn this skill. Learning Python over the past year has helped my trading dramatically, and there are tons of free resources online or books you can read.

이 글을 읽어줘서 고마워! 코드를 할 줄 모르면 이 스킬을 배우도록 적극 추천한다. 지난 한 해 동안 파이썬을 배운 것이 내 거래에 큰 도움이 되었고, 온라인에서 읽을 수 있는 무료 자료나 책들이 엄청나게 많이 있다.