MetaTrader 5 Python 사용자 그룹 - Metatrader에서 Python을 사용하는 방법 - 페이지 51

 
MetaQuotes :

Python 라이브러리 5.0.25의 새 빌드 출시

다음을 통해 업데이트하십시오.

여러분, 다음과 같은 개체를 추가하도록 요청할 수 있습니다.

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')

__dict__ 또는 as_dict()를 추가하세요.

파이썬에서는 동일한 dict/list와 같은 표준 구조로 작업하는 것이 훨씬 더 편리합니다.

('__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)

나중에 이 클래스(및 기타 유사한 클래스)에서 사전을 꺼내고 이미 작업하고 싶습니다.

 

initialize()에 대한 질문, 예

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
   )

/portable을 실행하는 두 터미널의 경로 경로에 각각

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

и 

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

그러나 동시에 초기화 를 위한 모든 호출은 터미널의 마지막 실행 인스턴스로 중단됩니다.

각각 MT 빌드 2360 및 MetaTrader5-5.0.26-cp38-cp38-win32.whl

뭐가 문제 야? 경로는 다른 논리와 함께 사용해야 합니까, 아니면 다른 것이 /portable에 전달되어야 합니까?

 

실제 코드를 보여주세요.

아직 경로에 매개변수를 허용하지 않습니다.

 
Renat Fatkhullin :

실제 코드를 보여주세요.

아직 경로에 매개변수를 허용하지 않습니다.

코드는 다음과 같습니다.

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()

마지막으로 실행된 터미널:

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

스크린샷으로 판단하면 항소는 마지막으로 시작된 항소로 갔다.

그리고 나는 그가 언급 한 구체적으로 전화하고 싶습니다.

 
Renat Fatkhullin :

아직 경로에 매개변수를 허용하지 않습니다.

음... 이 순간, 그 값을 잘 이해하지 못했는데, 매개변수가 아니라도 이 자리에서 config에서 연결 매개변수를 꺼냅니다.

             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()에 대한 질문, 예

/portable을 실행하는 두 터미널의 경로 경로에 각각

그러나 동시에 초기화 를 위한 모든 호출은 터미널의 마지막 실행 인스턴스로 중단됩니다.

각각 MT 빌드 2360 및 MetaTrader5-5.0.26-cp38-cp38-win32.whl

뭐가 문제 야? 경로는 다른 논리와 함께 사용해야 합니까, 아니면 다른 것이 /portable에 전달되어야 합니까?

하나의 스크립트에서 2개의 터미널로 동시에 작업하고 싶습니까? 이것은 불가능합니다. 초기화를 위한 다음 호출은 첫 번째 터미널과의 연결을 끊을 것입니다. 이를 위해 다른 터미널을 구별하기 위해 연결 엔터티를 입력해야 합니다. 작업은 하나의 현재 연결로만 진행됩니다.

initialize 에는 휴대용 모드에서 터미널을 하드 시작하기 위한 1개의 매개변수가 더 있습니다 ( 아직 문서화되지 않음).

 
Almaz :

하나의 스크립트에서 2개의 터미널로 동시에 작업하고 싶습니까? 이것은 불가능합니다. 초기화를 위한 다음 호출은 첫 번째 터미널과의 연결을 끊을 것입니다. 이를 위해 다른 터미널을 구별하기 위해 연결 엔터티를 입력해야 합니다. 작업은 하나의 현재 연결로만 진행됩니다.

초기화에는 휴대용 모드에서 터미널을 하드 시작하기 위한 1개의 매개변수(아직 문서화되지 않음)가 더 있습니다.

예, 휴대용 모드에서 실행되는 여러 터미널로 작업해야 합니다. 두 개의 서로 다른 터미널과의 연결을 동시에 초기화할 수 없다는 사실은 lib 자체의 구조를 보면 알 수 있다. 여기에는 질문이 없습니다.

터미널에 차례로 액세스하기 위해 이것을 시도했습니다.

 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' )

이와 같이 작동하지 않습니다. 모든 경우에 시스템에서 손으로 시작한 마지막 터미널에서 중단됩니다. 에서 출시되었음에도 불구하고

path='/works/MT5-3'
mt5.initialize(blabla, Portable=True) - 별로 도움이 되지 않았지만 여전히 시스템에서 시작된 마지막 터미널을 묻습니다.
 

그들은 여기에 묻습니다 -

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MetaTrader 5 Python 사용자 그룹 - 간략한 정보

니콜 셴 , 2020.03.07 15:46

python과 함께 제공되는 pip 버전을 사용하여 MetaTrader 5 패키지를 다운로드하는 데 문제가 있습니다. 해결 방법은 pip를 업데이트하는 것입니다. Windows에서 pip를 업데이트하는 명령:
python -m pip install -U pip

또는 venv를 사용하여

(inside virtualenv):easy_install -U pip

 
Almaz :

하나의 스크립트에서 2개의 터미널로 동시에 작업하고 싶습니까? 이것은 불가능합니다. 초기화를 위한 다음 호출은 첫 번째 터미널과의 연결을 끊을 것입니다. 이를 위해 다른 터미널을 구별하기 위해 연결 엔터티를 입력해야 합니다. 작업은 하나의 현재 연결로만 진행됩니다.

initialize에는 휴대용 모드에서 터미널을 하드 시작하기 위한 1개의 매개변수가 더 있습니다 ( 아직 문서화되지 않음).

mt5.terminal_info()는 다음을 보여줍니다.

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')

경로 ='C:\\Works\\MT5 - 터미널\\MetaTrader 5', data_path ='C:\\Works\\MT5 - 터미널\\MetaTrader 5', commondata_path ='C:\\Users\\rip \\AppData\\Roaming\\MetaQuotes\\터미널\\공통'

동일합니다. 그래야만 합니까?

아래 코드:

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 :

하나의 스크립트에서 2개의 터미널로 동시에 작업하고 싶습니까? 이것은 불가능합니다. 초기화를 위한 다음 호출은 첫 번째 터미널과의 연결을 끊을 것입니다 . 이를 위해 다른 터미널을 구별하기 위해 연결 엔터티를 입력해야 합니다. 작업은 하나의 현재 연결로만 진행됩니다.


원칙적으로 엔터티(연결) 생성이 가능한가요? 나는 이것이 그렇게 필요하다고 생각하지 않지만 미래를 위해 생각합니다.

차트에 다른 스크립트(Py)를 설치하면 첫 번째 스크립트가 재설정됩니다. 그래야만 합니까?