MQL5 (MetaTrader की अपनी भाषा) दमदार है, लेकिन Python का इकोसिस्टम बेजोड़ है: pandas, numpy, scikit-learn, तैयार इंडिकेटर लाइब्रेरी। ऑफिशियल लाइब्रेरी MetaTrader5 दोनों दुनिया का सबसे अच्छा हिस्सा देती है — सोचने के लिए Python, एग्जीक्यूशन के लिए MT5। और आपके लिए सबसे अहम बात: Python से ब्राज़ील के B3 को ऑटोमेट करने (मिनी इंडेक्स और मिनी डॉलर) का यह सबसे सुलभ तरीका है।
ब्रिज कैसे काम करता है: लाइब्रेरी MetaTrader5 कोई अलग वेब API नहीं है। यह आपकी Python स्क्रिप्ट को इंस्टॉल किए हुए और खुले MT5 टर्मिनल से जोड़ती है, जो Windows पर चल रहा हो। Python कमांड भेजता है, MT5 उन्हें ब्रोकर पर एग्जीक्यूट करता है। MT5 को "इंजन" मानिए और Python को "दिमाग"।
01इंस्टॉलेशन और ज़रूरी चीज़ें
आपको चाहिए: Windows, अपने ब्रोकर का MT5 टर्मिनल इंस्टॉल और लॉग-इन किया हुआ, और Python 3.11+। फिर:
pip install MetaTrader5 pandas
ऑपरेटिंग सिस्टम के बारे में: लाइब्रेरी ऑफिशियली Windows के लिए है, क्योंकि यह MT5 टर्मिनल पर निर्भर करती है। Linux पर Wine के ज़रिए चलाया जा सकता है, या फिर 24/5 चलने वाले बॉट का सबसे आम ठिकाना — Windows VPS। Mac पर वर्चुअल मशीन के ज़रिए। गंभीर ऑटोमेशन के लिए Windows VPS ही सही रास्ता है।
02टर्मिनल से कनेक्ट करना
MT5 खुला हो और आपके अकाउंट में लॉग-इन हो (डेमो अकाउंट इस्तेमाल करें!), तब कनेक्शन शुरू करें:
# conectar.py import MetaTrader5 as mt5 # खुले MT5 terminal से connection initialize करें if not mt5.initialize(): print("Falha ao conectar:", mt5.last_error()) quit() # अकाउंट की जानकारी (पक्का करें कि DEMO है) conta = mt5.account_info() print(f"Conta: {conta.login} | Saldo: {conta.balance} | Servidor: {conta.server}") # काम खत्म होने पर connection हमेशा बंद करें # mt5.shutdown()
अगर आपको कोड से लॉगिन करना है (टर्मिनल में मैन्युअली करने के बजाय), तो initialize में क्रेडेंशियल पास करें:
mt5.initialize(login=12345678, password="sua_senha", server="NomeDoServidor-Demo")
03कैंडल डेटा खींचना (B3 समेत)
यहीं से आपके इंडिकेटर जुड़ते हैं। अपना ब्रोकर जो भी एसेट देता है, उसकी कैंडल खींचें — WIN और WDO भी, अगर वह ब्राज़ील के B3 का एक्सेस देता हो:
# dados.py import MetaTrader5 as mt5 import pandas as pd from datetime import datetime mt5.initialize() # symbol: जैसे "WIN$N" (मिनी इंडेक्स), "WDO$N" (मिनी डॉलर) या "EURUSD" # symbol का सही नाम हर ब्रोकर में अलग होता है — Market Watch में देखें simbolo = "WIN$N" timeframe = mt5.TIMEFRAME_M5 # M1, M5, M15, H1, आदि। # आखिरी 500 candles लेता है rates = mt5.copy_rates_from_pos(simbolo, timeframe, 0, 500) df = pd.DataFrame(rates) df["time"] = pd.to_datetime(df["time"], unit="s") print(df[["time","open","high","low","close","tick_volume"]].tail())
B3 के सिंबल पर एक टिप: सटीक नाम (जैसे: WIN$N, WINFUT, WDO$N) हर ब्रोकर पर अलग होता है। MT5 में Market Watch खोलें, राइट-क्लिक करें → "Show all", और जो नाम दिखे उसे हूबहू कॉपी करें। इस्तेमाल करें mt5.symbol_select(simbolo, True) ताकि पक्का हो जाए कि सिंबल इनेबल है।
04अपने इंडिकेटर से सिग्नल कैलकुलेट करना
यहां Python चमकता है — हमारी गाइड्स में सीखे इंडिकेटर फंक्शन इस्तेमाल करें। MT5 से आया DataFrame सीधे उनमें चला जाता है:
# indicator गाइड्स के functions दोबारा इस्तेमाल करें from indicadores import calcular_rsi, calcular_macd # आपके modules df["rsi"] = calcular_rsi(df["close"]) macd, sinal, hist = calcular_macd(df["close"]) # कंबाइंड सिग्नल का उदाहरण u = df.iloc[-1] sinal_compra = (u["rsi"] < 70) and (macd.iloc[-1] > sinal.iloc[-1])
अब तक देखी हर चीज़ के साथ इंटीग्रेशन: हमारी गाइड्स वाले RSI, MACD, ATR के फंक्शन इसी DataFrame पर सीधे चलते हैं। Python इस्तेमाल करने की खूबी यही है: पूरा इकोसिस्टम B3 के लिए उपलब्ध हो जाता है।
05ऑर्डर भेजना
MT5 में ऑर्डर भेजना Binance के मुकाबले ज़्यादा लंबा है, क्योंकि आपको एक विस्तृत "request" बनाना पड़ता है। स्टॉप और टारगेट के साथ मार्केट बाय का उदाहरण:
# executar.py def comprar(simbolo, lote, stop_pts, alvo_pts): info = mt5.symbol_info_tick(simbolo) preco = info.ask point = mt5.symbol_info(simbolo).point request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": simbolo, "volume": lote, "type": mt5.ORDER_TYPE_BUY, "price": preco, "sl": preco - stop_pts * point, # स्टॉप लॉस "tp": preco + alvo_pts * point, # टेक प्रॉफिट "deviation": 20, # स्वीकार्य slippage "magic": 123456, # आपके बॉट की id "type_filling": mt5.ORDER_FILLING_FOK, } resultado = mt5.order_send(request) if resultado.retcode != mt5.TRADE_RETCODE_DONE: print("Erro na ordem:", resultado.retcode, resultado.comment) return resultado
जहां शुरुआती अटक जाते हैं: यहाँ type_filling (एग्जीक्यूशन मोड) उसी से मैच होना चाहिए जो एसेट स्वीकार करता है — FOK, IOC या RETURN। अगर ऑर्डर "filling" एरर के साथ फेल हो, तो बाकी मोड आज़माएं। वहीं magic number आपके बॉट के ऑर्डर की पहचान करता है (सिर्फ अपने ऑर्डर मैनेज करने के लिए काम का)।
बॉट का स्ट्रक्चर समझ आ गया?
बॉट आर्किटेक्चर की पूरी गाइड देखें — हमारे Binance ट्यूटोरियल वाला लॉजिक MT5 पर भी वैसा ही लागू होता है।
06पोज़िशन मैनेज करना
पूरा बॉट बनाने के लिए आपको पोज़िशन देखनी और बंद करनी आनी चाहिए:
# अपने बॉट की खुली positions देखें (magic से) posicoes = mt5.positions_get(symbol="WIN$N") for p in posicoes: if p.magic == 123456: print(f"Posição {p.ticket}: lucro {p.profit}") # एक position बंद करना def fechar(posicao): tick = mt5.symbol_info_tick(posicao.symbol) request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": posicao.symbol, "volume": posicao.volume, "type": mt5.ORDER_TYPE_SELL if posicao.type == 0 else mt5.ORDER_TYPE_BUY, "position": posicao.ticket, "price": tick.bid if posicao.type == 0 else tick.ask, "deviation": 20, "type_filling": mt5.ORDER_FILLING_FOK, } return mt5.order_send(request)
07बॉट का लूप
सब कुछ जोड़ने पर, MT5 बॉट का ढांचा कुछ ऐसा बनता है:
import time mt5.initialize() try: while True: df = puxar_candles("WIN$N", mt5.TIMEFRAME_M5) sinal = calcular_sinal(df) # आपकी स्ट्रैटेजी atr = calcular_atr(df).iloc[-1] # डायनामिक स्टॉप if sinal == "COMPRA" and not tem_posicao(): lote = dimensionar(atr) # रिस्क मैनेजमेंट comprar("WIN$N", lote, stop_pts=2*atr, alvo_pts=4*atr) time.sleep(60) # हर मिनट चेक करता है except Exception as e: print("Erro:", e) finally: mt5.shutdown()
असली पैसे से पहले: हफ्तों तक डेमो अकाउंट पर चलाएं। पक्का करें कि सिंबल, type_filling और लॉट कैलकुलेशन आपके एसेट के लिए सही हैं। वॉल्यूम या पॉइंट की एक गलती गलत साइज़ का ऑर्डर भेज सकती है। टेस्ट, टेस्ट, टेस्ट — और उसके बाद ही रियल अकाउंट, वह भी मिनिमम लॉट के साथ।
08अक्सर पूछे जाने वाले सवाल
क्या Python से B3 को ऑटोमेट किया जा सकता है?
हां। ऑफिशियल MetaTrader5 लाइब्रेरी MT5 टर्मिनल से कनेक्ट होती है, और अगर आपका ब्रोकर B3 (WIN, WDO) के एक्सेस के साथ MT5 देता है, तो आप Python से डेटा खींच सकते हैं और ऑर्डर भेज सकते हैं। ब्राज़ीलियन मार्केट को Python से ऑटोमेट करने का यह सबसे सुलभ तरीका है।
क्या MT5 का इंस्टॉल होना ज़रूरी है?
हां। यह लाइब्रेरी कोई वेब API नहीं है — यह Windows पर इंस्टॉल किए हुए और खुले MT5 टर्मिनल तक का ब्रिज है। Python कमांड भेजता है, MT5 उन्हें ब्रोकर पर एग्जीक्यूट करता है।
क्या यह Linux या Mac पर चलता है?
ऑफिशियली सिर्फ Windows पर। Linux पर Wine से या Windows VPS पर चलाया जा सकता है (24/5 चलने वाले बॉट के लिए सबसे आम)। Mac पर वर्चुअल मशीन से। गंभीर ऑपरेशन के लिए Windows VPS।
सीधे MQL5 इस्तेमाल करने से क्या फर्क है?
MQL5 MT5 के अंदर चलता है और सिर्फ एग्जीक्यूशन के लिए ज़्यादा इंटीग्रेटेड है। API के ज़रिए Python इकोसिस्टम में आगे है (pandas, ML, लाइब्रेरी)। कई लोग रिसर्च और सिग्नल के लिए Python और क्रिटिकल एग्जीक्यूशन के लिए MQL5 इस्तेमाल करते हैं। शुरुआत के लिए Python ज़्यादा आसान है।
WIN सिंबल का नाम काम नहीं कर रहा, क्यों?
सटीक नाम हर ब्रोकर पर अलग होता है (WIN$N, WINFUT, WIN$, वगैरह)। MT5 में Market Watch खोलें, सारे सिंबल दिखाएं और सटीक नाम कॉपी करें। इनेबल करने के लिए mt5.symbol_select(name, True) इस्तेमाल करें।