MT용 Python으로 거래 시스템 만들기. - 페이지 3

 
Yuriy Asaulenko :

그것은 다른 주제입니다.)

나는 팀을 구성하지 않습니다. 나는 혼자 걷고, 내가 필요하고 흥미롭다고 생각하는 일을 하며 어떤 의무도 받아들이지 않습니다.

누구든지 나와 함께 걷고 싶다면 - 반대도 없고 의무도 없습니다.

명령을 말하는 것이 아니라 Python과 R을 MQL로 연결하기 위한 EXE 응용 프로그램 형태의 엔진에 대해 이야기하는 것인데, 해당 주제에서 제안했습니다.
 
Ivan Negreshniy :
명령을 말하는 것이 아니라 Python과 R을 MQL로 연결하기 위한 EXE 응용 프로그램 형태의 엔진에 대해 이야기하는 것인데, 해당 주제에서 제안했습니다.

그것은 당신을 위한 EXE가 될 것입니다 - 파이썬에서는 문제가 되지 않습니다. R, 죄송합니다. 나는 그것을 사용하지 않습니다 - IMHO, 모든 것과 모든 것의 큰 덤프. 이 덤프에 다이아몬드가 있으면 찾는 데 문제가 있습니다. SanSanych가 나에게 말하지 않는 한.)

저는 주로 신경망을 다루며 R이 없어도 충분합니다.

그러나 일반적으로 상호 작용 기술은 보편적으로 계획되어 있으며 R에서도 사용할 수 있습니다.

 
이제 애플리케이션이 준비되었으므로 Python과 터미널 데이터 교환을 시작할 때입니다.
우선 가장 단순한 유형의 교환인 파일을 통한 데이터 교환을 선택하겠습니다.
이제 많은 사람들이 잉크병에 투덜거리지만 헛수고입니다. 글쎄, 그들을 보자.)
1. 응용 프로그램을 빌드하고 디버깅 하는 기간 동안 파일 공유가 가장 효과적입니다. 업그레이드를 위한 노력이 필요하지 않습니다. 그리고 애플리케이션을 빌드한 후에는 다른 것으로 대체할 수 있습니다.
2. 대부분의 기성 TS에서는 파일 교환 속도가 충분합니다. 50-100ms. 당신은 부족합니까?
3. RAM-Disk를 통해 파일을 교환할 때 환율은 1.5GB/s에 이릅니다. 지연은 전혀 측정할 수 없습니다.
일반적으로 상대를 무시하고 잊어 버리지 마십시오.))
글쎄요, 사실 우리나 화제가 라이브로 봤다면 마지막 단계에서 또 다른 교류가 계획되어 있습니다.)

CSV 파일을 통해 단말과 교환합니다. 한 방향으로 - 터미널에서 애플리케이션으로.
이해 충돌을 피하기 위해 세마포어 파일을 사용합니다.
따라서 DataTS.csv는 데이터 파일이고 STS.s는 세마포어 파일입니다.
단말은 DataTS.csv에 데이터를 쓰고, 쓴 후 빈 세마포어 파일 STS.s를 생성합니다.
응용 프로그램은 STS.s 세마포 파일이 있는지 확인한 다음 DataTS.csv 파일을 읽고 STS.s 세마포 파일을 삭제합니다.
다음으로, 단말은 STS.s 세마포어 파일의 소멸을 감지하고 그 후에야 DataTS.csv 파일에 새로운 데이터를 씁니다.
Phyton과 MT의 파일 기능에 따라 옵션이 가능합니다. 아직 살펴보지는 않았습니다.
그러나 한 번에 모두가 아니라 먼저 Python으로 작업하고 해당 기능을 결정해야 합니다.
이것이 우리가 할 일입니다.
 
지난번 방문 이후 약간의 변화가 있었습니다. 응용 프로그램이 완전히 기능하게 되었습니다. 이전 게시물에서 작성된 모든 것이 구현되었습니다. 이제 모든 버튼이 작동하고 파일 교환이 구현됩니다.
- 지우기 버튼은 출력 창을 지우고,
- 보내기 버튼은 입력창의 라인을 출력창으로,
- 시작 버튼은 파일 공유를 활성화하고,
- 중지 버튼은 파일 공유를 중지합니다.
이것은 확인하기 쉽습니다. C:\PyTS 폴더를 만들고 그 안에 데이터 파일(DFile.csv)을 넣고 세마포어 파일(SFile.tx)을 넣습니다. 우리의 Python 프로그램은 세마포어 파일을 감지하고, 데이터 파일을 읽고, 그 내용을 출력 창에 인쇄하고, 세마포어 파일을 삭제합니다.
이제 DFile.csv 파일의 데이터를 변경하고 새 세마포 파일을 만들 수 있습니다. 그런 다음 프로그램이 새 데이터를 읽고 출력합니다.
원하는 경우 MQL로 간단한 프로그램을 작성하고 프로그램의 읽기 폴더를 MT가 쓰는 폴더로 변경할 수 있으며 환율, 데이터 누락 가능성 등을 이미 독립적으로 평가할 수 있습니다.
파일 교환을 담당하는 유일한 함수는 FileExchange()입니다. 추가 스레드인 타이머 스레드에서 구현됩니다. 수십 개의 이러한 스레드와 기능이 생성될 수 있으며 어떤 식으로든 애플리케이션 작동에 영향을 미치지 않습니다. 즉, 수십 개의 병렬 및 독립적으로 작동하는 데이터 교환 채널을 마음대로 사용할 수 있습니다.
이제 타이머가 10.0초로 설정되었습니다. 최소 0.001초로 재설정할 수 있습니다. 설명서를 참조하세요.
음, 속도 및 기타 특성을 실제로 측정하려면 교환 경로 에서 인쇄() 디버깅 기능을 제거하면 작업 속도가 크게 감소합니다.
첨부 파일의 Python 프로그램 코드. 평소와 같이 .py로 이름을 바꿉니다.
파일:
PyTS_1.0.txt  3 kb
 

CSV 파일 교환에 대해 이야기했지만 버전 1.0(이전 게시물 참조)에서는 파일을 열고 읽는 것뿐이었습니다. 과정. 버전 - 1.01, 사소한 개선 후에 CSV를 읽고 InData 변수에 저장합니다.

실제로 전체 개정판:

def FileExchange():
    global Change
     if Change==True:
         if os.path.exists(SFile):
            print( "SFile.txt is" )
             if os.path.exists(DFile):
                print( "DFile.csv is" )
                InData = csv.reader(open(DFile, 'r' ))
                data_read = [row for row in InData]
                print(data_read)
                os.remove(SFile)
             else :
                print( "DFile.csv no" )
         else :
            print( "SFile.txt no" )
        print( 'Вывод таймера' )
        timer =threading.Timer( 10.0 ,FileExchange)
        timer.start()

3줄 + csv 라이브러리 연결만 변경했습니다.

InData 변수에서 CSV 콘텐츠의 제어 출력은 다음과 같습니다.

In [18]: [['04.08.2018 14:00', ' 1300', ' 1295', '1310', '1305', '100'], ['04.08.2018 14:10', ' 1307', ' 1297', '1320', '1315', '150']]

이제 행 값은 행, 열과 같은 인덱스로 사용할 수 있습니다.

글쎄, 코드 자체 - 첨부 파일을 참조하십시오.

파일:
PyTS_1.01.txt  3 kb
 
Yuriy Asaulenko :

CSV 파일 교환에 대해 이야기했지만 버전 1.0(이전 게시물 참조)에서는 파일을 열고 읽는 것뿐이었습니다. 과정. 버전 - 1.01, 사소한 개선 후에 CSV를 읽고 InData 변수에 저장합니다.

실제로 전체 개정판:

3줄 + csv 라이브러리 연결만 변경했습니다.

InData 변수에서 CSV 콘텐츠의 제어 출력은 다음과 같습니다.

이제 행 값은 행, 열과 같은 인덱스로 사용할 수 있습니다.

글쎄, 코드 자체 - 첨부 파일을 참조하십시오.

파일을 사용하여 공유하는 것은 최상의 솔루션이 아닙니다. 파일 작업이 매우 느립니다. 이러한 교환을 위해서는 RAM 디스크를 연결해야 합니다.
 
Grigoriy Chaunin :
파일을 사용하여 공유하는 것은 최상의 솔루션이 아닙니다. 파일 작업이 매우 느립니다. 이러한 교환을 위해서는 RAM 디스크를 연결해야 합니다.
파일 교환의 성능 특성(무엇이 무엇인지)과 필요한 작업(필요한 것)을 제공할 수 있습니까?


그리고 나는 예를 들어 그들이 느리지 않고 매우 빠르다고 말할 것입니다. 수치적 특성이 없다면, 당신과 나의 진술은 모두 아무 근거가 없으므로 해결하려는 문제에서 의미가 없습니다. 파일 교환의 특성과 작업 요구 사항이 모두 필요하며, 이를 비교해야만 합리적인 결론에 도달할 수 있습니다. Yuri Asaulenko는 파일이 적합하다고 결정했기 때문에 계획된 데이터 전송 볼륨과 처리 시간을 더 잘 알고 있다고 생각합니다.

일반적으로 디스크 파일은 휘발성 메모리에 비해 부인할 수 없는 이점이 있습니다. 즉, 전원이 꺼진 컴퓨터의 디스크에 저장되며 일주일 또는 1년 안에 볼 수 있습니다. 통제, 분석, 검증, 관찰을 위해.

 
Grigoriy Chaunin :
공유를 위해 파일을 사용하는 것은 최상의 솔루션이 아닙니다. 파일 작업이 매우 느립니다. 이러한 교환을 위해서는 RAM 디스크를 연결해야 합니다.

이 문제는 이 스레드(이전 게시물 포함)에서 이미 논의되었습니다. 필요한 경우 RAM 디스크의 가능한 사용:

응용 프로그램을 빌드하고 디버깅하는 기간 동안 파일 공유가 가장 효과적입니다. 업그레이드를 위한 노력이 필요하지 않습니다. 그리고 애플리케이션을 빌드한 후에는 다른 것으로 대체할 수 있습니다.

2. 대부분의 기성 TS에서는 파일 교환 속도가 충분합니다. 50-100ms. 당신은 부족합니까?
3. RAM-Disk를 통해 파일을 교환할 때 환율은 1.5GB/s에 이릅니다. 지연은 전혀 측정할 수 없습니다.
일반적으로 상대를 무시하고 잊어 버리지 마십시오.))
글쎄요, 사실 우리나 화제가 라이브로 봤다면 마지막 단계에서 또 다른 교류가 계획되어 있습니다.)
또한 주제의 첫 번째 게시물 중 하나에서.
 

PyTS 1.02의 새 버전을 소개합니다. 이 버전은 기능적으로 버전 1.01과 동일하지만 이미 불필요한 print() 컨트롤이 코드에서 제거되었고 클래스 접근 방식이 구현되기 시작했습니다(Lenin은 접근 방식이 클래스 기반이어야 한다고 썼습니다) - CSV 처리 파일은 cCSVJob 클래스에 완전히 위임됩니다.

첨부 파일에 Zip 파일이 있습니다. 여기에서 프로그램의 모든 이전 버전을 찾을 수 있을 뿐만 아니라 PyTS 폴더에는 테스트에 필요한 소스 데이터가 포함된 파일이 있습니다.

파일:
PyTS.zip  6 kb