초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1498

 
안녕하세요.

파일에 데이터를 저장 중입니다.
void OrderExport(MqlTradeRequest &request)
  {
   static long trans = 0;
   static long keepTrans = 0;
   string file = "OrderExchange" + (request.magic > 0 ? IntegerToString(request.magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_CSV | FILE_READ | FILE_SHARE_READ | FILE_WRITE | FILE_SHARE_WRITE | (Common ? FILE_COMMON : 0), ';');
   if(handle != INVALID_HANDLE)
     {
      FileSeek(handle, 0, SEEK_END);
      long tr = TimeGMT();
      trans = (tr > trans) ? tr : (trans + 1);
      FileWrite(handle,
                trans,
                request.action,
                request.magic,

파일에서 데이터 가져오기

void OrderImport(MqlTradeRequest &aReq[], int magic, string symbol)
  {
   ArrayFree(aReq);
   long tr;
   static long trans = 0;
   if(trans == 0)
      trans = TimeGMT() - 3;
   string file = "OrderExchange" + (magic > 0 ? IntegerToString(magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_TXT | FILE_READ | FILE_SHARE_READ | FILE_ANSI | (Common ? FILE_COMMON : 0));
   if(handle != INVALID_HANDLE)
     {
      FileSeek(handle, 0, SEEK_SET);
      while(!FileIsEnding(handle))
        {
         string s = FileReadString(handle);
         string aS[];
         int cnt = StringSplit(s, ';', aS);
         if(cnt <= 0)
            continue;
         //---   ПРОБЛЕМНОЕ МЕСТО ОТ
          tr = StringToInteger(aS[0]);
         //---    ПРОБЛЕМНОЕ МЕСТО ДО
         if(tr <= trans)
            continue;

GetLastError() 오류가 발생했습니다 - 손상된 문자열 유형 매개 변수

Print()를 통해 aS[0] 배열을 출력하면 글꼴이 나머지 부분과 다릅니다.


매개변수 tr 만 출력하면 = 0이 됩니다.

 
Mikhail Toptunov 문자열 유형 매개 변수

Print()를 통해 aS[0] 배열을 출력하면 글꼴이 나머지 부분과 다릅니다.


매개변수 tr 만 출력하면 = 0이 됩니다.

파일 자체를 살펴 보셨나요?

이진 값을 쓰고 텍스트 문자열을 읽고 있습니다....

 
Maxim Kuznetsov #:

파일 자체를 확인해보셨나요?

바이너리 값을 쓰고 텍스트 문자열을 읽고 있습니다...

다음과 같이 가져왔습니다.

void OrderImport(MqlTradeRequest &aReq[], int magic, string symbol)
  {
   ArrayFree(aReq);
   long tr;
   static long trans = 0;
   if(trans == 0)
      trans = TimeGMT() - 1;
   string file = "OrderExchange" + (magic > 0 ? IntegerToString(magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_READ | FILE_SHARE_READ | (Common ? FILE_COMMON : 0));

내보내려면 다음과 같이

void OrderExport(MqlTradeRequest &request)
  {
   static long trans = 0;
   static long keepTrans = 0;
   string file = "OrderExchange" + (request.magic > 0 ? IntegerToString(request.magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_READ | FILE_SHARE_READ | FILE_WRITE | FILE_SHARE_WRITE | (Common ? FILE_COMMON : 0), ';');

가 개선되었지만 첫 번째 매개변수 문자열 (aS[0 ])을 처음 가져오면 항상 오류가 발생합니다.


다음

tr - 번역된 문자열을 int(aS[0]) 에 반영합니다.

파일을 보면 모든 것이 제자리에 있습니다.


그러나 첫 번째 줄의 첫 번째 매개변수 aS[0]을 가져와도 int로 변환되지 않습니다.
 
Aleksandr Slavskii #:

배열을 초기화하지 않으면 쓰레기가 포함되는 경우가 많습니다.

고마워요, 전에도 이런 일이 있었다는 것을 기억했습니다(0은 저를 혼란스럽게 했습니다). 문서에 명시되어 있지 않은 것이 유감이며, 그런 것들을 머릿속에 보관해야합니다.

 
Mikhail Toptunov #:

가져온

내보내기를 위해 다음과 같이

보다 낫지만 첫 번째 매개변수 문자열 (aS[0 ])을 처음 가져오면 항상 오류가 발생합니다.


다음

tr - 번역된 문자열을 int(aS[0]) 에 반영합니다.

파일을 보면 모든 것이 제자리에 있습니다.


그러나 첫 번째 줄의 첫 번째 매개변수 aS[0]을 가져와도 int로 변환되지 않습니다.

어떻게 그럴 수 있을까요? - 첫 번째 aS[0]은 항상 손상됩니다(오류 5040).


 
친절한 분들, 힌트를 주세요. 최적화를 실행하는 작업이 있는데 최적화를 위해 외부 데이터를 사용해야 합니다. 데이터로 파일을 만들고 각 패스마다 파일을 열고 배열에 쓰고 닫습니다. 이 프로세스를 최적화하고 속도를 높이려면 어떻게 해야 하나요?
 
Mikhail Toptunov #:

어떻게 이럴 수 있을까요? - 첫 번째 aS[0]은 항상 깨집니다(오류 5040).


내보내기 및 가져오기에서 UTF-8 인코딩을 설정합니다(또는 최소한 BOM이 없는 동일한 1바이트 인코딩).

(파일을 바이너리 형식으로 보면 처음 두 바이트는 BOM, 즉 유니코드일 가능성이 높습니다) - FileSeek(0,SEEK_SET) 후 읽을 때 문자열로 읽으면 변환이 실패합니다.

 
Maxim Kuznetsov #:
BOM

글쎄, 그것은 효과가있는 것 같습니다. 사실 한 번은 여전히 반영되지 않지만 파일을 삭제하면 적어도 글리치가 멈췄습니다.


FILE_CSV | FILE_READ | FILE_SHARE_READ | FILE_ANSI | (Common ? FILE_COMMON : 0),CP_UTF8

대단히 감사합니다!

 

좋은 아침, 좋은 기분입니다!

MQL5 참조 매뉴얼에 ResultRetcodeExternal에 대한 설명이 없는 것을 발견했습니다. 검색 엔진에서 다음과 같은 답변이 나옵니다: 귀하의 요청에 대해 아무것도 찾을 수 없습니다. 우회적인 방법으로 '외부 거래 시스템에서 반환된 오류 코드'인 것 같다는 것을 알았습니다. 이러한 오류의 철자와 유형은 브로커와 거래 작업이 출력되는 외부 거래 시스템에 따라 다릅니다."라는 답변이 나왔습니다.

질문: 올바른 정의를 찾았나요?

그리고 동시에 문서 개발자에게 두 번째 질문: 그렇다면 이 정의가 무엇인지 사용자가 어디에서나 찾지 않고 즉시 전체 정보를 제공하지 않는 이유는 무엇입니까?

감사합니다, 블라디미르.

 
MrBrooklin #:
결과 리코드 외부

그런 것은 찾을 수 없습니다. MQL5에는 존재하지 않습니다.

retcode_external 필드가 있고 이 필드에 대한 설명이 있는 MqlTradeResult가 있습니다.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Структура результата торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
사유: