초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 147

 

EA는 다음 형식의 파일에서 데이터 배열을 읽어야 합니다. 날짜 정수1 정수2 정수3 정수4, bin을 제외한 모든 파일 형식에서 가능합니다.

파일을 C:\Users\Mikhail\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv 폴더에 복사했습니다.

이 폴더에서 제거됩니다

여기 코드가 있습니다


 int File()
{
int P= 0 ;

int filehandle= FileOpen ( "qqq.csv" , FILE_READ | FILE_CSV , "," ); 
if (filehandle!= INVALID_HANDLE ) 
     { 
     datetime d = FileReadDatetime (filehandle);
   int I= FileReadNumber (filehandle);
     FileClose (filehandle);
     Comment (d+ " " +I);
     }
     else { Comment ( "qqq.csv" );}
return P;

}

테스터가 파일을 삭제하지 않을 폴더의 경로를 지정할 수 있습니까? 테스트하는 동안 이 폴더에서 모든 파일이 삭제된다는 것을 알고 있지만 프로그래밍 방식으로 파일을 만들 때 이 폴더에 저장됩니다.

 
Mikhail Simakov :

EA는 다음 형식의 파일에서 데이터 배열을 읽어야 합니다. 날짜 정수1 정수2 정수3 정수4, bin을 제외한 모든 파일 형식에서 가능합니다.

파일을 C:\Users\Mikhail\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv 폴더에 복사했습니다.

이 폴더에서 제거됩니다

여기 코드가 있습니다

테스터가 파일을 삭제하지 않을 폴더의 경로를 지정할 수 있습니까? 테스트하는 동안 이 폴더에서 모든 파일이 삭제된다는 것을 알고 있지만 프로그래밍 방식으로 파일을 만들 때 이 폴더에 저장됩니다.

FILE_COMMON 플래그 와 함께 FileCopy 를 사용해야 할 수도 있습니다. 새로운 테스트는 처음부터 작동하므로 결함일 수 있습니다.

 
Konstantin Nikitin :

FILE_COMMON 플래그 와 함께 FileCopy 를 사용해야 할 수도 있습니다. 새로운 테스트는 처음부터 작동하므로 결함일 수 있습니다.

테스트 중에 폴더에 복사하면 파일을 읽는 것으로 밝혀짐)) 이제 구분 기호를 처리합니다.

 

저는 MQL4에서 거래 패널을 작성하기 시작했으며 여기에 역설이 있습니다. 모든 것이 괜찮아 보이지만 TF를 변경할 때마다 다른 표시기의 선과 텍스트가 이미 내 패널 위에 그려집니다.

내가 확인한 내용은 다음과 같습니다. TF를 변경할 때 OBJPROP_BACK 매개변수 = false입니다. 즉, 이 쪽에서 모든 것이 정상입니다.

이것에 대한 아이디어가 있습니까?

추신 사실, 방금 확인했는데 소스 코드(프로토타입으로 가져옴)도 같은 방식으로 작동합니다. TF를 변경하면 패널 상단에 일반 선이 그려지고 OOP를 사용하지 않는 지표에 의해 생성됩니다.
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7 :

저는 MQL4에서 거래 패널을 작성하기 시작했으며 여기에 역설이 있습니다. 모든 것이 괜찮아 보이지만 TF를 변경할 때마다 다른 표시기의 선과 텍스트가 이미 내 패널 위에 그려집니다.

내가 확인한 내용은 다음과 같습니다. TF를 변경할 때 OBJPROP_BACK 매개변수 = false입니다. 즉, 이 쪽에서 모든 것이 정상입니다.

이것에 대한 아이디어가 있습니까?

추신 사실, 방금 확인했는데 소스 코드(프로토타입으로 가져옴)도 같은 방식으로 작동합니다. TF를 변경하면 패널 상단에 일반 선이 그려지고 OOP를 사용하지 않는 지표에 의해 생성됩니다.
https://www.mql5.com/ru/code/19220

시간 전환 시 다른 프로그램에서 생성된 객체는 삭제되고 즉시 새로운 객체가 생성됩니다. 패널의 개체는 삭제되지 않으므로 "오래된" 것입니다. 차트에서 원칙이 적용됩니다. "누가 마지막이고 그가 맨 위에 있습니다"

또한 DeInit()에서 패널의 개체를 삭제하고 새 개체를 다시 만들어야 합니다.

 
Goya7 :

나는 MQL4에서 거래 패널을 작성하기 시작했고 여기에 역설이 있습니다. 모든 것이 괜찮아 보이지만 TF를 변경할 때마다 다른 표시기의 선과 텍스트가 이미 내 패널 위에 그려집니다.

내가 확인한 내용은 다음과 같습니다. TF를 변경할 때 OBJPROP_BACK 매개변수 = false입니다. 즉, 이 쪽에서 모든 것이 정상입니다.

이것에 대한 아이디어가 있습니까?

추신 사실, 방금 확인했는데 소스 코드(프로토타입으로 가져옴)도 같은 방식으로 작동합니다. TF를 변경하면 패널 상단에 일반 선이 그려지고 OOP를 사용하지 않는 지표에 의해 생성됩니다.
https://www.mql5.com/ru/code/19220
비탈리 무지첸코 :

시간 전환 시 다른 프로그램에서 생성된 객체는 삭제되고 즉시 새로운 객체가 생성됩니다. 패널의 개체는 삭제되지 않으므로 "이전"입니다. 차트에서 원칙이 적용됩니다. "누가 마지막이고 그가 맨 위에 있습니다"

또한 DeInit()에서 패널의 개체를 삭제하고 새 개체를 다시 만들어야 합니다.

이벤트에서 새 개체 생성을 포착하고 패널을 다시 그리는 것이 좋습니다.

 
Vitaly Muzichenko :

시간 전환 시 다른 프로그램에서 생성된 객체는 삭제되고 즉시 새로운 객체가 생성됩니다. 패널의 개체는 삭제되지 않으므로 "오래된" 것입니다. 차트에서 원칙이 적용됩니다. "누가 마지막이고 그가 맨 위에 있습니다"

또한 DeInit()에서 패널의 개체를 삭제하고 새 개체를 다시 만들어야 합니다.

생각해주셔서 감사합니다. DeInit()에서는 물론 제거됩니다. TF를 변경할 때 Init() 절차는 통과하지만 패널이 다시 그려지지 않는다는 메시지가 표시됩니다. 즉: 내 위치에 지리적으로 위치한 다른 패널을 실험하고 설치한 다음 제거했습니다. 광산도 사라졌습니다(TF 변경 전). 즉, 다시 그려지지 않습니다. ((
다시 그리는 방법에 대해 조금 더 알려주시겠습니까?


타라스 슬로보디아닉 :

이벤트에서 새 개체 생성을 포착하고 패널을 다시 그리는 것이 좋습니다.

방법을 알려주세요. 저는 프로그래머로서 30분밖에 지나지 않았습니다. :)
 
int OnInit ()
{
ChartSetInteger ( 0 , CHART_EVENT_OBJECT_CREATE , true );
}


void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
//событие создания нового объекта на чарте
if (id== CHARTEVENT_OBJECT_CREATE && StringFind (sparam, prefix, 0 )< 0 )
   {
   //удаляем панель и рисуем заново

   ChartRedraw ();
   }
}

추신. 나는 기억했습니다 - 당신은 여전히 생성 된 개체 의 이름을 확인해야 자신의 개체가 아닙니다 (접두사 - 개체 이름의 접두사).
또는 이름 대신 객체 유형을 비교하십시오.

 
내가 제대로 하고 있는지 시민들이 말해줘!!! 어드바이저가 30이나 70 존에 들어가지 않았을 때 거래를 하고 들어왔을 때 거래를 하지 않았다는 것은 필수!!! 그럼 됐지?

RSI3 = iRSI(_Symbol, _Period, RSIPPeriod, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);

부울 RSItf = RSI3 > 30 && 30 > RSI4;
if(RSItf == 참)
{
}
또 다른
{
주문 보내기 (_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
부울 RSItf = RSI3 > 70 && 70> RSI4;
if(RSItf == 참)
{
}
또 다른
{
orderend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
 
ponochka :
내가 제대로 하고 있는지 시민들이 말해줘!!! 어드바이저가 30이나 70 존에 들어가지 않았을 때 거래를 하고 들어왔을 때 거래를 하지 않았어야 했다!!! 그럼 됐지?

어쨌든, 내가 이해하는 한, 당신은 필요합니다

 int RSIPeriod = 0 , Slippage = 5 , Magic = 1234 ;
double lot = 0.1 ;

void OnStart ()
{
     double RSI3 = iRSI ( _Symbol , _Period , RSIPeriod, PRICE_CLOSE , 1 ),
            RSI4 = iRSI ( _Symbol , _Period , RSIPeriod, PRICE_CLOSE , 2 );
     int ticket = 0 ;
     
     if (RSI3 <= 30 && RSI4 <= 30 )
          ticket = OrderSend ( _Symbol , OP_SELL , lot, Bid , Slippage, 0 , 0 , NULL , Magic, 0 , clrRed );
     
     if (RSI3 >= 70 && RSI4 >= 70 )
          ticket = OrderSend ( _Symbol , OP_BUY , lot, Ask , Slippage, 0 , 0 , NULL , Magic, 0 , clrBlue );
}