소개
aiomql
패키지는 MetaTrader5 Python 통합 라이브러리(metatrader5
)의 기능을 향상하고 확장하는 고급 알고리즘 거래 프레임워크입니다. 그 목적은 맞춤형 거래 봇 구축 프로세스를 단순화하는 동시에 특히 알고리즘 거래를 위한 풍부한 도구 및 추상화 세트를 제공하는 것입니다. aiomql
유연성과 적응성을 염두에 두고 설계된 이 프레임워크는 MetaTrader5 Python 통합에 대한 경량 비동기 대안을 찾는 사용자부터 복잡한 다중 전략 거래 로봇을 구축하는 개발자에 이르기까지 다양한 사용자의 요구 사항을 충족할 수 있습니다.
수요
이 튜토리얼에서는 속도, 효율성 및 디자인 측면에서 이전 버전에 비해 크게 향상된 aiomql
프레임워크의 네 번째 버전을 소개합니다. 이번 릴리스의 주요 특징은 강력한 백테스팅 기능이 포함되어 있어 사용자가 실시간으로 배포하기 전에 과거 데이터를 사용하여 거래 전략을 테스트할 수 있다는 것입니다.
aiomql
이전 버전의 프레임워크에 익숙하면 이해도가 높아질 수 있지만 필수 조건은 아닙니다. 본 튜토리얼은 프레임워크를 사용해 본 적이 없는 초보자도 쉽게 이해할 수 있도록 구성되었습니다. 그러나 다루는 개념을 완전히 이해하고 적용하려면 Python에 대한 실무 지식과 알고리즘 거래에 대한 기본적인 이해가 필요합니다.
이 문서는 단계별 튜토리얼이 아닌 프레임워크에 대한 소개로 주로 작성되었지만 Python 3.11이 필요한 코드 조각이 포함되어 있습니다. NumPy에서 호환성 문제가 발생하면 다음 명령을 사용하여 지원되는 버전을 설치하여 문제를 해결할 수 있습니다.
<code class="language-bash">pip install aiomql pip uninstall numpy pip install 'numpy<v2></v2></code>
aiomql
프레임워크는 세 가지 주요 하위 패키지(core, contrib 및 lib)와 프레임워크 전체에서 사용되는 유틸리티 기능을 제공하는 최상위 모듈 utils.py
으로 나뉩니다. 편의를 위해 모든 클래스, 함수, 상수 및 기타 구성 요소는 최상위 수준에서 직접 액세스할 수 있습니다.
앞서 언급했듯이 aiomql
라이브러리는 metatrader5
패키지의 비동기 버전입니다. 이 기능은 프레임워크의 기본 구성 요소인 MetaTrader 클래스를 통해 구현됩니다. 이 클래스는 metatrader5
라이브러리의 기능을 복제하여 해당 함수, 상수 및 특수 유형을 메서드 및 속성으로 제공합니다.
metatrader5
패키지의 함수는 원래 이름을 유지하면서 MetaTrader 클래스의 비동기 인스턴스 메소드로 액세스됩니다. 이 디자인은 비동기 프로그래밍의 이점을 활용하면서 원본 라이브러리에 익숙한 사용자를 위한 원활한 통합을 보장합니다.
MetaTrader 클래스는 비동기 컨텍스트 관리자로 설계되어 MetaTrader 터미널 관리를 단순화합니다. 컨텍스트를 입력한 후 자동으로 터미널을 초기화하고 로그인 작업을 수행합니다. 종료 시 오류가 발생하더라도 리소스를 적절하게 정리하고 연결을 끊는 것을 보장합니다. 이 구조는 수명 주기 관리의 간결하고 효율적인 방법을 제공하므로 특히 비동기식 워크플로에 적합합니다.
이러한 함수의 비동기 버전은 계속 액세스할 수 있지만 비공개 메서드로 처리될 수 있음을 나타내기 위해 밑줄(_)이 앞에 붙습니다.
MetaBackTester는 특히 백테스팅에 사용되는 MetaTrader의 하위 클래스입니다. 초기화 중에 제공되거나 구성에서 검색될 수 있는 BackTestEngine 인스턴스를 사용합니다. config.mode
가 "백테스트"로 설정되면 이 클래스는 터미널 연결을 사용하는 애플리케이션에서 MetaTrader를 자동으로 대체하여 백테스트 기능의 원활한 통합을 보장합니다.
Base
및 _Base
클래스는 프레임워크의 다른 클래스를 형성하는 기본 구성 요소로, 시스템이 실시간 거래에 있는지 여부에 따라 데이터 검증, 직렬화 및 MetaTrader 또는 MetaBackTester에 대한 원활한 액세스와 같은 기본 유틸리티를 제공합니다. 또는 백테스팅 모드 예. 이러한 클래스는 직접적으로 사용되는 경우는 거의 없지만 보다 전문화된 기능을 위한 백본 역할을 하여 전체 시스템의 안정성과 신뢰성을 보장합니다.
Base 클래스는 유효성 검사 및 직렬화에 중점을 둔 강력한 데이터 처리 기능을 제공합니다. 인스턴스화 중에 클래스 본문에 명시적으로 주석이 추가되거나 상위 클래스에서 상속된 속성에만 값이 할당될 수 있으며 이러한 값은 정의된 유형을 엄격하게 준수해야 하므로 구조화되고 유형이 안전한 데이터 관리가 보장됩니다.
exclude
(세트): 속성에 액세스하거나 객체의 사전 표현을 생성할 때 제외할 속성 이름 집합입니다. include
(세트): 명시적으로 포함될 속성 이름 모음입니다. 두 컬렉션이 모두 제공되는 경우 이 컬렉션은 exclude
컬렉션을 재정의합니다. dict
: exclude
및 include
컬렉션에 지정된 필터를 적용하여 모든 속성을 사전으로 반환하는 속성입니다. set_attributes(**kwargs)
: 인스턴스 속성을 동적으로 설정하는 방법입니다. 입력의 유효성을 검사하고 올바른 유형인지 확인합니다. get_dict(exclude: set = None, include: set = None)
: 인스턴스의 속성을 사전으로 반환하는 메서드로, exclude
및 include
필터를 지정할 수 있습니다. 두 매개변수가 모두 제공되면 include
매개변수가 exclude
매개변수보다 우선합니다. 이 클래스는 특히 터미널 연결을 위한 추가 속성과 기능을 갖춘 Base
의 하위 클래스입니다.
config
: 구성 인스턴스를 나타냅니다. 이 속성에는 클래스를 실행하는 데 필요한 모든 필수 구성 설정이 포함되어 있습니다. mt5
(MetaTrader | MetaBackTester): config
객체의 mode
속성에 따라 결정되는 MetaTrader 또는 MetaBackTester 인스턴스를 제공합니다. 인스턴스 유형은 시스템이 실시간 거래 모드(MetaTrader)인지 백테스팅 모드(MetaBackTester)인지에 따라 다릅니다. MetaTrader5 라이브러리는 많은 상수를 특수한 열거형으로 구성하여 개발자의 명확성과 기능을 향상시킵니다. 이러한 열거형은 다양한 거래 작업, 주문 유형, 기간 등을 나타내며 관련 상수를 직관적인 범주로 그룹화하여 사용을 단순화합니다. 각 열거형은 속성을 제공하며, 해당하는 경우 값 변환, 반전 또는 파생과 같은 기능을 활성화하는 추가 메서드 또는 속성을 제공합니다. 이 조직은 오류를 줄이고, 코드 가독성을 향상시키며, 특히 복잡한 거래 애플리케이션에서 상수를 더 쉽게 관리할 수 있도록 합니다.
TradeAction
, OrderFilling
, TimeFrame
과 같은 열거형은 상수를 정수 값으로 캡슐화하는 동시에 사용성 향상을 위해 Python 스타일 문자열 표현을 제공합니다. 일부 열거형(예: TimeFrame
)에는 초를 미리 정의된 간격으로 변환하거나 가능한 모든 값에 액세스하기 위한 고급 방법이 포함되어 있습니다. MetaTrader5 라이브러리는 이러한 상수를 체계적으로 구성함으로써 보다 효율적이고 개발자 친화적인 경험을 보장하고 거래 운영 및 플랫폼 데이터와의 상호 작용을 단순화합니다.
모델 모듈은 MetaTrader5 라이브러리의 구조를 기반으로 구축된 잘 구성된 데이터 처리 클래스 세트를 제공합니다. 모든 클래스는 데이터 유효성 검사, 직렬화 및 필터링과 같은 기능을 추가하여 사용을 단순화하는 Base 클래스에서 상속됩니다. 이러한 클래스는 OrderSendResult
, SymbolInfo
, TradeRequest
등 다양한 거래 관련 엔터티를 나타내므로 개발자가 MetaTrader5의 거래 환경과 효율적으로 상호 작용할 수 있습니다.
각 클래스는 해당 거래 엔터티와 관련된 특정 속성과 특성을 캡슐화하여 강력하고 구조화된 데이터 관리를 보장합니다. 예를 들어 SymbolInfo
은 금융 상품에 대한 자세한 정보를 제공하고 TradeRequest
는 거래 작업의 생성 및 제출을 허용합니다. 이 모듈식 설계는 가독성을 높이고 복잡한 거래 작업 흐름을 단순화하며 애플리케이션에서 MetaTrader5를 활용하는 개발자의 데이터 일관성과 사용 용이성을 보장합니다.
TaskQueue 클래스는 동시 실행을 위해 asyncio.PriorityQueue
인스턴스를 사용하여 봇이나 백테스터의 백그라운드 작업을 효율적으로 관리합니다. 백그라운드에서 지속적으로 실행되므로 이를 사용하여 거래 후 실행 데이터를 기록하는 Trader 클래스와 같은 다른 구성 요소와 원활하게 통합할 수 있습니다. 작업은 add
메서드를 통해 대기열에 추가되지만 먼저 매개변수, 우선순위, 완료 요구 사항과 같은 작업 메타데이터가 포함된 QueueItem
에 래핑되어야 합니다.
구성 가능한 작업자 수, 시간 초과 설정 및 작업 우선 순위를 통해 TaskQueue는 강력한 작업 관리 및 오류 처리를 보장합니다. 제한적 또는 무한 실행 모드를 지원하며 우선순위에 따라 종료하기 전에 남은 작업을 정상적으로 정리할 수 있습니다. 이 디자인은 백그라운드 작업을 비동기적으로 오프로드하고 관리하여 워크플로를 향상시켜 복잡한 거래 또는 테스트 환경의 원활하고 안정적인 기능을 보장합니다.
Account
클래스는 브로커 계정 세부 정보를 관리하는 데 사용되는 싱글톤으로, 애플리케이션 수명 동안 하나의 인스턴스만 존재하도록 보장합니다. Base
및 _AccountInfo
을 상속하며 계정별 정보에 액세스하기 위한 구조화되고 사용자 친화적인 인터페이스를 제공합니다. 이 아키텍처는 일관성을 보장하고 중복 인스턴스를 방지하여 애플리케이션 내에서 계정 관리를 중앙 집중화합니다.
AsyncContextManager인 Account
클래스는 초기화 및 정리 프로세스를 자동화하여 리소스 관리를 단순화합니다. 컨텍스트를 입력하면 MetaTrader 터미널을 초기화하고 지정된 계정에 로그인합니다. 종료 시 리소스가 제대로 닫히고 정리되는지 확인합니다. 이러한 단순화된 접근 방식은 리소스 처리의 신뢰성을 높이고 계정 관리를 보다 직관적으로 만들며 거래 작업 중 오류 가능성을 줄입니다.
connected
(bool): 로그인 성공 여부와 단말기 연결이 활성화되었는지 여부를 나타냅니다. 계정이 연결되어 있으면 True를 반환합니다. refresh()
: 터미널에서 최신 계정 세부정보를 검색하여 계정 인스턴스를 업데이트하여 계정 데이터를 최신 상태로 유지합니다. RAM
클래스는 거래 활동 중 위험 평가 및 위험 관리를 담당합니다. risk_to_reward
, fixed_amount
, min_amount
, max_amount
및 risk
과 같은 속성을 갖고 있어 트레이더가 위험 노출을 효과적으로 정의하고 제어할 수 있습니다. 이러한 속성은 각 거래에 대한 위험 매개변수, 최소 및 최대 위험 금액, 위험 대 보상 비율을 설정할 수 있는 유연성을 제공합니다.
이 클래스에는 사용 가능한 마진 및 위험 비율을 기준으로 각 거래의 위험 금액을 계산하는 get_amount
과 손실 또는 포지션 금액이 제한. 이러한 기능을 통합함으로써 RAM 클래스는 위험 관리에 대한 포괄적인 접근 방식을 제공하고 의사 결정 기능을 향상하며 보다 안전한 거래 관행을 촉진합니다. check_losing_positions
risk
(float): 거래당 위험에 처한 자본의 비율을 정수로 표시합니다(예: 1은 1%를 의미). 기본값은 1입니다. risk_to_reward
(float): 위험-보상 비율. 잠재적인 위험과 보상 간의 관계를 나타냅니다. 기본값은 2입니다. fixed_amount
(float): 거래당 위험에 대한 고정 금액(설정된 경우)은 백분율 기반 계산을 재정의합니다. get_amount()
: 리스크 fixed_amount
, min_amount
, max_amount
등 구성된 속성을 기반으로 각 거래의 리스크 금액을 계산하고 반환합니다. RAM
클래스는 주문 전에 사용할 수 있는 Trader 클래스에서 사용하는 것이 가장 좋습니다.
Candle
및 Candles
클래스는 터미널에서 검색된 가격 표시줄을 관리하기 위한 사용자 정의 도구입니다. Candle
클래스는 단일 가격 막대의 데이터를 캡슐화하여 시가, 고가, 저가, 종가(OHLC)와 같은 필수 속성이 각 인스턴스에 존재하는지 확인합니다. 해싱, 반복, 비교 등 Python 프로토콜을 지원하는 동시에 keys()
, values()
등의 속성 관리 메서드를 제공합니다. 또한 인스턴스화 중에 전달된 속성을 동적으로 추가하여 유연한 사용자 정의가 가능합니다.
Candles
클래스는 시간순으로 정렬된 여러 개의 Candle 개체에 대한 컨테이너 역할을 합니다. PandasDataFrame
를 사용하여 데이터를 저장하고 관리하므로 고급 기술 분석을 위해 pandas-ta와 같은 도구와 원활하게 통합됩니다. 이 클래스는 슬라이싱 및 반복과 같은 다양한 Python 프로토콜을 지원하고 기간과 같은 특수 속성을 통해 기능을 확장하여 거래 전략을 개발하기 위한 강력한 기반 역할을 합니다. 그 다양성으로 인해 복잡한 분석 작업 흐름에서 자주 사용할 수 있습니다.
time
(int): 캔들 주기 시작 시간. open
(float): 캔들의 시가. high
(float): 캔들 기간 동안 도달한 최고 가격입니다. low
(float): 캔들 기간 동안 도달한 최저 가격입니다. close
(float): 캔들의 종가입니다. tick_volume
(float): 캔들 기간의 틱 수입니다. real_volume
(float) : 캔들 기간 동안의 실제 거래량입니다. spread
(float) : 캔들 기간 내에 확산됩니다. Index
(int): 시퀀스에서 양초의 위치를 나타내는 사용자 정의 속성입니다. set_attributes(**kwargs)
: 제공된 키워드 인수에서 캔들 인스턴스의 속성을 동적으로 설정합니다. is_bullish()
: 양초가 강세일 경우(종가가 시가보다 크거나 같음) True를 반환하고, 그렇지 않으면 False를 반환합니다. is_bearish()
: 양초가 약세일 경우(종가가 시가보다 낮음) True를 반환하고, 그렇지 않으면 False를 반환합니다. dict(exclude: set = None, include: set = None)
: 양초 속성 사전을 반환합니다. 선택적으로 exclude
또는 include
컬렉션을 사용하여 속성을 필터링할 수 있습니다. Index
(Series[int]): 객체에 있는 모든 양초의 인덱스를 포함하는 pandas 시리즈입니다. time
(Series[int]): 객체의 모든 촛불 시간을 포함하는 pandas 시리즈입니다. open
(시리즈[float]): 개체에 있는 모든 양초의 시가를 포함하는 pandas 시리즈입니다. high
(시리즈[float]): 개체의 모든 양초 중 최고 가격이 포함된 pandas 시리즈입니다. low
(시리즈[float]): 개체의 모든 양초 중 최저 가격이 포함된 pandas 시리즈입니다. close
(시리즈[float]): 개체의 모든 양초 종가를 포함하는 pandas 시리즈입니다. tick_volume
(Series[float]): 개체에 있는 모든 양초의 진드기 양을 포함하는 pandas 시리즈입니다. real_volume
(시리즈[float]): 개체에 있는 모든 양초의 실제 부피를 포함하는 pandas 시리즈입니다. spread
(시리즈[float]): 개체에 모든 양초 스프레드가 포함된 pandas 시리즈입니다. Candle
(Type[Candle]): 객체 내에서 단일 양초를 나타내는 데 사용되는 클래스입니다. timeframe
(TimeFrame): 타임스탬프에서 계산된 캔들의 시간 프레임입니다. data
(DataFrame): 객체의 모든 양초에 대한 기본 데이터가 포함된 pandas DataFrame입니다. rename(inplace=True, **kwargs)
: 기본 DataFrame의 열 이름을 바꿉니다. ta
: data
속성을 통해 양초에 대해 직접 기술 분석을 수행하여 pandas-ta 라이브러리에 액세스합니다. ta_lib
: 추가 기술 분석을 위해 ta 라이브러리에 대한 액세스를 제공하고 Series 또는 DataFrame 개체를 인수로 전달해야 하는 함수와 함께 사용합니다. columns
: 기본 DataFrame의 열 이름을 반환합니다.Ticks
및 Tick
클래스는 Candle
클래스와 유사하게 거래 터미널에서 Tick 데이터를 관리하도록 설계되었습니다. Tick
클래스는 단일 Tick을 나타내며 해당 속성에는 입찰, 매도, 최종 가격 및 거래량이 포함되어 각 인스턴스가 단일 Tick 이벤트에 필요한 데이터를 캡슐화하도록 합니다. 동적 속성 관리를 지원하고 사전과 같은 액세스를 제공하므로 다양한 상황에 적응하고 쉽게 작동할 수 있습니다.
Ticks
클래스는 여러 Tick 객체에 대한 컨테이너 역할을 하며 효율적인 조작 및 분석을 위해 팬더 DataFrame
에 데이터를 저장합니다. 반복, 슬라이싱 및 다양한 데이터 작업을 지원하므로 기술 분석을 위해 pandas-ta와 같은 도구와 원활하게 통합할 수 있습니다. 이 클래스는 거래 시스템에서 대량의 틱 데이터를 처리하는 데 필수적이며 실시간 또는 과거 데이터 분석을 위한 강력한 구조를 제공합니다.
_Symbol_
클래스는 금융 상품의 데이터를 캡슐화하여 거래를 시작하기 전에 필요한 계산 및 작업을 지원하는 강력한 구조를 제공합니다. _Base
, SymbolInfo
의 하위 클래스로 다양한 속성과 메소드를 통합하여 금융상품을 효율적으로 처리합니다. 이 클래스는 다양한 브로커의 다양한 상품에 맞게 맞춤화될 수 있어 거래 플랫폼 전반에 걸친 적응성을 보장합니다.
Symbol
클래스는 현재 Tick 데이터에 액세스하고, 시장 깊이를 관리하고, 통화 변환을 수행하는 유틸리티 메서드를 사용하여 복잡한 거래 작업을 단순화합니다. 이는 기호를 초기화하고, 거래량을 확인하고, 과거 환율이나 틱을 검색하는 기능을 제공하므로 거래 전략 개발의 중요한 부분입니다. 이 디자인은 개발자가 특정 거래 요구 사항을 충족하도록 동작을 확장하고 사용자 정의할 수 있도록 보장합니다.
Symbol
클래스는 기능이 풍부한 클래스입니다. 이 글에서는 여러분이 가장 많이 사용하게 될 몇 가지 중요한 것들만 다루었습니다. tick
및 account
은 Symbol
상위 클래스에 정의된 속성과 달리 SymbolInfo
클래스의 유일한 속성입니다.
tick
(Tick): 금융상품의 현재 가격 Tick을 나타내며 실시간 시장 데이터를 제공합니다. account
(계정): 기호와 연결된 현재 거래 계정의 인스턴스입니다. __init__(*, name: str, **kwargs)
: 심볼 인스턴스를 초기화합니다. name
속성은 필수이며 터미널에서 브로커가 지정한 기호 이름과 일치해야 합니다. initialize()
: 터미널에서 최신 가격 틱 및 세부 정보를 검색하여 기호 인스턴스를 채웁니다. 성공하면 select
속성이 True로 설정되고 모든 속성이 서버 데이터로 채워집니다. convert_currency(*, amount: float, from_currency: str, to_currency: str)
: 지정된 금액을 한 통화에서 다른 통화로 변환합니다. amount_in_quote_currency(*, amount: float)
: 계정 통화가 견적 통화와 다른 경우 계정 통화에서 견적 통화로 금액을 변환합니다. 이 방법은 위험 관리 계산을 수행하는 데 특히 유용합니다. info_tick
: 금융 상품의 현재 가격 진드기를 검색합니다. symbol_select(enable: bool = True)
: MarketWatch 창에 기호를 추가하거나 제거합니다. check_volume(volume: float)
: 지정된 거래량이 허용 한도 내에 있는지 확인하고 필요한 경우 조정합니다. round_off_volume(volume: float, round_down: bool = False)
: 볼륨을 가장 가까운 유효한 단계로 반올림합니다. compute_volume
: 거래에 적합한 거래량을 계산합니다. copy_rates_from_pos(timeframe, start_position=0, count=500)
: 특정 인덱스에서 시작하는 막대를 가져옵니다. copy_rates_from(timeframe, date_from, count=500)
: 지정된 날짜부터 시작하는 과거 환율(막대)을 검색합니다. copy_ticks_from(date_from, count=100, flags=CopyTicks.ALL)
: 지정된 날짜부터 시작하는 진드기 데이터를 가져옵니다. Symbol
클래스는 금융 상품을 관리하도록 설계된 다용도의 기능이 풍부한 도구로, 데이터를 검색하고 변환하는 데 필요한 방법을 제공합니다. 이 소개에서는 초기화, 통화 변환 및 최신 Tick 데이터 검색과 같은 주요 기능에 중점을 두지만 향후 논의에서는 다른 많은 기능을 살펴보겠습니다. 여기에는 이를 알고리즘 거래 시스템에 통합하고 다양한 사용 사례에 대한 적합성을 입증하는 것이 포함됩니다.
주목할 만한 기여는 ForexSymbol
클래스입니다. 이 클래스는 Symbol
클래스의 특수 확장이며 Forex 거래를 위해 특별히 설계되었습니다. 이 하위 클래스는 통화 쌍 거래의 고유한 요구 사항을 처리하도록 설계되었으며 다양한 거래 시나리오에서 Symbol
클래스의 유연성과 사용자 정의 잠재력을 더욱 보여줍니다.
Order
클래스는 관련 속성과 메소드를 결합하여 거래 주문 관리를 단순화하고 주문 확인, 검증 및 전송을 더 쉽게 만듭니다. _Base
및 TradeRequest
의 하위 클래스로 강력한 기능을 상속하면서 추가적인 편의성을 제공합니다. action
, type_time
, type_filling
등의 속성에 대해 합리적인 기본값을 설정함으로써 인스턴스화 중 코드 중복을 최소화하고 트랜잭션 작업의 효율성과 명확성을 보장합니다.
이 수업에서는 보류 주문 검색, 자금 적정성 확인, 마진, 손익 계산 등 핵심 작업을 단순화합니다. send()
및 check()
과 같은 방법을 통합하면 거래 작업을 시작하고 검증하기 위한 원활한 워크플로가 보장되며, calc_margin()
및 calc_profit()
과 같은 유틸리티는 거래 전 분석을 용이하게 합니다. 그 디자인은 알고리즘 거래 전략을 효율적으로 구현하는 데 필수적인 도구입니다.
__init__
: 유효한 TradeRequest
속성이어야 하는 키워드 인수를 사용하여 주문 인스턴스를 초기화합니다. action
의 기본값은 DEAL
, type_time
의 기본값은 DAY
, type_filling
의 기본값은 FOK
이지만 인스턴스화 중에 사용자 정의할 수 있습니다. check(**kwargs)
: 주문하기 전에 주문을 확인하세요. 제공된 모든 키워드 인수는 요청 객체를 업데이트합니다. send
: 실행을 위해 주문을 터미널로 보냅니다. calc_margin
: 거래에 필요한 증거금을 계산합니다. calc_profit
: 거래의 잠재적 이익을 계산합니다. calc_loss
: 거래의 잠재적 손실을 계산합니다. request
: 이 속성은 거래 요청 개체를 사전으로 반환합니다. Trader
클래스는 거래 주문 관리를 위한 유틸리티가 풍부한 추상 기본 클래스 역할을 합니다. 다양한 주문 유형을 생성하고 관리하는 기본 방법을 제공하는 동시에 거래 확인, 라우팅 및 기록과 같은 주요 프로세스를 처리합니다. 이 클래스는 특정 거래 전략에 적응하는 유연성을 보장하기 위해 하위 클래스에 place_trade
메서드를 구현해야 합니다.
주요 기능에는 정지 손실을 설정하고 핍 또는 핍을 기준으로 이익 실현 수준을 설정하고, 정지 손실 수준이 있거나 없는 주문을 생성하고, 거래에 적합한 금액을 계산하는 방법이 포함됩니다. 이 클래스는 적절하게 초기화된 Symbol 인스턴스 및 위험 평가를 위한 선택적 RAM
인스턴스와 통합되어 원활한 트랜잭션 관리가 가능합니다. 또한 실행된 트랜잭션의 추적 및 분석을 용이하게 하기 위해 트랜잭션 결과 기록을 지원합니다.
modify_order(**kwargs)
: 제공된 키워드 매개변수를 사용하여 주문 속성을 수정합니다. modify_ram(**kwargs)
: 제공된 키워드 인수를 사용하여 RAM(위험 평가 및 관리) 인스턴스 속성을 업데이트합니다. check_order
: 주문하기 전에 필요한 조건을 충족하는지 확인하세요. send_order
: 실행을 위해 브로커에게 주문을 보냅니다. record_trade(*, result: OrderSendResult, parameters: dict = None, name: str = "")
: 거래 세부 정보를 CSV 또는 JSON 파일에 기록하고 해당 작업을 config.task_queue
인스턴스에 위임합니다. 거래 결과 및 전략 매개변수(제공된 경우)가 포함됩니다. contrib
패키지에는 ScalpTrader
과 SimpleTrader
라는 두 개의 간단한 트레이더가 포함되어 있습니다. 여기서 ScalpTrader
는 아래와 같습니다.
Session
및 Sessions
클래스는 거래 시간을 관리하고 실행하는 강력한 프레임워크를 제공합니다. Session
은 UTC로 정의된 기간을 나타내며 시작 시간과 종료 시간을 나타내며 정수 또는 datetime.time
객체로 지정할 수 있습니다. 이러한 세션은 모든 거래 종료, 수익성/손실 포지션만 종료 또는 사용자 지정 사용자 지정 작업과 같은 사전 정의된 작업을 트리거할 수 있습니다. 이를 통해 전략은 특정 기간 동안 거래 활동을 정밀하게 제어할 수 있습니다.
Sessions
클래스는 여러 Session
인스턴스를 정렬된 컬렉션으로 그룹화하여 중복되거나 연속된 거래 기간을 쉽게 관리할 수 있도록 합니다. 이는 비동기 컨텍스트 관리자 역할을 하며 현재 시간을 지속적으로 모니터링하여 활성 세션을 결정합니다. 활성 세션이 없으면 Sessions
인스턴스는 다음 예약 세션이 시작될 때까지 거래 작업을 일시 중지하여 지정된 거래 창을 준수하는지 확인합니다.
이러한 클래스를 통합하면 거래 전략에 시간 기반 규칙을 쉽게 통합할 수 있어 정확성과 신뢰성이 높아집니다. 이 기능은 거래 시간(예: Forex 또는 주식 시장 거래)을 엄격히 준수해야 하는 자동화 시스템이나 사전 정의된 시간 간격에 맞춰 작업을 조정해야 하는 자동화 시스템에서 특히 유용합니다.
start
(datetime.time): UTC 기준 세션 시작 시간입니다. end
(datetime.time): UTC 기준 세션 종료 시간입니다. on_start
(str): "close_all"
, "close_win"
, "close_loss"
또는 사용자 정의 작업과 같이 세션이 시작될 때 수행할 작업을 지정합니다. on_end
(str): on_start
과 유사하게 세션 종료 시 수행할 작업을 지정합니다. custom_start
(호출 가능): 세션이 시작될 때 실행될 선택적 사용자 정의 함수입니다. custom_end
(호출 가능): 세션 종료 시 실행할 선택적 사용자 정의 함수입니다. name
(str): 세션 이름이 제공되지 않은 경우 기본적으로 시작 시간과 종료 시간의 조합이 사용됩니다. in_session
: 현재 시간이 세션 내에 있는지 확인하세요. begin
: 세션 시작 시 on_start
또는 custom_start
에 지정된 작업을 수행합니다. close
: 세션이 끝나면 on_end
또는 custom_end
에 지정된 작업을 수행합니다. duration
: 세션 기간을 시간, 분, 초가 포함된 Duration 개체로 반환합니다. close_all
: 열려 있는 모든 포지션을 닫습니다. close_win
: 수익성 있는 모든 포지션을 닫습니다. close_loss
: 모든 손실 포지션을 청산합니다. action(action: str)
: 포지션 청산, 맞춤 기능 실행 등 지정된 작업을 수행합니다. until
: 현재 시간부터 세션 시작까지의 시간을 초 단위로 계산합니다. sessions
(list[Session]): 시작 시간을 기준으로 정렬된 Session
개체 목록입니다. current_session
(세션 | 없음): 현재 활성 세션(있는 경우)입니다. find(moment: datetime.time = None)
: 지정된 시간이 포함된 대화를 찾아서 반환합니다. 시간을 제공하지 않으면 현재 시간이 사용됩니다. find_next(moment: datetime.time = None)
: 지정된 시간 이후의 다음 세션을 찾아서 반환합니다. 시간을 제공하지 않으면 기본값은 현재 시간입니다. check
: 현재 세션을 모니터링합니다. 활성 세션이 없으면 다음 세션이 시작될 때까지 기다립니다. config
: 세션과 연결된 구성 인스턴스로, 모드(라이브 또는 백테스트)를 결정합니다. Strategy
클래스는 거래 전략 개발을 위한 기본 프레임워크이며 Bot
및 Backtester
과 원활하게 통합될 수 있습니다. 추상 기본 클래스로서 많은 기능을 갖추고 있지만 파생 클래스에는 trade
메서드를 구현해야 합니다. 이 방법은 전략의 핵심 거래 논리 역할을 합니다. Strategy
클래스는 비동기 컨텍스트 관리자 역할을 하며 run_strategy
메서드를 사용하여 정책을 실행하고 작업 모드에 따라 live_strategy
또는 backtest_strategy
메서드를 호출합니다.
symbol
, sessions
및 parameters
과 같은 속성을 사용하여 이 클래스는 전략을 특정 금융 상품 및 거래 세션에 맞게 맞춤화하고 적용할 수 있도록 보장합니다. sleep
및 delay
과 같은 공동 멀티태스킹 방법을 통합하면 전략이 효율적으로 유지되고 실시간 또는 백테스트 환경에서 시장 업데이트와 동기화됩니다. 이는 Strategy
클래스를 복잡한 거래 시스템을 구축하기 위한 강력하고 유연한 도구로 만듭니다.
name
(str): 전략의 이름입니다. 명시적으로 제공되지 않은 경우 기본값은 클래스 이름입니다. symbol
(기호): 전략과 관련된 금융 상품. parameters
(dict): 정책별 매개변수 사전입니다. sessions
(세션): 전략이 활성화된 거래 세션입니다. mt5
(MetaTrader | MetaBackTester): 모드(라이브 또는 백테스트)를 기반으로 하는 MetaTrader
또는 MetaBackTester
인스턴스입니다. config
: 정책 구성 설정입니다. running
(bool): 전략이 현재 실행 중인지 여부를 나타냅니다. backtest_controller
(BackTestController): 백테스트 작업을 관리하는 데 사용되는 컨트롤러입니다. current_session
(세션): 현재 활성화된 거래 세션입니다. __init__(symbol: Symbol, params: dict = None, sessions: Sessions = None, name: str = "")
: 주어진 기호, 매개변수 및 세션 초기화 전략을 사용하세요. 위 내용은 AIOMQL의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!