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

 

안녕하세요.

터미널을 사용 하여 Expert Advisor의 텍스트를 클립보드로 복사할 수 있는지 여부를 알려주세요.

그렇다면 어떻게 해야 합니까?

 
mila.com :

안녕하세요.

터미널을 사용 하여 Expert Advisor의 텍스트를 클립보드로 복사할 수 있는지 여부를 알려주세요.

그렇다면 어떻게 해야 합니까?

아니요. 클립보드 작업은 시스템 기능(Windows API)입니다. MQL5에서는 WinAPI에 직접 액세스할 수 없습니다. 클립보드를 사용하는 이유는 무엇입니까? 결국, 당신 자신이 메시지를 형성하므로 메시지의 원본 텍스트가 있습니다.
 
Karputov Vladimir :
아니요. 클립보드 작업은 시스템 기능(Windows API)입니다. MQL5에서는 WinAPI에 직접 액세스할 수 없습니다. 클립보드를 사용하는 이유는 무엇입니까? 결국, 당신 자신이 메시지를 형성하므로 메시지의 원본 텍스트가 있습니다.

예, 원본 텍스트가 있지만 특정 조건에서 클립보드에 필요합니다.

죄송합니다. 지정하지 않았습니다. MQL 4에서 구현해야 합니다.

#import "user32.dll"을 통해 어떻게든 클립보드를 열 수 있습니까?

 
mila.com :

예, 원본 텍스트가 있지만 특정 조건에서 클립보드에 필요합니다.

죄송합니다. 지정하지 않았습니다. MQL 4에서 구현해야 합니다.

#import "user32.dll"을 통해 어떻게든 클립보드를 열 수 있습니까?

오랜만에 MQL5로 글을 쓸 시간입니다. dll을 사용하는 것은 무모함의 극치입니다.

내가 알기로는 타사 프로그램으로 정보를 읽고 싶어합니다. 그런 다음 모든 클라이언트 터미널 \Terminal\Common\Files의 공통 폴더에 있는 파일에 씁니다. 이미 이 디렉토리에서 타사 프로그램으로 파일을 읽을 수 있습니다.

 
Karputov Vladimir :

오랜만에 MQL5로 글을 쓸 시간입니다. dll을 사용하는 것은 무모함의 극치입니다.

내가 알기로는 타사 프로그램으로 정보를 읽고 싶어합니다. 그런 다음 모든 클라이언트 터미널 \Terminal\Common\Files의 공통 폴더에 있는 파일에 씁니다. 이미 이 디렉토리에서 타사 프로그램으로 파일을 읽을 수 있습니다.

조언 감사합니다. 하지만 이제 MQL 4 프로그램에서 클립보드로 텍스트를 복사해야 합니다.

 
Karputov Vladimir :

순서대로 가자. 템플릿은 다음과 같습니다.

차트에 첨부하고 차트의 스크린샷을 스튜디오에 첨부하고 "저널" 및 "전문가" 탭의 기록(해당되는 경우)을 첨부합니다.

여보세요 !!!

먼저 MT5 플랫폼을 재부팅했습니다. 템플릿을 컴파일했습니다. 컴파일 결과는 아래와 같습니다. 스크린샷은 크기 때문에 버려야 했습니다.

내비게이터에 고문이 나타났습니다.

나는 차트에 어드바이저를 던지고 3곳에서 거래를 허용 했습니다.

웃는 얼굴이 아닌 어드바이저 아이콘으로 차트에 올랐다

다음은 로그에서 발췌한 내용입니다. 2016.05.11 12:44:47.139 Experts Expert Test(GBPUSD,H1)가 성공적으로 로드되었습니다.

다음은 어드바이저 로드에 대한 메시지 내용입니다.

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 빌드 1325 시작됨(Alpari Limited)
HD 0 10:35:45.020 터미널 Windows 8.1(x64 기반 PC), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+
ND 0 10:35:45.020 터미널 C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 네트워크 '50016841': Alpari-Ltd-MT5에서 mt5.nl.3까지 인증됨(ping: 57.34ms)
NG 0 10:35:47.200 네트워크 '50016841': 2016.05.10 23:47:58에 79.172.69.175에서 수행된 이전의 성공적인 인증
FK 0 10:35:47.617 네트워크 '50016841': Alpari Limited와 동기화된 터미널
RM 0 10:35:47.617 네트워크 '50016841': 거래가 활성화되었습니다 - 네팅 모드
OH 0 10:35:48.253 네트워크 '50016841': 액세스 포인트에 대한 네트워크 스캔
CL 0 10:35:51.446 네트워크 '50016841': 네트워크 스캔 완료
ND 1 12:00:49.011 네트워크 '50016841': Alpari-Ltd-MT5 연결 끊김
MR 0 12:01:08.842 네트워크 '50016841': Alpari-Ltd-MT5에서 mt5.nl.3까지 인증됨(ping: 56.41ms)
HR 0 12:01:08.842 네트워크 '50016841': 2016.05.11 10:35:52에 79.172.69.175부터 이전에 성공한 인증
PQ 0 12:01:08.907 네트워크 '50016841': Alpari Limited와 동기화된 터미널
PH 0 12:01:08.907 네트워크 '50016841': 거래가 활성화되었습니다 - 네팅 모드
KL 0 12:41:45.169 Experts Expert Test(GBPUSD,H1)가 성공적으로 로드되었습니다.

봐주세요. 아마도 당신은 그 이유를 찾을 것입니다. 막다른 골목에 있는데 빌드에 문제가 있는 것일까요?

감사해요 !!!



도와 주셔서 감사합니다 !!!

 
Boris.45 :

여보세요 !!!

먼저 MT5 플랫폼을 재부팅했습니다. 템플릿을 컴파일했습니다. 컴파일 결과는 아래와 같습니다. 스크린샷은 크기 때문에 버려야 했습니다.

내비게이터에 고문이 나타났습니다.

나는 차트에 어드바이저를 던지고 3곳에서 거래를 허용 했습니다.

웃는 얼굴이 아닌 어드바이저 아이콘으로 차트에 올랐다

다음은 로그에서 발췌한 내용입니다. 2016.05.11 12:44:47.139 Experts Expert Test(GBPUSD,H1)가 성공적으로 로드되었습니다.

다음은 어드바이저 로드에 대한 메시지 내용입니다.

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 빌드 1325 시작됨(Alpari Limited)
HD 0 10:35:45.020 터미널 Windows 8.1(x64 기반 PC), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+
ND 0 10:35:45.020 터미널 C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 네트워크 '50016841': Alpari-Ltd-MT5에서 mt5.nl.3까지 인증됨(ping: 57.34ms)
NG 0 10:35:47.200 네트워크 '50016841': 2016.05.10 23:47:58에 79.172.69.175에서 수행된 이전의 성공적인 인증
FK 0 10:35:47.617 네트워크 '50016841': Alpari Limited와 동기화된 터미널
RM 0 10:35:47.617 네트워크 '50016841': 거래가 활성화되었습니다 - 네팅 모드
OH 0 10:35:48.253 네트워크 '50016841': 액세스 포인트에 대한 네트워크 스캔
CL 0 10:35:51.446 네트워크 '50016841': 네트워크 스캔 완료
ND 1 12:00:49.011 네트워크 '50016841': Alpari-Ltd-MT5 연결 끊김
MR 0 12:01:08.842 네트워크 '50016841': Alpari-Ltd-MT5에서 mt5.nl.3까지 인증됨(ping: 56.41ms)
HR 0 12:01:08.842 네트워크 '50016841': 2016.05.11 10:35:52에 79.172.69.175에서 수행된 이전 성공적인 인증
PQ 0 12:01:08.907 네트워크 '50016841': Alpari Limited와 동기화된 터미널
PH 0 12:01:08.907 네트워크 '50016841': 거래가 활성화되었습니다 - 네팅 모드
KL 0 12:41:45.169 Experts Expert Test(GBPUSD,H1)가 성공적으로 로드되었습니다.

봐주세요. 아마도 당신은 그 이유를 찾을 것입니다. 막다른 골목에 있는데 빌드에 문제가 있는 것일까요?

감사해요 !!!



도와 주셔서 감사합니다 !!!

이 잘못된 터미널 위에 터미널을 설치하십시오. 아마도 그것은 치유 될 것입니다.
 
Karputov Vladimir :

오랜만에 MQL5로 글을 쓸 시간입니다. dll을 사용하는 것은 무모함의 극치입니다.

내가 알기로는 타사 프로그램으로 정보를 읽고 싶어합니다. 그런 다음 모든 클라이언트 터미널 \Terminal\Common\Files의 공통 폴더에 있는 파일에 씁니다. 이미 이 디렉토리에서 타사 프로그램으로 파일을 읽을 수 있습니다.

바로 '무모함의 극치'라면 금지다.

WinAPI는 MQL의 가능성을 크게 확장합니다. 그리고 dll 없이도 어리석은 일을 할 수 있습니다.

다음은 클립보드에 문자열을 전달하는 예입니다.

 #define CF_UNICODETEXT 13
#define GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД" ;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   uint hwnd = ( uint ) ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   
   int strSize = StringLen ( str ) * 2 + 2 ;   // Получаем размер строки в байтах
   
   if ( OpenClipboard( hwnd ) )     // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
       uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
       uint pMem = GlobalLock( hMem );     // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );   // Передаём память со строкой в буфер
      
      CloseClipboard();   // Закрываем буфер
   }
}
 
Artyom Trishkin :


Artem, 이 모든 것을 On Start 기능에서 On Tick 기능에 붙여넣으면 스크립트가 동일한 방식으로 매 틱마다 실행됩니다. 그렇죠?

아니면 변경해야 할 사항이 있습니까?

때문에 현재 촛불을 제외한 이전 촛불은 매 틱마다 변경되지 않으므로 확인이 1회 수행되도록 조건을 작성해야 한다는 것을 이해합니다(예: 다음 현재 촛불이 닫히기 1~2초 전)? 아니면 의미가 없으며 모든 틱에 수표를 남겨 둘 수 있습니까?

 
Andrey Koldorkin :

Artem, 이 모든 것을 On Start 기능에서 On Tick 기능에 붙여넣으면 스크립트가 동일한 방식으로 매 틱마다 실행됩니다. 그렇죠?

아니면 변경해야 할 사항이 있습니까?

때문에 현재 촛불을 제외한 이전 촛불은 매 틱마다 변경되지 않으므로 확인이 1회 수행되도록 조건을 작성해야 한다는 것을 이해합니다(예: 다음 현재 촛불이 닫히기 1~2초 전)? 아니면 의미가 없으며 모든 틱에 수표를 남겨 둘 수 있습니까?

글쎄, 나는이 모든 것을 함수에 넣고 필요할 때 그것을 호출 할 것입니다 - 적어도 모든 틱 (정당화되고 필요한 경우), 적어도 새 촛불이 열릴 때 - 한 시간에 한 번, 예를 들어 우리가 일하는 경우 H1에.
사유: