Thursday 8 March 2018

파이 외환


Python 알고리즘 트레이딩 라이브러리.


PyAlgoTrade는 백 트레이싱과 종이 트레이딩 및 라이브 트레이딩을 지원하는 Python Algorithmic Trading Library입니다. 거래 전략에 대한 아이디어가 있고이를 과거 데이터로 평가하고 그것이 어떻게 작동하는지보고 싶다고합시다. PyAlgoTrade는 최소한의 노력으로 그렇게 할 수 있습니다.


주요 특징.


완전히 문서화 됨. 이벤트 중심. Market, Limit, Stop 및 StopLimit 주문을 지원합니다. 야후! 지원 금융, Google Finance 및 NinjaTrader CSV 파일 CSV 형식으로 모든 유형의 시계열 데이터를 지원합니다 (예 : Quandl). Bitstamp를 통한 Bitcoin 거래 지원. 기술 지표 및 SMA, WMA, EMA, RSI, Bollinger Bands, Hurst 지수 및 기타 필터. 샤프 비율 및 인출 분석과 같은 성능 메트릭 실시간 트위터 이벤트 처리. 이벤트 프로파일 러. TA-Lib 통합.


수평 적으로 확장하기 쉽습니다. 즉, 전략을 백 테스트하기 위해 하나 이상의 컴퓨터를 사용합니다.


PyAlgoTrade는 무료 오픈 소스이며 Apache License, Version 2.0에 따라 라이센스가 부여됩니다.


Jon V.


빅 데이터. 시작. 거래.


빅 데이터. 시작. 거래.


파이썬으로 첫 번째 Forex 거래를하십시오.


업데이트 : Oanda의 새로운 API와 함께 작동하도록 코드를 업데이트했습니다. 이리 가져와.


브로커에 대해 이야기 할 시간, 프로그래밍 방식으로 거래를 배치하는 방법, 가장 중요하게 사기를 피하는 방법.


브로커는 플랫폼을 통해 시장에서 자산을 거래 (구매 또는 판매) 할 수있는 회사에 불과합니다. algotrading을 위해 아주 중요한 것은 :


중개인은 주문을하기 위해 API를 제공합니다. 준비 환경 및 실험을 실행하기위한 데모 계좌를 가질 수 있습니다. 스프레드는 가능한 한 작습니다.


우리의 경우, 우리는 고주파 매매를 조만간하지 않기 때문에 확산에 대해 정말로 신경 쓰지 않습니다.


브로커가 규제를 받았다고하더라도, 지난 몇 년 동안 브로커는 특정 조건으로 인해 접혀 있었습니다. 만약에 아주 조심하십시오.


브로커가 매우 이상한 나라에있는 것처럼 보이는 경우 브로커가 당신에게 몇 가지 미친 레버리지 (1 : 200과 같은)를 제공하면 인터넷상의 브로커에 대한 리뷰가 없습니다 (또는 대부분이 좋지 않습니다).


일어날 수있는 일은 돈을 벌기 시작하면 돈을 끌어낼 수 없다는 것입니다. 진지하게. 슈퍼 스트레스가 많은 상황.


그러나 계정을 개설하고 첫 프로그래밍 무역을하는 더 행복한 메모로 전환합시다. 와우!


나는 Oanda를 중개인 (나는 그들과 제휴 관계가 아님)으로 사용하고 있으며 꽤 괜찮은 API, github의 라이브러리 및 무료 데모 계정을 제공합니다.


데모 계정에 로그인 한 후 API 액세스 관리로 이동합니다. 거기에서 거래를하기 위해 우리 시스템에서 사용할 API 키를 찾을 수 있습니다. 이 키를 공유하지 않도록하십시오.


이 코드는 github에 있으며 다른 모든 게시물은 github에 있습니다. 설치하면 쉽게 실행할 수 있습니다.


업데이트 : Oanda는 v20이라는 새로운 (kickass) 실행 엔진을 출시했으며 새로운 (개선 된) API를 출시했습니다. 이 게시물은 새 API를 사용하기 위해 업데이트되었지만 어떤 이유로 든 이전 코드를 확인하려는 경우 여기에 있습니다. 운이 좋았어!


Oanda에 연결하려면 conf 파일이 필요합니다. 이 파일은 Oanda가 제공하는 스크립트를 사용하여 생성 할 수도 있고 직접 만들 수도 있습니다. 왜 그걸 원할거야? 우선 자격증 (그리고 돈)에 관해서, 나는 진행되고있는 모든 것을 알고 싶어합니다. 그리고 나는 단지 conf 파일을 읽기 위해 PyYAML을 설치하지 않아도된다. 두 가지 방법을 자유롭게 사용하십시오.


이제 놀랄 준비를하십시오. 이 코드는 간단합니다. 다음과 같이 API를 초기화합니다.


그리고 지금 주문하자 (EURUSD의 5000 단위 구매)


현재 가격을 확인하는 것은 쉽습니다!


슈퍼 쉽습니다. EURUSD가 무엇인지 또는 우리가 구매하는 단위 나 시장 질서가 무엇인지 걱정하지 마십시오. 지금은 랩톱에서 처음으로 거래를하고 거래를하기 위해 자체 API를 만들 계획입니다. 흥미로운 물건!


여기에서 Oanda의 설명서를 읽고 API로 할 수있는 다른 것을 확인하고 여기 Python 라이브러리를 찾을 수 있습니다. 예제의 예제는 Oanda의 github 페이지에서 볼 수 있습니다.


다음에 집에서 내 RaspberryPI를 실행하는 실제 LIVE algotrading 시스템에 연결합니다.


당신은 (거의) 최종 프로그램이 돌아가는 것을 볼 수있을 것이고 우리는 Forex와 전략에 대해 더 이야기 할 것입니다.


더 많은 의견이 있으면 jonromero에서 ping을하거나 뉴스 레터에 가입하십시오.


법적 근거. 이것은 실험 및 재미를위한 알트 레이팅 플랫폼을 구축하는 방법에 대한 엔지니어링 자습서입니다. 여기에있는 모든 제안은 재정 조언이 아닙니다. 거래 조언을 따랐거나이 시스템을 프로덕션 환경에 배치했기 때문에 돈을 잃어버린다면이 임의의 블로그 (및 / 또는 저)를 비난 할 수 없습니다. 자신의 책임하에 즐기십시오.


forex-python 0.3.2.


환율 및 환율 변환.


Forex Python은 무료 환율 및 환율 변환입니다.


모든 환율을 나열하십시오. 모든 curuncies에 대한 BitCoin 가격. 양을 BitCoins로 변환. 1999 년 이후의 어느 날에 대한 과거 환율을 확인하십시오. 하나의 통화에 대한 환율 (예 : USD to INR). 금액을 한 통화에서 다른 통화로 변환합니다 ( 'USD 10 $'from INR). 통화 기호입니다. 통화 이름.


통화 소스 :


Fixer. io는 European Central Bank에서 발행 한 현재 및 과거 환율에 대한 무료 API입니다. 요금은 매일 오후 3시 (CET)로 업데이트됩니다.


BitCoin 가격 자료 :


Bitcoin 가격은 1 분마다 계산됩니다. 자세한 내용은 [CoinDesk API] (coindesk / api /)를 참조하십시오.


설치.


파이썬 패키지를 사용하여 설치하십시오.


사용 예제 :


"USD"에 대한 모든 최신 환율 목록


USD에서 INR로 전환율을 받으십시오.


USD에서 INR로 금액을 변환하십시오.


강제로 Decimal을 사용합니다.


Decimal의 사용을 탐지합니다.


최신 Bitcoin 가격을 받으십시오.


최신 환율을 기준으로 금액을 Bitcoins로 변환합니다.


통화 코드를 사용하여 통화 기호를 가져옵니다.


의견을 보내 주시고 지원을 부탁드립니다. 버그를 신고하려면 github 티켓을 발행하십시오. 새로운 기능이 필요하십니까? 여기에 문의하십시오.


QuantStart.


빠르게 성장하는 소매점 퀀텀 트레이더 커뮤니티를 지원하는 Quantcademy 개인 회원 포털에 가입하십시오. 당신은 당신의 가장 중요한 퀀트 트레이딩 질문에 대답 할 준비가되어있는 지식이 풍부하고 마음이 맞는 퀀트 트레이더 그룹을 찾을 수 있습니다.


퀀트 트레이딩에 관한 나의 eBook을 확인해보십시오. 여기서 저는 파이썬 툴로 수익성 높은 체계적인 트레이딩 전략을 만드는 법을 가르쳐드립니다.


Python 및 R을 사용하여 시계열 분석, 기계 학습 및 베이지안 통계를 사용하는 고급 거래 전략에 관한 새로운 전자 책을 살펴보십시오.


2015 년 1 월 21 일 Michael Halls-Moore 작성


나는 이전에 QuantStart : 2014 In Review 기사에서 2015 년에 자동화 된 외환 거래에 관한 글을 쓸 것이라고 언급했습니다.


나 자신이 보통 주식 및 선물 시장에 대한 연구를 수행했다는 것을 감안할 때 일기 스타일로 외환 시장에 진입 한 나의 경험에 대해 쓰는 것이 재미있을 것이라고 생각했다. 각 "일기 항목"은 이전에 작성한 모든 항목을 기반으로하지만 실제로 자체적으로 포함되어야합니다.


일기장의 첫 번째 항목에서는 연습 및 라이브 설정에서 자동으로 거래를 실행할 수있는 기본 다중 스레드 이벤트 기반 거래 엔진을 만드는 방법뿐만 아니라 OANDA와 함께 새로운 실제 중개 계좌를 설정하는 방법을 설명합니다.


작년에 우리는 주식 및 ETF를 중심으로 이벤트 중심의 백 테스터를 보는데 많은 시간을 보냈습니다. 제가 아래에 제시 한 것은 외환을 대상으로하며 종이 거래 또는 라이브 거래에 사용될 수 있습니다.


우분투 14.04에 대한 다음 지침을 모두 작성했지만 Anaconda와 같은 Python 배포판을 사용하여 Windows 또는 Mac OS X로 쉽게 변환해야합니다. Python 거래 엔진에 사용되는 유일한 추가 라이브러리는 OANDA API에 대한 HTTP 통신에 필요한 요청 라이브러리입니다.


이것은 외환 거래에 관한 직접적인 첫 번째 게시물이기 때문에 아래에 제시된 코드는 실제 거래 환경에 직접 적용될 수 있으므로 다음과 같은 면책 조항을 제시하고자합니다.


면책 조항 : 마진에 대한 외환 거래는 높은 수준의 위험을 수반하며 모든 투자자에게 적합하지 않을 수 있습니다. 과거 성과가 미래의 성과를 나타내는 것은 아닙니다. 높은 레버리지는 당신뿐만 아니라 당신을 도울 수 있습니다. 외환에 투자하기로 결정하기 전에 투자 목표, 경험 수준 및 위험 식욕을 신중하게 고려해야합니다. 초기 투자의 일부 또는 전부를 상실 할 가능성이 있기 때문에 잃을 수없는 돈을 투자해서는 안됩니다. 외환 거래와 관련된 모든 위험에 대해 알고 있어야하며, 의심스러운 점이 있으면 독립적 인 재정 고문에게 조언을 구해야합니다.


이 소프트웨어는 "있는 그대로"제공되며 상품성 및 특정 목적에의 적합성에 대한 묵시적인 보증을 포함하여 (단, 이에 한하지 않음) 명시 적이든 묵시적이든 어떠한 보증도하지 않습니다. 섭외 자나 기고자는 직접, 간접, 부수적, 특별, 모범적 또는 파생적 손해 (대체 제품 또는 서비스의 조달, 사용, 데이터 또는 이익의 손실을 포함하되 이에 국한되지는 않음)에 대해 책임지지 않습니다. 비즈니스 중단) 및 계약 이론, 엄격한 책임 또는 불법 행위 (과실 또는 태만 포함)에 관계없이 그러한 소프트웨어의 사용으로 인해 발생하는 모든 손해에 대한 책임을지지 않습니다.


OANDA로 계정 설정.


가장 먼저 떠오르는 질문은 "왜 OANDA를 선택해야합니까?"입니다. 간단히 말해, API가있는 외환 중개인을 위해 인터넷 검색을 한 후 OANDA는 최근에 거의 모든 언어에서 쉽게 쉽게 전달할 수있는 적절한 REST API를 발표했습니다. 개발자 API 문서를 읽은 후에는 적어도 연습 계정으로 시도해보기로했습니다.


명확히하기 - OANDA와의 기존 또는 기존 관계가 없으며 이전에 기금에서 근무하는 동안 연습 API 및 일부 간단한 사용법 (시장 데이터 다운로드 용)을 사용하여 제한된 경험을 토대로이 권장 사항 만 제공합니다. 아무도 비슷한 현대의 API를 가지고있는 다른 외환 중개인을 만나게되면 나는 그들에게도보기 좋게 기뻐할 것입니다.


API를 사용하기 전에 연습 계정에 가입해야합니다. 이렇게하려면 가입 링크로 이동하십시오. 다음 화면이 표시됩니다.


그런 다음 로그인 자격 증명으로 로그인 할 수 있습니다. 로그인 화면에서 'fxTradePractice'탭을 선택하십시오.


일단 로그인하면 귀하의 계정 ID를 기록해야합니다. '기본'옆에 검은 색 '내 자금'헤더가 있습니다. 내 것은 7 자리 숫자입니다. 또한 개인 API 토큰을 생성해야합니다. 이렇게하려면 왼쪽 하단의 '기타 작업'탭 아래에서 'API 액세스 관리'를 클릭하십시오.


이 단계에서 API 토큰을 생성 할 수 있습니다. 나중에 사용할 키가 필요하므로 잘 기록해 두십시오.


이제는 FXTrade Practice 응용 프로그램을 시작하여 실행 된 주문과 우리의 (paper!) profit & amp; amp; amp; 손실.


우분투 시스템을 사용하고 있다면 약간 다른 버전의 자바를 설치해야합니다. 특히 Java 8의 Oracle 버전입니다. 이렇게하지 않으면 연습 시뮬레이터가 브라우저에서로드되지 않습니다. 내 시스템에서 다음 명령을 실행했습니다.


이제 연습 거래 환경을 시작할 수 있습니다. OANDA 대시 보드로 돌아가 녹색으로 강조 표시된 "Launch FXTrade Practice"링크를 클릭하십시오. 실행 여부를 묻는 Java 대화 상자가 나타납니다. "Run"을 클릭하면 fxTrade Practice 도구가로드됩니다. 광산은 왼쪽에 따옴표가있는 EUR / USD 15 분 캔들 차트 기본값 :


OANDA fxTrade Practice 화면.


이 시점에서 우리는 OANDA API에 대한 자동화 된 외환 거래 시스템을 설계하고 코딩 할 준비가되었습니다.


무역 아키텍처 개요.


작년에 창출 한 주식 및 ETF에 대한 이벤트 중심의 백 테스터 시리즈를 따라 간다면 이러한 이벤트 중심의 트레이딩 시스템이 어떻게 작동하는지 알 수 있습니다. 이벤트 주도형 소프트웨어를 처음 접하는 사람들에게는 기사의 내용을 읽으면서 작업 방법에 대한 통찰력을 얻으시기 바랍니다.


본질적으로 전체 프로그램은 거래 시스템이 종료 될 때 종료되는 반복 실행 (infinte while while) 루프에서 실행됩니다. 프로그램의 중앙 통신 메커니즘은 이벤트가 포함 된 대기열을 통해 제공됩니다.


새 이벤트를 확인하기 위해 대기열에 계속 질의됩니다. 이벤트가 큐의 맨 위에서 제거되면 프로그램의 해당 구성 요소에 의해 처리되어야합니다. 따라서 시장 데이터 피드는 새로운 시장 가격이 도착하면 대기열에 배치되는 TickEvent를 만들 수 있습니다. 신호 생성 전략 오브젝트는 중개로 보내지는 OrderEvent를 작성할 수 있습니다.


그러한 시스템의 유용성은 프로그램에서 올바른 구성 요소에 의해 항상 올바르게 처리 될 수 있기 때문에 대기열에 어떤 순서 또는 유형의 이벤트가 배치되는지는 중요하지 않습니다.


또한 프로그램의 다른 부분은 별도의 스레드에서 실행될 수 있습니다. 즉, 다른 프로세스를 처리하기 전에 특정 구성 요소를 기다리지 않아도됩니다. 이는 시장 데이터 피드 핸들러와 전략 신호 생성기가 성능 특성이 크게 다른 알고리즘 거래 상황에서 매우 유용합니다.


주요 거래 루프는 다음 파이썬 의사 코드에 의해 제공됩니다 :


위에서 언급했듯이이 코드는 무한 루프에서 실행됩니다. 먼저 대기열을 폴링하여 새 이벤트를 검색합니다. 대기열이 비어 있으면 "하트 비트"라고하는 짧은 수면 시간 후에 루프가 다시 시작됩니다. 이벤트가 발견되면 해당 유형이 평가 된 다음 관련 모듈 (전략 또는 실행 핸들러)이 호출되어 이벤트를 처리하고 대기열로 다시 이동하는 새 모듈을 생성 할 수 있습니다.


거래 시스템을 위해 만들 기본 구성 요소는 다음과 같습니다.


스트리밍 가격 처리기 (Streaming Price Handler) - OANDAs 서버에 장시간 연결된 연결을 유지하고 관심있는 모든 계측기에 대한 연결을 통해 틱 데이터 (예 : 입찰 / 요청)를 전송합니다. 전략 신호 생성기 - 이벤트를 생성하고 실행 핸들러에 의해 실행될 거래 주문을 생성하는 데 사용합니다. Execution Handler - 주문 이벤트 세트를 가져 와서 OANDA로 맹목적으로 실행합니다. 이벤트 - 이 객체는 이벤트 대기열에서 전달되는 "메시지"를 구성합니다. 이 구현에는 TickEvent와 OrderEvent 만 필요합니다. 주요 진입 점 - 주요 진입 점에는 메시지 대기열을 지속적으로 폴링하고 올바른 구성 요소에 메시지를 발송하는 "거래"루프가 포함됩니다. 이것은 종종 "이벤트 루프"또는 "이벤트 처리기"라고합니다.


이제 코드의 구현에 대해 자세히 설명 할 것입니다. 이 기사의 맨 아래에는 모든 소스 코드 파일의 전체 목록이 있습니다. OANDA에서 계정 ID와 인증 토큰을 채웠다 고 가정하면 같은 디렉토리에 배치하고 python trading. py를 실행하면 주문 생성이 시작됩니다.


파이썬 구현.


결국 암호 또는 인증 키를 코드베이스에 저장하는 것은 좋지 않습니다. 누가 결국 프로젝트에 액세스 할 수 있는지 예측할 수 없기 때문입니다. 프로덕션 시스템에서는 이러한 자격 증명을 환경 변수로 시스템에 저장 한 다음 코드를 다시 배포 할 때마다 이러한 "envvars"를 쿼리합니다. 이렇게하면 암호 및 인증 토큰이 버전 제어 시스템에 저장되지 않습니다.


그러나 우리는 "장난감"거래 시스템을 구축하는 데 전적으로 관심이 있으며이 기사의 제작 세부 사항과 관련이 없으므로 대신이 인증 토큰을 설정 파일로 분리합니다.


다음 settings. py 구성 파일에는 OANDA 가격 스트리밍 API 및 거래 API에 대한 API 끝점을 저장하는 ENVIRONMENTS라는 사전이 있습니다. 각 하위 사전에는 실제, 실습 및 샌드 박스라는 세 개의 개별 API 끝점이 포함되어 있습니다.


샌드 박스 API는 코드를 테스트하고 오류나 버그가 없는지 확인하기위한 것입니다. 실제 또는 실제 API의 가동 시간 보장이 없습니다. 실무 API는 본질적으로 종이 교역 기능을 제공합니다. 즉, 시뮬레이션 된 연습 계정에 실제 API의 모든 기능을 제공합니다. 진짜 API는 바로 그것입니다 - 라이브 거래입니다! 코드에서 해당 끝점을 사용하면 라이브 계정 잔액과 교환됩니다. 엄청나게 조심하십시오!


중요 : Practice API와의 거래시 중요한 거래 비용, 즉 시장 영향의 비용은 고려하지 않는다는 것을 기억하십시오. 실제로 거래가 환경에 배치되지 않으므로 실적을 현실적으로 평가하고자하는 경우 시장 영향 모델을 사용하여이 비용을 다른 방법으로 다른 방법으로 계산해야합니다.


다음에서는 DOMAIN 설정에 따라 연습 계정을 사용합니다. 스트리밍 및 거래 API 구성 요소 각각에 대해 두 개의 도메인 사전이 필요합니다. 마지막으로 ACCESS_TOKEN 및 ACCOUNT_ID가 있습니다. 나는 OANDA 계정 페이지에서 액세스 할 수있는 자신 만의 ID를 사용해야하므로 더미 ID로 아래 두 가지를 채웠습니다.


다음 단계는 모든 개별 구성 요소가 통신하는 데 큐가 사용할 이벤트를 정의하는 것입니다. TickEvent와 OrderEvent라는 두 가지가 필요합니다. 첫 번째는 (최고) bid / ask 및 거래 시간과 같은 계측기 시장 데이터에 대한 정보를 저장합니다. 두 번째는 실행 핸들러에 명령을 전송하는 데 사용되며 따라서 계기, 거래 단위 수, 주문 유형 ( "시장"또는 "제한") 및 "측면"(즉 "구매"및 "판매" ).


이벤트를 미래 보장하려면 Event라는 기본 클래스를 만들고 모든 이벤트에 대해 상속받습니다. 이 코드는 아래 events. py에서 제공됩니다.


우리가 창조 할 다음 클래스는 거래 전략을 처리 할 것입니다. 이 데모에서는 단순히 모든 시장 진드기를 받아들이는 무의미한 전략을 만들고 5th tick마다 무작위로 EUR / USD 10,000 단위를 구매하거나 판매합니다.


분명히 이것은 어리석은 "전략"입니다! 그러나 코드 작성 및 이해가 쉽기 때문에 테스트 목적으로는 환상적입니다. 앞으로의 일기 항목에서 우리는 이것을 (희망을 가지고) 이익을 얻는 훨씬 더 흥미로운 것으로 대체 할 것입니다!


strategy. py 파일은 아래에서 찾을 수 있습니다. 그것을 통해 작동하고 무슨 일이 일어나고 있는지 보자. 먼저 events. py에서 무작위 라이브러리와 OrderEvent 객체를 가져옵니다. 임의의 구매 또는 판매 주문을 선택하려면 임의의 lib가 필요합니다. OrderEvent는 전략 객체가 이벤트 큐에 명령을 보내는 방식이므로 나중에 이벤트가 실행 핸들러에 의해 실행됩니다.


TestRandomStrategy 클래스는 계측기 (이 경우 EUR / USD), 단위 수 및 이벤트 대기열을 매개 변수 집합으로 가져옵니다. 그런 다음 얼마나 많은 TickEvent 인스턴스를 보았는지 알려주는 틱 카운터를 만듭니다.


대부분의 작업은 calculate_signals 메서드에서 발생합니다. 이 메서드는 단순히 이벤트를 취해 TickEvent인지 여부를 확인하고 그렇지 않으면 무시 카운터를 증가시킵니다. 그런 다음 계산 수가 5로 나눌 수 있는지 확인한 다음 시장 질서에 따라 지정된 수의 단위를 무작위로 구매하거나 판매합니다. 확실히 세계 최고의 거래 전략은 아니지만, OANDA 중개 API 테스트 목적에 적합 할 것입니다!


다음 구성 요소는 실행 핸들러입니다. 이 클래스는 OrderEvent 인스턴스를 기반으로 브로커 (이 경우 OANDA)에 "멍청한"방식으로 요청하는 작업을 담당합니다. 즉, 위험 관리 또는 포트폴리오 구축 오버레이가 없습니다. 실행 핸들러는 주어진 순서를 단순히 실행합니다.


"도메인"(연습, 실제 또는 샌드 박스), 액세스 토큰 및 계정 ID를 포함하여 모든 인증 정보를 Execution 클래스에 전달해야합니다. 그런 다음 라이브러리에 내장 된 Python 라이브러리 인 httplib와의 보안 연결을 만듭니다.


대부분의 작업은 execute_order에서 발생합니다. 이 메소드는 이벤트를 매개 변수로 요구합니다. 그런 다음 머리말과 매개 변수 인 두 개의 사전을 구성합니다. 그런 다음이 사전은 OANDAs API에 HTTP POST 요청으로 올바르게 인코딩됩니다 (urllib, 다른 Python 라이브러리에 의해 부분적으로 인코딩 됨).


우리는 인증 정보를 포함하는 Content-Type 및 Authorization 헤더 매개 변수를 전달합니다. 또한 계측기 (EUR / USD), 단위, 주문 유형 및 측면 (구매 / 판매)을 포함하는 매개 변수를 인코딩합니다. 마지막으로 요청을하고 응답을 저장합니다.


거래 시스템의 가장 복잡한 구성 요소는 OANDA의 시장 가격 업데이트를 처리하는 StreamingForexPrices 개체입니다. 두 가지 방법이 있습니다 : connect_to_stream 및 stream_to_queue.


첫 번째 방법은 Python 요청 라이브러리를 사용하여 적절한 헤더와 매개 변수를 사용하여 스트리밍 소켓에 연결합니다. 매개 변수에는 계정 ID 및 업데이트를 수신해야하는 필수 장비 목록이 포함됩니다 (이 경우 EUR / USD 만 해당). 다음 행에 유의하십시오.


이렇게하면 연결이 스트리밍되어 장기 실행 방식으로 열리게됩니다.


두 번째 메소드 인 stream_to_queue는 실제로 스트림에 연결을 시도합니다. 응답이 성공적이지 않으면 (즉, 응답 코드가 HTTP 200이 아닌 경우), 우리는 단순히 리턴하고 종료합니다. 성공하면 파이썬 사전에 반환 된 JSON 패킷을로드하려고 시도합니다. 마지막으로, 파이썬 사전을 악기, bid / ask 및 timestamp로 변환하여 이벤트 대기열로 전송되는 TickEvent로 변환합니다.


이제 우리는 모든 주요 구성 요소를 갖추고 있습니다. 마지막 단계는 지금까지 작성한 모든 것을 "기본"프로그램으로 마무리하는 것입니다. 이 파일의 목표는 trading. py라고하는 두 개의 개별 스레드를 작성하는 것입니다. 이 중 하나는 가격 처리기를 실행하고 다른 하나는 거래 처리기를 실행합니다.


왜 두 개의 별도 스레드가 필요합니까? 간단히 말하자면, 우리는 두 개의 "분리 된"코드를 실행하고 있으며 두 코드는 계속해서 실행 중입니다. 비 스레드 프로그램을 만들려면 가격 업데이트에 사용되는 스트리밍 소켓이 주 코드 경로로 결코 "릴리스"되지 않으므로 실제로 거래를 수행하지 않습니다. 비슷하게, 우리가 무역 루프를 실행한다면 (아래 참조) 실제로는 가격 흐름 소켓으로 흐름 경로를 반환하지 않습니다. 따라서 각 구성 요소마다 하나씩 여러 개의 스레드가 필요하므로 서로 독립적으로 수행 할 수 있습니다. 그들은 둘 다 이벤트 대기열을 통해 서로 통신합니다.


조금 더 자세히 살펴 보도록하겠습니다. 우리는 다음과 같은 두 개의 개별 스레드를 만듭니다.


함수 또는 메소드 이름을 대상 키워드 인수에 전달한 다음 iterable (예 : 목록 또는 튜플)을 args 키워드 인수에 전달한 다음 인수를 실제 메소드 / 함수에 전달합니다.


마지막으로 두 줄을 다음 줄로 시작합니다.


따라서 우리는 효과적으로 이벤트 큐를 통해 통신하는 두 개의 무한 반복 루핑 코드 세그먼트를 독립적으로 실행할 수 있습니다. 파이썬 스레딩 라이브러리는 파이썬의 CPython 구현과 GIL (Global Interpreter Lock)으로 인해 진정한 멀티 코어 멀티 스레드 환경을 생성하지 않습니다. 파이썬에서 멀티 스레딩에 대한 자세한 내용을 보려면이 기사를 살펴보십시오.


나머지 코드를 자세히 살펴 보겠습니다. 먼저 우리는 Queue, threading, time을 포함하여 필요한 모든 라이브러리를 가져옵니다. 위의 코드 파일을 모두 가져옵니다. 나는 개인적으로 장고 (Django) 작업에서 얻은 습관 인 구성 설정을 대문자로 만드는 것을 선호합니다!


그 후에 우리는 위의 파이썬 - 의사 코드에서 설명한 무역 기능을 정의합니다. 무한 while 루프는 이벤트 대기열에서 계속 폴링하고 루프가 비어있는 경우 루프 만 건너 뜁니다 (True : 동안)가 수행됩니다. 이벤트가 발견되면 TickEvent 또는 OrderEvent이며 적절한 구성 요소가 호출되어 수행됩니다. 이 경우 전략 또는 실행 핸들러 중 하나입니다. 그런 다음 루프는 "하트 비트"초 (이 경우 0.5 초) 동안 잠자기 상태로 유지되고 계속됩니다.


마지막으로 __main__ 함수에서 코드의 주요 진입 점을 정의합니다. 아래에 잘 설명되어 있지만 여기서 요약 할 것입니다. 본질적으로 이벤트 대기열을 인스턴스화하고 계기 / 장치를 정의합니다. 그런 다음 StreamingForexPrices 가격 스트리밍 클래스를 만든 다음 실행 실행 핸들러를 만듭니다. 둘 다 계정을 만들 때 OANDA가 제공 한 필수 인증 세부 사항을받습니다.


그런 다음 TestRandomStrategy 인스턴스를 만듭니다. 마지막으로 두 개의 스레드를 정의한 다음 시작합니다.


코드를 실행하려면 모든 파일을 같은 디렉토리에 저장하고 터미널에서 다음을 호출하면됩니다.


이 단계에서 코드를 중지하려면 "Ctrl-Z"또는 이와 동등한 방법을 통해 Python 프로세스를 강제 종료해야합니다. sys. exit () 코드를 안전하게 처리하기 위해 필요한 추가 스레드를 추가하지 않았습니다. Ubuntu / Linux 시스템에서 코드를 중지하는 방법은 다음과 같이 입력하는 것입니다.


그런 다음이 출력 (프로세스 번호)을 다음과 같이 전달하십시오.


여기서 PROCESS_ID는 pgrep의 출력으로 대체되어야합니다. 이것은 특히 좋은 습관이 아님을주의하십시오!


최신 기사에서 우분투의 프로세스 감독을 사용하여 거래 시스템을 연중 무휴로 운영하는보다 정교한 중지 / 시작 메커니즘을 만들 것입니다.


위의 코드에 대한 EUR / USD의 주요 거래 시간에 상대적인 시간에 따라 30 초 정도 경과 한 출력은 다음과 같습니다.


처음 다섯 줄은 OANDA에서 반환 한 JSON 틱 데이터를 입찰 가격과 함께 표시합니다. 이어서 실행 명령을 볼 수 있습니다! OANDA로부터 반환 된 JSON 응답뿐만 아니라 10,000 단위의 EUR / USD 및 구매 한 가격에 대한 구매 거래가 시작되었음을 확인했습니다.


이 명령은 "Ctrl-Z"명령 또는 유사한 명령으로 프로그램을 종료 할 때까지 계속 실행됩니다.


무엇 향후 계획?


최신 기사에서 우리는 다음을 포함하여 많은 개선이 필요하게 될 것입니다 :


실제 전략 - 수익성있는 신호를 생성하는 적절한 forex 전략. 생산 기반 시설 - 원격 서버 구현 및 중지 / 시작 기능을 갖춘 24/7 모니터링 거래 시스템. 포트폴리오 및 위험 관리 - 전략에서 제안한 모든 주문에 대한 포트폴리오 및 위험 오버레이. 여러 전략 - 위험 관리 오버레이에 통합되는 전략 포트폴리오를 구성합니다.


주식 이벤트 기반의 백 테스터와 마찬가지로 forex 백 테스트 모듈을 생성해야합니다. 이를 통해 우리는 신속한 연구를 수행하고 전략을보다 쉽게 ​​배포 할 수 있습니다.


settings. py (ACCOUNT_ID 및 ACCESS_TOKEN을 변경해야 함) :


양적 거래 시작하기?


QuantStart 목록을 구독해야하는 3 가지 이유 :


1. 퀀트 트레이딩 레슨.


계량 거래를 시작하는 데 도움이되는 힌트와 팁으로 가득한 무료 10 일간 코스에 즉시 액세스 할 수 있습니다!


2. 모든 최신 내용.


매주 나는 퀀트 스타트에서 모든 활동의 포장을 보내드릴 것입니다. 그래서 당신은 결코 다시 글을 놓치지 않을 것입니다.


현실감 넘치는 퀀 트레이딩 팁.

No comments:

Post a Comment