기고글 토론 "MetaTrader 5를 이용한 Python 고빈도 차익 거래 시스템"

 

새로운 기고글 MetaTrader 5를 이용한 Python 고빈도 차익 거래 시스템 가 게재되었습니다:

이 글에서 우리는 브로커의 시각에서 합법적인 차익거래 시스템을 만들고 외환 시장에서 수천 개의 합성 가격을 생성하고 이를 분석하고 성공적으로 수익을 창출하는 거래를 만들어 보겠습니다.

외환시장. 알고리즘 전략. Python과 MetaTrader 5. 제가 차익 거래 시스템을 시작했을 때 이런 생각이 떠올랐습니다. 아이디어는 간단했습니다. 가격 불균형을 찾기 위해 고빈도 시스템을 만드는 것입니다. 결국 이 모든 일은 어떻게 되었을까요?

이 기간 동안 저는 MetaTrader 5 API를 가장 자주 사용했습니다. 저는 합성 교차율을 계산하기로 했습니다. 저는 열 개나 백 개로 제한하지 않기로 결심했습니다. 그 숫자는 천을 넘었습니다.

위험 관리 업무는 별개의 업무였습니다. 시스템 아키텍처, 알고리즘, 의사결정 등 - 우리는 모든 것을 여기서 분석해 보겠습니다. 저는 백테스팅과 실시간 거래의 결과를 보여드리겠습니다. 물론 미래에 대한 아이디어도 공유하겠습니다. 혹시 여러분 중에 이 주제를 더 발전시키고 싶은 분이 있을지 누가 알까요? 이 결과물이 많은 사람들에게 인기를 끌기를 바랍니다. 또한 알고리즘 트레이딩의 발전에 기여할 수 있을 것으로 믿고 싶습니다. 어쩌면 누군가가 이를 기초로 삼아 고빈도 차익거래의 세계에서 훨씬 더 효과적인 무언가를 만들어낼 지도 모릅니다. 결국 - 과학의 본질은 선행자들의 경험을 바탕으로 전진하는 것입니다. 바로 요점으로 들어가겠습니다.


작성자: Yevgeniy Koshtenko

 
метку Toxic Order Flow ставят не столько из-за поглощения ликвидности из рынка в моменте, сколько из-за высоких нагрузок на обслуживание такого потока ордеров.
Toxic은 수익성 있는 거래입니다. 주문 스팸 문제가 없습니다.
 

오해입니다. 일반적으로 차익거래는 최소 두 개의 상품을 서로 반대 방향으로 거래하는 것을 포함합니다. 여기서는 각 차익거래 상황에 대해 하나의 주문이 생성되는 것으로 보입니다. 즉, 실제 상품이 합성상품을 끌어올리고 그 반대의 경우는 발생하지 않기를 바라는 것입니다. 이 확률은 오십오 분의 오십입니다.

또한 어떤 이유로 입찰 가격은 구매를 위해 취해지고 판매를 요청합니다:

price = symbol_info.bid if direction == "BUY" else symbol_info.ask

아이디어가 스프레드에서 브로커를 "구부리는"것이라면 - 신호 조건의 8 포인트:

arbitrage_opportunities = pd.DataFrame(spreads) > 0.00008

그런 다음 주문의 속성에서 30 ( "편차": 30)의 미끄러짐이 발생하여 계획된 이익보다 훨씬 더 큰 손실로 실행할 수있는 기회를 제공합니다.

그리고 성공적인 차익거래 발동 조건에서 포지션이 정확히 마감되는 것을 보지 못했고, 킬로미터 테이크프로핏 또는 스톱로스로 마감될 때까지 기다리는 것은 (밀리미터 불균형을 포착하는) 차익거래 전략을 위해 커피 찌꺼기를 추측하는 것과 같다고 생각합니다.

 

무슨 내용인지 설명해 주세요:

А теперь следующий шаг — список pairs. Это наши валютные пары, которые мы будем использовать для синтеза. Дальше начинается еще один процесс. Мы запускаем цикл по всем парам. Для каждой пары мы рассчитываем синтетическую цену двумя способами:

Делим bid первой пары на ask второй.
Делим bid первой пары на bid второй.
И каждый раз мы увеличиваем наш method_count. В итоге у нас получается не 1000, не 1500, а целых 2000 синтетических цен!

다음은 쌍입니다:

pairs = [('AUDUSD', 'USDCHF'), ('AUDUSD', 'NZDUSD'), ('AUDUSD', 'USDJPY'),
             ('USDCHF', 'USDCAD'), ('USDCHF', 'NZDCHF'), ('USDCHF', 'CHFJPY'),
             ('USDJPY', 'USDCAD'), ('USDJPY', 'NZDJPY'), ('USDJPY', 'GBPJPY'),
             ('NZDUSD', 'NZDCAD'), ('NZDUSD', 'NZDCHF'), ('NZDUSD', 'NZDJPY'),
             ('GBPUSD', 'GBPCAD'), ('GBPUSD', 'GBPCHF'), ('GBPUSD', 'GBPJPY'),
             ('EURUSD', 'EURCAD'), ('EURUSD', 'EURCHF'), ('EURUSD', 'EURJPY'),
             ('CADCHF', 'CADJPY'), ('CADCHF', 'GBPCAD'), ('CADCHF', 'EURCAD'),
             ('CHFJPY', 'GBPCHF'), ('CHFJPY', 'EURCHF'), ('CHFJPY', 'NZDCHF'),
             ('NZDCAD', 'NZDJPY'), ('NZDCAD', 'GBPNZD'), ('NZDCAD', 'EURNZD'),
             ('NZDCHF', 'NZDJPY'), ('NZDCHF', 'GBPNZD'), ('NZDCHF', 'EURNZD'),
             ('NZDJPY', 'GBPNZD'), ('NZDJPY', 'EURNZD')]

첫 번째 쌍의 입찰가는 얼마인가요? 첫 번째 쌍입니다:

('AUDUSD', 'USDCHF')
 
pivomoe #:

첫 번째 쌍의 입찰가는 얼마입니까? 첫 번째 쌍입니다:

AUDUSD도 한 쌍입니다. AUD에서 USD로.

 
pivomoe #:

무슨 내용인지 설명해 주세요:

쌍은 다음과 같습니다:

첫 번째 쌍의 입찰가는 얼마인가요? 첫 번째 쌍입니다:

이것이 합성이 구축되는 방식입니다. 차이가 아니라 분할을 통해. 그리고 단순하지는 않지만... 읽기.....
 
ticks = mt5.copy_ticks_from(symbol, utc_from, count, mt5.COPY_TICKS_ALL)

모두 설치되었습니다. 이것이 틱으로 표시되는 내용입니다:

array([b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'',

...

b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'',

b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'',

b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b''],

dtype='|V0')


그리고 여기서 우리는 이미 제 시간에 출구를 얻었습니다:

ticks_frame['time'] = pd.to_datetime(ticks_frame['time'], unit='s')
 

예제 https://www.mql5.com/ko/docs/python_metatrader5/mt5copyticksfrom_py 의 코드도 작동하지 않습니다.

>>>  timezone = pytz.timezone("Etc/UTC")
>>>  utc_from = datetime(2020, 1, 10, tzinfo=timezone)
>>>  ticks = mt5.copy_ticks_from("EURUSD", utc_from, 100000, mt5.COPY_TICKS_ALL)
>>>
>>> print("수신된 틱:",len(ticks))
Получено тиков: 100000
>>> print("결과물인 틱을 그대로 가져가자.")
Выведем полученные тики как есть
>>>  count = 0
>>> for tick in ticks:
...     count+=1
...     print(tick)
...     if count >= 100:
...         break
...
b''
b''
b''
b''

어쨌든 파이썬은 어떤가요? 어떻게 준비하나요? 불분명합니다...

Документация по MQL5: Python интеграция / copy_ticks_from
Документация по MQL5: Python интеграция / copy_ticks_from
  • www.mql5.com
Получает тики из терминала MetaTrader 5, начиная с указанной даты. Параметры symbol [in]  Имя финансового инструмента, например, ...