MetaTrader 5 Python Kullanıcı Grubu - Metatrader'da Python nasıl kullanılır - sayfa 51

 
MetaQuotes :

Python kitaplığının 5.0.25 yeni bir derlemesini yayınladı

Lütfen şu şekilde güncelleyin:

Beyler, aşağıdaki gibi nesneler eklemeyi isteyebilirsiniz:

TradePosition(ticket=55970661, time=1583523524, time_msc=1583523524484, time_update=1583523524, time_update_msc=1583523524484, 
type=1, magic=0, identifier=55970661, reason=0, volume=0.04, price_open=1.13022, sl=0.0, tp=0.0, price_current=1.13179, swap=0.0, 
profit=-6.28, symbol='EURUSD', comment='', external_id='55970661')

lütfen __dict__ veya as_dict() ekleyin

Python'da standart yapılar, aynı dict/list ile çalışmak çok daha uygundur.

('__add__', <method-wrapper '__add__' of TradePosition object at 0x085A1808> )
('__class__', <class 'TradePosition'> )
('__contains__', <method-wrapper '__contains__' of TradePosition object at 0x085A1808> )
....
....
....
('symbol', 'EURUSD')
('ticket', 55970661)
('time', 1583523524)
('time_msc', 1583523524484)
('time_update', 1583523524)
('time_update_msc', 1583523524484)
('tp', 0.0)
('type', 1)
('volume', 0.04)

Daha sonra, bu sınıftan (ve diğer benzerlerinden) bir dikte çıkarmak ve onunla çalışmak istiyorum.

 

initialize() ile ilgili soru, evet

initialize(
   path                       // path to the MetaTrader 5 terminal EXE file
   timeout=TIMEOUT,           // timeout
   login=LOGIN,               // account number
   password= "PASSWORD" ,       // password
   server= "SERVER"            // server name as it is specified in the terminal
   )

sırasıyla /portable çalıştıran iki terminale giden yol yolunda

'c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe'

и 

'c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe'

ancak aynı zamanda, başlatmaya yönelik tüm çağrılar, terminalin son çalışan örneğine girer.

sırasıyla MT build 2360 ve MetaTrader5-5.0.26-cp38-cp38-win32.whl

Sorun nedir? path başka bir mantıkla mı kullanılmalı, yoksa /portable'a başka bir şey mi iletilmeli?

 

Gerçek kodu göster lütfen.

Henüz yollarda parametreleri kabul etmiyoruz.

 
Renat Fatkhullin :

Gerçek kodu göster lütfen.

Henüz yollarda parametreleri kabul etmiyoruz.

İşte kod:

import MetaTrader5 as mt5

def check_order ():
     if mt5.initialize(path='c:\Works\MT5 - terminals\MetaTrader 5 \terminal64.exe', 
                            login= 25153683 , server='MetaQuotes-Demo', password=''):
                print("mt5. version (): ", mt5. version ())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                 if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5. TRADE_ACTION_DEAL ,
                        "symbol": symbol,
                        "volume": 0.01 ,
                        "type": mt5. ORDER_TYPE_BUY ,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask- 100 *point,
                        "tp": mt5.symbol_info_tick(symbol).ask+ 100 *point,
                        "deviation": 10 ,
                        "magic": 234000 ,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		mt5.shutdown()


     if mt5.initialize(path='c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe', 
                            login= 50518455 , server='Alpari-MT5-Demo', password=''):
                print("mt5. version (): ", mt5. version ())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                 if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5. TRADE_ACTION_DEAL ,
                        "symbol": symbol,
                        "volume": 0.01 ,
                        "type": mt5. ORDER_TYPE_BUY ,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask- 100 *point,
                        "tp": mt5.symbol_info_tick(symbol).ask+ 100 *point,
                        "deviation": 10 ,
                        "magic": 234000 ,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		mt5.shutdown()


if __name__ == "__main__":
    check_order()

Son başlatılan terminal:

 "c:\Works\MT5 - terminals\ForexClub MT5\terminal64.exe" 

Ekran görüntüsüne bakılırsa, temyiz en son başlatılana gitti.

Ve hitap ettiği spesifik olarak aramak istiyorum.

 
Renat Fatkhullin :

Henüz yollardaki parametreleri kabul etmiyoruz.

Mmm ... Bu anı tam olarak anlamadım, değeri, ama nasıl bir parametre olmasa da, bu yerde bağlantı parametrelerini yapılandırmadan çıkarıyorum.

             if mt5.initialize(path=acc['path'], login=acc['login'], server=acc['server'], password=acc['pass']):
                print("mt5. version (): ", mt5. version ())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
 
Дмитрий Прокопьев :

initialize() ile ilgili soru, evet

sırasıyla /portable çalıştıran iki terminale giden yol yolunda

ancak aynı zamanda, başlatmaya yönelik tüm çağrılar, terminalin son çalışan örneğine girer.

sırasıyla MT build 2360 ve MetaTrader5-5.0.26-cp38-cp38-win32.whl

Sorun nedir? path başka bir mantıkla mı kullanılmalı, yoksa /portable'a başka bir şey mi iletilmeli?

Tek bir komut dosyasında 2 terminalle aynı anda çalışmak ister misiniz? Bu mümkün değildir, başlatılacak bir sonraki çağrı ilk terminalle olan bağlantıyı kesecektir, bunun için farklı terminalleri ayırt etmek için bağlantı varlığını girmeniz gerekir. İş yalnızca bir geçerli bağlantıyla gider.

initialize 1 parametresi daha var (henüz belgelenmedi) mt5.initialize(blabla, portable=True) Terminali taşınabilir modda sabit olarak başlatmak için .

 
Almaz :

Tek bir komut dosyasında 2 terminalle aynı anda çalışmak ister misiniz? Bu mümkün değildir, başlatılacak bir sonraki çağrı ilk terminalle olan bağlantıyı kesecektir, bunun için farklı terminalleri ayırt etmek için bağlantı varlığını girmeniz gerekir. İş yalnızca bir geçerli bağlantıyla gider.

initialize 1 parametresi daha var (henüz belgelenmedi) mt5.initialize(blabla, portable=True) Terminali taşınabilir modda sabit olarak başlatmak için .

Evet, taşınabilir modda çalışan birkaç terminalle çalışmanız gerekiyor. İki farklı terminal ile aynı anda bir bağlantı başlatmanın imkansız olduğu gerçeği, lib'in yapısından belliydi. Burada soru yok.

Bunu sırayla terminallere erişmek için denedim:

 if mt5.initialize(login= 11111 , path= '/works/MT5-1' ...):
        ...   
        mt5.shutdown()
else :
   print( 'error' )

if mt5.initialize(login= 2222 , path= '/works/MT5-2' ...):
        ...   
        mt5.shutdown()
else :
   print( 'error' )

böyle, çalışmıyor. Her durumda, sistemde eller tarafından başlatılan son terminalde kırılır. itibaren piyasaya sürülmesine rağmen

path='/works/MT5-3'
mt5.initialize(blabla, portable=True) - pek yardımcı olmadı, yine de sistemde başlatılan son terminali soruyor.
 

Burada soruyorlar -

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 5 Python Kullanıcı Grubu - kısa bilgi

Nicole Shen , 2020.03.07 15:46

Python ile gelen pip sürümünü kullanarak MetaTrader 5 paketini indirmede sorun var. Çözüm, pip'i güncellemektir. Windows'ta pip'i güncelleme komutu:
python -m pip install -U pip

veya venv kullanarak

(inside virtualenv):easy_install -U pip

 
Almaz :

Tek bir komut dosyasında 2 terminalle aynı anda çalışmak ister misiniz? Bu mümkün değildir, başlatılacak bir sonraki çağrı ilk terminalle olan bağlantıyı kesecektir, bunun için farklı terminalleri ayırt etmek için bağlantı varlığını girmeniz gerekir. İş yalnızca bir geçerli bağlantıyla gider.

initialize 1 parametresi daha var (henüz belgelenmedi) mt5.initialize(blabla, portable=True) Terminali taşınabilir modda sabit olarak başlatmak için .

mt5.terminal_info() öğesinin şunları gösterdiğine dikkat edin:

mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=42381,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')
mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=40849,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')

yol değeri ='C:\\Works\\MT5 - terminaller\\MetaTrader 5', data_path ='C:\\Works\\MT5 - terminaller\\MetaTrader 5', commondata_path ='C:\\Users\\rip \\AppData\\Roaming\\MetaQuotes\\Terminal\\Ortak'

Özdeş. Böyle mi olmalı?

Aşağıdaki kod:

import MetaTrader5 as mt5

def check_order ():
     if mt5.initialize(path='c:\\Works\\MT5 - terminals\\MetaTrader 5 \\terminal64.exe', 
                            login= 25153683 , server='MetaQuotes-Demo', password='',  portable=True):
        print("mt5. version (): ", mt5. version ())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

     if mt5.initialize(path='c:\\Works\\MT5 - terminals\\Alpari MT5\\terminal64.exe', 
                            login= 50518455 , server='Alpari-MT5-Demo', password='',  portable=True):
        print("mt5. version (): ", mt5. version ())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

if __name__ == "__main__":
    check_order()
 
Almaz :

Tek bir komut dosyasında 2 terminalle aynı anda çalışmak ister misiniz? Bu mümkün değildir, başlatılacak sonraki çağrı ilk terminalle olan bağlantıyı kesecektir, bunun için farklı terminalleri ayırt etmek için bağlantı varlığını girmeniz gerekir. İş yalnızca bir geçerli bağlantıyla gider.


Prensipte bir varlık (bağlantı) yaratmak mümkün müdür? Bunun çok gerekli olduğunu düşünmüyorum, ama gelecek için.

Grafiğe başka bir komut dosyası (Py) yüklerken, ilki sıfırlanır. Böyle mi olmalı?