Discussão do artigo "Sistema de negociação de arbitragem de alta frequência em Python usando MetaTrader 5"
Mal entendido. Normalmente, a arbitragem envolve a negociação de pelo menos dois instrumentos na direção um do outro. Aqui, parece que uma ordem é gerada para cada situação de arbitragem, ou seja, a esperança é de que o instrumento real puxe o sintético, mas não vice-versa. A probabilidade de isso acontecer é de 50%, na minha opinião.
Além disso, por algum motivo, o preço de compra é considerado para compras e o preço de venda para vendas:
price = symbol_info.bid if direction == "BUY" else symbol_info.ask
Se a ideia é "dobrar" o corretor no spread - os 8 pontos na condição de sinal:
arbitrage_opportunities = pd.DataFrame(spreads) > 0.00008 então, nas propriedades da ordem, há um deslizamento de 30 ("desvio": 30), o que lhe dá a oportunidade de executar com perdas muito maiores do que o lucro planejado.
E eu não vi posições fechando exatamente na condição de acionamento bem-sucedido da arbitragem, e esperar pelo fechamento em um take profit ou stop loss quilométrico é como adivinhar a borra de café para uma estratégia de arbitragem (que capta desequilíbrios milimétricos), na minha opinião.
Por favor, explique do que se trata:
А теперь следующий шаг — список pairs. Это наши валютные пары, которые мы будем использовать для синтеза. Дальше начинается еще один процесс. Мы запускаем цикл по всем парам. Для каждой пары мы рассчитываем синтетическую цену двумя способами: Делим bid первой пары на ask второй. Делим bid первой пары на bid второй. И каждый раз мы увеличиваем наш method_count. В итоге у нас получается не 1000, не 1500, а целых 2000 синтетических цен!
Aqui estão os pares:
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')] Qual é o lance do primeiro par? O primeiro par é:
('AUDUSD', 'USDCHF')
ticks = mt5.copy_ticks_from(symbol, utc_from, count, mt5.COPY_TICKS_ALL) Tudo instalado. Isso é o que aparece em ticks:
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''],
dtype='|V0')
E aqui já obtemos uma saída pontual:
ticks_frame['time'] = pd.to_datetime(ticks_frame['time'], unit='s')
O código do exemplo https://www.mql5.com/pt/docs/python_metatrader5/mt5copyticksfrom_py também não funciona
>>> 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("Ticks recebidos:",len(ticks)) Получено тиков: 100000 >>> print("Vamos considerar os ticks resultantes como eles são.") Выведем полученные тики как есть >>> count = 0 >>> for tick in ticks: ... count+=1 ... print(tick) ... if count >= 100: ... break ... b'' b'' b'' b''
Enfim, como é o python? Como prepará-lo? Não está claro...
- www.mql5.com
Foi lançado o novo artigo Python High Frequency Arbitrage Trading System com MetaTrader 5:
Autor: Yevgeniy Koshtenko
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Sistema de negociação de arbitragem de alta frequência em Python usando MetaTrader 5 foi publicado:
O mercado cambial. Estratégias algorítmicas. Python e MetaTrader 5. Tudo isso foi combinado em um único sistema de arbitragem quando comecei a trabalhar nele. A ideia era simples: criar um sistema de alta frequência para detectar desequilíbrios de preços. E no que isso se transformou?
Durante esse período, o API do MetaTrader 5 foi a ferramenta que mais utilizei. Comecei com a seguinte ideia: calcular cotações cruzadas sintéticas. Decidi não me limitar a dez ou cem. O número ultrapassou a casa dos mil.
Havia também a tarefa separada de gerenciamento de risco. Neste artigo, vou explicar tudo. Vamos analisar todos os aspectos do sistema: sua arquitetura, os algoritmos utilizados e o processo de tomada de decisões. Mostrarei os resultados do backtest e da negociação ao vivo. E, claro, compartilharei ideias para o futuro. Quem sabe alguém de vocês queira continuar desenvolvendo esse tema? Espero que meu trabalho seja útil. Quero acreditar que ele contribuirá para o avanço da negociação algorítmica. Talvez alguém o use como base para criar algo ainda mais eficiente no mundo da arbitragem de alta frequência. Afinal, esse é o espírito da ciência: avançar com base na experiência daqueles que vieram antes. Vamos direto ao ponto.
Autor: Yevgeniy Koshtenko