Experts: "MQL5를 이용한 알고리즘 트레이딩을 위한 신경망" 책의 예시 - 페이지 2

 

안녕하세요,

책에 있는 첫 번째 스크립트를 실행하려고 하는데, 이 스크립트는 CSV 파일을 생성합니다.

초기_데이터.mq5라는 파일입니다.

첫 번째 단계에서 스크립트를 실행할 때

If(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||

CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||

CopyHigh(_Symbol, PERIOD_M5, Start, End, high) <= 0 ||

CopyLow(_Symbol, PERIOD_M5, Start, End, low) <= 0)

반환합니다;

CopyClose는 항상 -1과 같으며

스크립트가 충돌하고 다시 실행해도 도움이되지 않으며 댓글에서 읽은 것처럼 이것은 정상적인 상황입니다.

이것은 정상적인 상황이며 서버에서 데이터가 없음을 의미합니다.

그러나이 스크립트에서 데이터 파일의 경로가 어떻게 작성되는지 완전히 이해하지 못합니다.

MQL5 문서에 기록되어 있습니다:


예를 들어, MetaQuotes-Demo 거래 서버의 EURUSD 심볼 데이터는terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\폴더에 있습니다.


그리고 .hcc 해상도의 파일과 H4.hc와 같은 파일이 있는 하위 디렉터리 \cache가 있습니다.


하지만 초기_데이터.mq5 스크립트에서 경로가 기록되는 곳은 한 곳뿐입니다.

PrintFormat("상관 계수가 %s\\\\파일\\\\%s 파일에 저장되었습니다."),

터미널정보 문자열(터미널_데이터_경로), 파일 이름);


TERMINAL_DATA_PATH를 출력합니다.

2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Users\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


이러한 파일의 경로를 올바르게 지정하려면 어떻게 해야 하나요? 아니면 MQL5 로직에 따라 터미널 디렉터리에서 자동으로 파일을 연결해야 하나요?

데이터를 CSV 파일로 다운로드하려면 어떻게 해야 하나요?


 
bobozel1 #:

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트 포럼

MQL4 및 MQL5에 대한 초보자의 질문, 알고리즘 및 코드에 대한 도움말 및 토론

알렉세이 뱌즈미킨, 2024.06.18 06:28 오후

#define FileName  "correlation.csv"
//+------------------------------------------------------------------+
//| 외부 매개변수|
//+------------------------------------------------------------------+
input datetime Start = D'2015.01.01 00:00:00';  // 기간의 시작
input datetime End = D'2020.12.31 23:59:00';    // 기간 종료
//--- 파일을 열어 데이터 쓰기
   int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8);
   if(handle == INVALID_HANDLE)
     {
      PrintFormat("Error of open file %s: %d", FileName, GetLastError());
      return;
     }
FileOpen

파라미터

open_flags

파일 작업 모드를 정의하는 플래그의[인] 조합입니다. 플래그는 다음과 같이 정의됩니다:
FILE_READ 읽기용 파일 열기
FILE_WRITE쓰기용 파일 열기
F ILE_BIN이진 읽기-쓰기 모드(문자열과의 변환 없음)
F ILE_CSV형식의 파일(모든 쓰기 요소는 적절한 형식의 문자열, 유니코드 또는 ansi로 변환되고 구분자로 구분됨)
FILE_TXT일반 텍스트 파일(동일한 csv, 구분 기호는 고려되지 않음)
FILE_ANSIANSI 타입의 문자열(단일 바이트 문자)
F ILE_UNICODE유니코드 타입의 문자열(이중 바이트 문자)
FILE_SHARE_READ여러 프로그램에서 공유 읽기 액세스
FILE_SHARE_WRITE여러 프로그램에서 공유 쓰기 액세스
FILE_COMMON모든 클라이언트 터미널의 공통 폴더 \Terminal\Common\Files에 있는 파일 위치.

FileOpen

참고

보안상의 이유로 파일 작업은 MQL5 언어에서 엄격하게 통제됩니다. MQL5 언어 도구를 사용하여 파일 작업에 사용되는 파일은 파일 "샌드박스" 외부에 위치할 수 없습니다.

특정 인코딩으로 파일을 읽어야 하는 경우( 코드 페이지 값이 지정된 코드 페이지 매개 변수가 지정됨) FILE_ANSI 플래그를 설정해야 합니다. FILE_ANSI 플래그를 지정하지 않으면 텍스트 파일은 변환 없이 유니코드로 읽혀집니다.

파일은 클라이언트 터미널의 폴더에 있는 MQL5\Files 하위 폴더 (테스트의 경우 테스트 에이전트_에이전트\MQL5\Files 디렉토리)에서 열립니다. 플래그 중 FILE_COMMON이 지정되어 있으면 모든 클라이언트 터미널의 공통 폴더인 \Terminal\Common\Files에 파일이 열립니다.

다음 규칙에 따라 '명명된 채널'을 열 수 있습니다:

  • 채널 이름은 다음과 같은 형식의 문자열이어야 합니다: "\\서버명\파이프\파이프명" 형식이어야 하며, 여기서 서버명은 네트워크에 있는 서버의 이름이고 파이프명은 채널의 이름입니다. 동일한 컴퓨터에서 채널을 사용하는 경우 서버 이름은 생략할 수 있지만 대신 "\\.\pipe\pipename"이라는 점을 사용해야 합니다. 채널에 연결하려는 클라이언트는 채널의 이름을 알고 있어야 합니다.
  • 채널에서 읽고 채널에 쓰는 연속적인 작업 사이에 파일 시작 부분에 FileFlush()FileSeek()를 호출해야 합니다.

위 줄에는 특수 백슬래시 문자 '\'가 사용되므로 MQL5 프로그램에서 이름을 작성할 때는 '\'를 두 배로 늘려야 합니다. 즉, 위의 예는 "\\\\서버명\\파이프\\파이프명"으로 코드에 작성해야 합니다.

명명된 채널 작업에 대한 자세한 내용은 "DLL 없이 명명된 채널을 통한 메타트레이더 5와의 통신" 문서를 참고하시기 바랍니다.


 
Aleksey Vyazmikin #

솔직히 로봇이 글을 쓰는 것처럼 답변에서 아무것도 이해하지 못했습니다. 생성 할 파일이 어디에 쓰여지는지 알고 있지만 생성되지 않습니다.

.hcc 및 .hc 파일에서 데이터를 가져와 .csv에 쓰는 방법에 대한 구체적인 질문이 있습니다.

결과적으로 책에서 initial_data.mq5 스크립트를 실행합니다 :

CopyClose는 항상 -1입니다. 이 문제를 어떻게 해결하나요?

데이터 파일 경로의 철자가 올바르지 않아서 이러한 파일이 표시되지 않는 것 같습니다.

데이터 파일 경로의 철자를 올바르게 입력하려면 어떻게 해야 하나요?

제 경우 데이터 파일은 샌드박스 내부의 terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ 폴더에 있습니다.

일주일 동안 이 문제로 어려움을 겪고 있으며 모든 것을 읽었지만 해결책을 찾지 못했습니다. 제발 도와주세요.

 
bobozel1 #:

솔직히 로봇이 글을 쓰는 것처럼 답변에서 아무것도 이해하지 못했습니다. 생성할 파일이 어디에 작성되는지 알지만 생성되지 않습니다.

.hcc 및 .hc 파일에서 데이터를 가져와 .csv에 쓰는 방법에 대한 구체적인 질문이 있습니다.

결과적으로 책에서 initial_data.mq5 스크립트를 실행합니다 :

CopyClose는 항상 -1입니다. 이 문제를 어떻게 해결하나요?

데이터 파일 경로의 철자가 올바르지 않아서 이러한 파일이 표시되지 않는 것 같습니다.

데이터 파일의 경로를 올바르게 지정하려면 어떻게 해야 하나요?

제 경우 데이터 파일은 샌드박스 내부의 terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ 폴더에 있습니다.

일주일 동안 이 문제로 어려움을 겪고 있으며 모든 것을 읽었지만 해결책을 찾지 못했습니다. 제발 도와주세요.

모든 데이터는 플랫폼에서 가져 오며 사용자는 터미널이 어떤 파일에서 가져 오는지 상관하지 않습니다.

스크립트는 차트에 반영된 데이터와 함께 작동합니다.

차트에 견적을 요청하는 날짜가 있는지 확인하세요.

 
Aleksey Vyazmikin #:

모든 데이터는 플랫폼에서 가져오고, 사용자는 터미널이 어떤 파일에서 데이터를 가져오는지 신경 쓰지 않습니다.

스크립트는 차트에 반영된 데이터로 작동합니다.

차트에 견적을 요청하는 날짜가 있는지 확인합니다.

이것이 무엇을 의미하는지 설명해 주세요.

스크립트에는 다음과 같은 범위가 있습니다.

입력 날짜 시간 시작 = D'2015.01.01.01 00:00:00'; // 기간 시작

입력 날짜 시간 종료 = D'2020.12.31 23:59:00'; // 기간 종료

M5에서

M5에서 EURUSD 차트를 가져와서 2015.01.01 로 스크롤한 다음 스크립트를 실행해야 하나요?

아니면 MN에서 스크립트를 실행할 수 있나요? 그리고 새로운 틱을 사용하면 처음으로 돌아가나요?
 
bobozel1 #:

그게 무슨 뜻인지 설명해 주시겠어요?

스크립트에는 다음과 같은 범위가 있습니다.

입력 날짜 시간 시작 = D'2015.01.01.01 00:00:00'; // 기간 시작

입력 날짜 시간 종료 = D'2020.12.31 23:59:00'; // 기간 종료

M5에서

M5에서 EURUSD 차트를 가져와서 2015.01. 01로 스크롤한 다음 스크립트를 실행해야 하나요?

아니면 MN에서 스크립트를 실행할 수 있나요? 그리고 새 틱을 사용하면 다시 처음으로 이동하나요?

터미널의 도움말을 읽어보세요. 그리고 여기에 또 다른 것이 있습니다.

창에 최대 막대 수를 통해 기록 깊이 설정이 있다는 것을 알 수 있습니다. 변경 사항을 적용하려면 터미널을 다시 로드해야 합니다.

따라서 작업에 필요한 가장 작은 TF에서 모든 TF의 최대 기록 깊이를 한 번에 설정해야합니다.

일 단위로 100개의 막대와 분 단위로 100개의 막대는 막대의 깊이가 같지만 날짜 단위는 그렇지 않다는 것은 분명합니다.

필요한 값 또는 "무제한"을 설정하고 터미널을 다시 로드할 때 필요한 기간 동안 이력을 사용할 수 있는 경우 월별 TF에서 스크립트를 실행할 수 있습니다.


 
Aleksey Vyazmikin #:

터미널 도움말을 읽어보세요. 그리고 여기 있습니다.

창에 있는 최대 막대 수를 통해 기록 깊이 설정이 있다는 것을 알게 될 것입니다. 변경 사항을 적용하려면 터미널을 다시 로드해야 합니다.

따라서 작업에 필요한 가장 작은 TF에서 모든 TF의 최대 기록 깊이를 한 번에 설정해야합니다.

일 단위로 100개의 막대와 분 단위로 100개의 막대는 막대의 깊이가 같지만 날짜는 그렇지 않다는 것이 분명합니다.

필요한 값 또는 "무제한"을 설정하고 터미널을 다시 로드할 때 필요한 기간 동안 이력을 사용할 수 있는 경우 월별 TF에서 스크립트를 실행할 수 있습니다.


감사합니다! 모든 것이 작동했습니다.
 
bobozel1 #:
감사합니다! 성공했습니다.

천만에요.

 
가장 골치 아픈 것은 그게 아닙니다. 가장 번거로운 것은 매개변수를 최적화한 후에는 1년 동안만 이길 수 있다는 것입니다. 다른 해에 변경하면 다시 작동하지 않습니다. 즉, 저자의 제안은 실현 가능성이 없다는 뜻입니다. 매개 변수는 해마다 크게 다를 수 있습니다. 어쩌면 매년 수익을 낼 수 있는 매개변수는 존재하지 않을 수도 있습니다!
 

이 책을 위해 노력해 주신 Dmitry에게 감사드립니다. 정말 유용합니다.

책에는 설명이 없지만 neuronbase.mqh에서는 다음과 같이 ElasticNet 정규화 방법을 구현하고 있습니다.

m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0]

하지만 기본 공식(+) 이나 Keras 소스 코드(+)와는 다릅니다.

구현 방법에 대해 설명해 주세요. 전체 공식 대신 람다를 사용하는 이유와 가중치 중 하나에 가중치를 곱하고 다른 가중치와 합산하는 이유에 대해 설명해 주세요.

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.07.15
  • www.mql5.com
Trader's profile