Discussione sull’articolo "Sistema di trading di arbitraggio ad alta frequenza in Python utilizzando MetaTrader 5"
Frainteso. Di solito l'arbitraggio prevede la negoziazione di almeno due strumenti l'uno in direzione dell'altro. In questo caso, sembra che venga generato un ordine per ogni situazione di arbitraggio, cioè la speranza è che lo strumento reale si avvicini a quello sintetico, ma non viceversa. La probabilità che ciò accada è di cinquanta e cinquanta, imho.
Inoltre, per qualche motivo il prezzo bid viene preso per gli acquisti e il prezzo ask per le vendite:
price = symbol_info.bid if direction == "BUY" else symbol_info.ask
Se l'idea è quella di "piegare" il broker sullo spread - gli 8 punti nella condizione di segnale:
arbitrage_opportunities = pd.DataFrame(spreads) > 0.00008 allora nelle proprietà dell'ordine c'è uno slittamento di 30 ("deviazione": 30), che gli dà la possibilità di eseguire con perdite molto maggiori rispetto al profitto previsto.
E non ho visto posizioni chiudersi esattamente alla condizione di successo dell'arbitraggio, e aspettare la chiusura su take profit o stop loss chilometrici è come indovinare i fondi di caffè per una strategia di arbitraggio (che coglie squilibri millimetrici), imho.
Si prega di spiegare di cosa si tratta:
А теперь следующий шаг — список pairs. Это наши валютные пары, которые мы будем использовать для синтеза. Дальше начинается еще один процесс. Мы запускаем цикл по всем парам. Для каждой пары мы рассчитываем синтетическую цену двумя способами: Делим bid первой пары на ask второй. Делим bid первой пары на bid второй. И каждый раз мы увеличиваем наш method_count. В итоге у нас получается не 1000, не 1500, а целых 2000 синтетических цен!
Ecco le coppie:
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 è il Bid della prima coppia? La prima coppia è:
('AUDUSD', 'USDCHF')
ticks = mt5.copy_ticks_from(symbol, utc_from, count, mt5.COPY_TICKS_ALL) Tutti installati. Questo è ciò che viene visualizzato in 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''],
dtype='|V0')
E qui otteniamo già un'uscita in tempo:
ticks_frame['time'] = pd.to_datetime(ticks_frame['time'], unit='s')
Anche il codice dell'esempio https://www.mql5.com/it/docs/python_metatrader5/mt5copyticksfrom_py non funziona .
>>> 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("Zecche ricevute:",len(ticks)) Получено тиков: 100000 >>> print("Prendiamo le zecche risultanti così come sono".) Выведем полученные тики как есть >>> count = 0 >>> for tick in ticks: ... count+=1 ... print(tick) ... if count >= 100: ... break ... b'' b'' b'' b''
Comunque, com'è python? Come prepararlo? Non è chiaro...
- www.mql5.com
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Il nuovo articolo Sistema di trading di arbitraggio ad alta frequenza in Python utilizzando MetaTrader 5 è stato pubblicato:
Mercato dei cambi. Strategie algoritmiche. Python e MetaTrader 5. Tutto questo è nato quando ho iniziato a lavorare su un sistema di trading di arbitraggio. L'idea era semplice - creare un sistema ad alta frequenza per individuare gli squilibri di prezzo. A cosa ha portato tutto questo alla fine?
In questo periodo ho utilizzato più spesso le API MetaTrader 5. Ho deciso di calcolare tassi sintetici dei cross. Ho deciso di non limitarmi a dieci o cento. Il numero ha superato il migliaio.
La gestione del rischio era un compito separato. Architettura del sistema, algoritmi, processo decisionale - qui analizzeremo tutto. Mostrerò i risultati del backtesting e del trading live. E naturalmente condividerò idee per il futuro. Chissà, forse qualcuno di voi vuole sviluppare ulteriormente questo argomento? Spero che il mio lavoro sia richiesto. Vorrei credere che contribuirà allo sviluppo del trading algoritmico. Forse qualcuno lo prenderà come base per creare qualcosa di ancora più efficace nel mondo dell'arbitraggio ad alta frequenza. Dopo tutto, questa è l'essenza della scienza - progredire sulla base dell'esperienza dei predecessori. Andiamo subito al punto.
Autore: Yevgeniy Koshtenko