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

 
MrBrooklin :

고마워, 맥심!

나는 이미 노력하고 있습니다. 루프가 시작되었지만 파일이 아직 열리지 않습니다. 루프를 실행하고 기다리겠습니다.

안부 인사를 전합니다. 블라디미르.


추신 죄송합니다! 시간 이 걸린다는 사실에 즉시 주의를 기울이지 않았습니다. EUR_USD_QUOTE.csv 파일을 으로 변경했지만 Pycharm 개발 환경의 실행 탭에 다음 메시지가 나타납니다.

�訡��: �� 㤠���� ���� ������ "excel.exe".

그런 다음 1분 정도 더 지나면 파일이 닫히고 다시 열렸지만 이미 Exsel에서는 테이블 왼쪽에 탭이 나타나 이전에 연 텍스트를 저장하도록 제안되었습니다. 다음에 무슨 일이 일어날지 조금 더 기다렸다가 주기가 멈추고 다음 메시지가 나타났습니다.

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, �� �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� ����襭.
역추적(가장 최근 호출 마지막):
<module>의 "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py" 파일, 37행
get_data(save_file='EUR_USD_QUOTE.csv')
get_data의 파일 "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", 23행
open(save_file, 'w')을 저장으로 사용:
PermissionError: [Errno 13] 권한 거부됨: 'EUR_USD_QUOTE.csv'

지금까지는 그런 결과가 있었지만 이미 진전이 있습니다!

안부 인사를 전합니다. 블라디미르.

여기에서 여전히 Excel을 닫을 시간이 없을 수 있으며 이미 파일에 액세스하려고 시도하고 있습니다.

 while True:
    t = datetime .now().hour
     if (t2 != t):
        os.system("TASKKILL /F /IM excel.exe") 
	time.sleep( 10 )
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep( 10 )

여기에 5-10초의 지연을 삽입하면 프로그램은 Excel이 닫힐 때까지 기다립니다.

왼쪽 창으로 무엇을 해야할지 아직 파악하지 못했습니다)

 
MrBrooklin :

파이썬 언어를 사용하여 인터넷에서 따옴표를 터미널이 아니라 csv와 같은 일부 파일에서 보는 방법을 배우고 싶습니다. 가장 기본적인 작업인줄 알았는데 그게 아니더군요. 내가 잘못된 길을 가고 있는지도 모르지만, 아무것도 찾지 않는 사람은 아무것도 찾지 못합니다.

이제 제안하신 코드로 넘어가겠습니다. 코드가 실행된 후 Pycharm 개발 환경에 다음 과 같은 메시지가 나타납니다.

역추적(가장 최근 호출 마지막):
파일 "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", 줄 25, <모듈>
기본()
파일 "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", 13행, 메인
eurusd_bid = 수프.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType' 개체에 'text' 속성이 없습니다.

종료 코드 1로 프로세스 완료

코드가 어떻게 작동하는지 보려면 무엇을 변경해야 합니까?

존경합니다, 블라디미르.

작동하지 않는 이유는 이 사이트에서 요청을 보내는 것을 차단했기 때문입니다. 사용자 에이전트를 속여야 한다는 사실은 그들이 원하지 않는 일을 하고 있다는 암시로 여겨졌습니다. 웹 크롤링은 이 주제의 범위를 훨씬 벗어나므로 이에 대한 이야기를 중단하고 주제로 돌아가야 합니다. MetaTrader5 패키지 사용에 대해 질문이 있습니까?

 
Maxim Dmitrievsky :

여기에서 여전히 Excel을 닫을 시간이 없을 수 있으며 이미 파일에 액세스하려고 시도하고 있습니다.

여기에 5-10초의 지연을 삽입하면 프로그램은 Excel이 닫힐 때까지 기다립니다.

왼쪽 창으로 무엇을 해야할지 아직 파악하지 못했습니다)

Maxim, 마무리하는 데 도움을 준 코드에 대해 대단히 감사합니다. 왼쪽 패널은 지금까지 거의 문제가 되지 않습니다. 나는 당신의 새 코드를 나중에, 아마도 주말에 추가할 것입니다. 왜냐하면 오늘은 직장에서 완전히 막혔습니다. 긴장을 풀 필요가 있습니다. 새로운 결과가 나오는 대로 반드시 알려 드리겠습니다.

안부 인사를 전합니다. 블라디미르.

 

MT5 라이브러리 는 오픈 주문 시간을 어떤 오프셋으로 반환합니까?

def checkPositions(self):
         return mt5.positions_get(symbol=self.symbol)

pos = trade.checkPositions()
pos[ 0 ].time

>>> pos[ 0 ].time
1598035196

datetime . datetime .fromtimestamp(pos[ 0 ].time).strftime("%A, %B %d, %Y %I:%M:%S")

>>> datetime . datetime .fromtimestamp(pos[ 0 ].time).strftime("%A, %B %d, %Y %I:%M:%S")
' Saturday, August 22 , 2020 01 : 39 : 56 '

하지만 터미널에서는 다른 시간입니다.

파이썬 프로그램의 시간을 주문(위치) 시간과 올바르게 동기화하는 방법은 무엇입니까?

 
Maxim Dmitrievsky :

MT5 라이브러리 는 오픈 주문 시간을 어떤 오프셋으로 반환합니까?

하지만 터미널에서는 다른 시간입니다.

파이썬 프로그램의 시간을 주문(위치) 시간과 올바르게 동기화하는 방법은 무엇입니까?

먼저 거래 서버의 정확한 시간대를 알아야 합니다. 그런 다음 pytz로 시간대 객체를 만듭니다. 마지막으로 timezone 객체를 메서드에 전달합니다.

import datetime as dt

import pytz
import pymt5adapter as mta


def main():
    broker_timezone = pytz.timezone('Etc/UTC')
     for position in mta.positions_get():
        time = dt. datetime .fromtimestamp(position.time, tz=broker_timezone)
        print(time)


if __name__ == '__main__':
    with mta.connected():
        main()
https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones
Is there a list of Pytz Timezones?
Is there a list of Pytz Timezones?
  • 2012.12.13
  • ipegasus
  • stackoverflow.com
I would like to know what are all the possible values for the timezone argument in the Python library pytz. How to do it?
 
nicholish en :

먼저 거래 서버의 정확한 시간대를 알아야 합니다. 그런 다음 pytz로 시간대 객체를 만듭니다. 마지막으로 timezone 객체를 메서드에 전달합니다.

https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones

고마워, 나는 그것을 시도 할 것이다

시간을 자동으로 동기화하고 싶습니다. tk. 거래 서버가 변경될 수 있습니다
 
Maxim Dmitrievsky :

고마워, 나는 이것을 시도 할 것이다

무역 서버가 변경될 수 있으므로 시간을 자동으로 동기화하고 싶습니다.

UNIX 타임스탬프는 시간대에 구애받지 않으므로 타임스탬프 시간대 인식 컨텍스트를 제공하려면 브로커 시간대를 알아야 합니다. 그렇게 하는 유일한 방법은 거래 서버의 시간대 설정을 아는 것입니다. 프로그래밍 방식으로 해당 정보를 얻을 수 있는 방법이 없다고 생각합니다. 당신이 할 수 있는 일은 당신이 사용하고 있는 다른 무역 서버를 시간대에 매핑하기 위한 설정 파일을 만드는 것입니다. 예시:


config.json

{
     "servers" : {
         "MetaQuotes-Demo" : {
             "timezone" : "Europe/Moscow"
        },
         "AMPGlobalUSA-Demo" : {
             "timezone" : "Etc/UTC"
        }
    }
}
 
nicholish en :

UNIX 타임스탬프는 시간대에 구애받지 않으므로 타임스탬프 시간대 인식 컨텍스트를 제공하려면 브로커 시간대를 알아야 합니다. 그렇게 하는 유일한 방법은 거래 서버의 시간대 설정을 아는 것입니다. 프로그래밍 방식으로 해당 정보를 얻을 수 있는 방법이 없다고 생각합니다. 당신이 할 수 있는 일은 당신이 사용하고 있는 다른 무역 서버를 시간대에 매핑하기 위한 설정 파일을 만드는 것입니다. 예시:


config.json

음..네

pytz 없이 더 쉬운 방법:

pt = datetime . datetime .utcfromtimestamp(pos[ 0 ].time) // position open time by mt5 time
tt = datetime . datetime .utcnow() + datetime .timedelta(hours= 3 )   // current server time (from mt5 clock)

delta = tt-pt
>>> delta
datetime .timedelta(seconds= 2139 , microseconds= 506786 ) // position lifetime
또한 EA를 시작하기 전에 가격에서 멀리 떨어진 하나의 보류 중인 주문을 열 수 있습니다. 그리고 'pt'와
 datetime .utcnow()
시간을 자동으로 오프셋하려면
 
Maxim Dmitrievsky :

음..네

pytz 없이 더 쉬운 방법:

또한 EA를 시작하기 전에 가격에서 멀리 떨어진 하나의 보류 중인 주문을 열 수 있습니다. 그리고 'pt' 사이의 시간 차이를 비교하고 시간을 자동으로 오프셋합니다.

저도 같은 생각을 하다가 시간대가 없는 유닉스 타임스탬프에 주문 시간이 저장되어 있었던 걸로 기억합니다. 즉, 타임스탬프는 시간대에 관계없이 동일하기 때문에 주문 타임스탬프에서 브로커 시간대를 외삽할 수 없습니다. GMT 오프셋을 알고 싶다면 현재 터미널(브로커) 시간을 알아야 하며 현재 파이썬을 사용하여 현재 터미널 시간 또는 GMT 오프셋을 얻을 수 있는 방법이 없습니다.

 
Maxim Dmitrievsky :

여기에서 여전히 Excel을 닫을 시간이 없을 수 있으며 이미 파일에 액세스하려고 시도하고 있습니다.

여기에 5-10초의 지연을 삽입하면 프로그램은 Excel이 닫힐 때까지 기다립니다.

왼쪽 창으로 무엇을 해야할지 아직 파악하지 못했습니다)

안녕하세요 맥심입니다!

앞서 주말에 지연 코드를 추가하여 옵션을 확인하겠다고 약속했습니다. 확인했지만 지연은 아무 영향도 미치지 않았습니다. 왼쪽 탭에는 문제가 없기 때문입니다. 나는 그것에 관심을 기울이지 않습니다.

다시 한번, 도움을 주셔서 대단히 감사합니다. 이 스레드에서 더 이상 질문하지 않겠습니다.

안부 인사를 전합니다. 블라디미르.