MQL4 EA의 차트에 지표 추가 - 페이지 5

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4 EA의 차트에 지표 추가

알랭 벌리앙 , 2016.02.13 11:39

 #import "user32.dll"
int RegisterWindowMessageW( string MessageName);
int PostMessageW( int hwnd, int msg, int wparam, uchar &Name[]);
#import

#define INDICATOR_NAME "Indicator_name"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartCustomIndicator( int hWnd, string IndicatorName, bool AutomaticallyAcceptDefaults= false )
  {
   uchar name2[];
   StringToCharArray (IndicatorName,name2, 0 , StringLen (IndicatorName));

   int MessageNumber=RegisterWindowMessageW( "MetaTrader4_Internal_Message" );
   int r=PostMessageW(hWnd,MessageNumber, 15 ,name2);
   Sleep ( 10 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle( Symbol (), 0 );
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return ( INIT_SUCCEEDED );
  }

안녕 모든 몸

위의 코드는 Expert에서 작동합니다. Indicator에서 위의 코드를 어떻게 사용합니까?

도와주세요.

 
MT4에서 EA를 사용하여 차트에서 지표를 제거할 수 있습니까? 일부 코드는 OnDenit() 함수 로 작성될 수 있습니다.
 
Abdul Manan :
MT4에서 EA를 사용하여 차트에서 지표를 제거할 수 있습니까? 일부 코드는 OnDenit() 함수 로 작성될 수 있습니다.

지정된 차트 창에서 지정된 이름을 가진 지표를 제거합니다. 이 명령은 차트 메시지 대기열에 추가되고 이전의 모든 명령이 처리된 후에만 실행됩니다.

bool ChartIndicatorDelete (
                chart_id , // 차트 ID
    정수              하위 창 ,              // 서브 윈도우의 번호
    상수 문자열     indicator_shortname     // 인디케이터의 짧은 이름
);

매개변수

차트 ID

【인】 차트 ID입니다. 0은 현재 차트를 나타냅니다.

하위 창

【인】 차트 하위 창의 번호입니다. 0은 기본 차트 하위 창을 나타냅니다.

const 표시기_짧은 이름

[in] IndicatorSetString() 함수를 사용하여 INDICATOR_SHORTNAME 속성에 설정되는 표시기의 짧은 이름입니다. 지표의 짧은 이름을 얻으려면 ChartIndicatorName() 함수를 사용하십시오.

반환 값

명령이 차트 대기열에 추가되었으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 오류 세부 정보를 얻으려면 GetLastError() 함수를 사용하십시오.

ChartIndicatorDelete - 图表操作 - MQL4参考
ChartIndicatorDelete - 图表操作 - MQL4参考
  • docs.mql4.com
Removes an indicator with a specified name from the specified chart window. The command is added to chart message queue and executed only after all previous commands have been processed. If the short name of an indicator is not set explicitly, then the name of the file containing the source code of the indicator will be specified during...
 
Alain Verleyen :
백테스트 시 EA의 차트에 인디케이터를 자동으로 붙일 수 있는 방법이 있나요?
 
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }


This code work, but only in OnInit section. If i try transfer it to section CHARTEVENT_OBJECT_CLICK for launch with key, nothing happend. Can you help me ?
 
안녕하세요, 동일한 코드를 사용하여 1EA에서 2개의 지표를 로드할 수 없습니다.
 
이 스레드는 나에게 엄청나게 도움이 되었지만 여기까지 도달하지 못했습니다. 대화 상자가 중단된 부분을 선택하는 이 스레드(https://www.forexfactory.com/showthread.php?p=12764287#)를 참조하십시오.
 
Kray :

여러분, 안녕하세요,

Georgiy Liashchenko에게 감사의 인사를 전하고, AutomaticAcceptDefaults ("true"일 때)를 사용하여 차트에 직접 표시기를 추가하는 업그레이드된 버전의 코드를 공유하고 싶습니다 .

전문가의 지표를 삽입해야 하는 분들에게 조금이나마 도움이 되었으면 합니다.

참고: 저는 사용자 지정 표시기 에서 일하고, 그렇지 않으면 창 이름을 변경합니다.

참고2 : 15자(".ex4" 이전)를 초과하는 표시기를 사용하지 마십시오.

안녕 나는 이것을 얻었다

'user32.dll::RegisterWindowMessageW'를 호출할 수 없습니다. 'user32.dll'이 로드되지 않았습니다.

아무도 나를 도울 수 있습니까?


 
Alain Verleyen :

나는이 문제가 없습니다 (게시 한 코드로).

hWnd가 0과 다른지 확인하십시오.

수면 값을 50 또는 100으로 높일 수도 있습니다.

친애하는 알랭

귀하의 코드를 사용하여 열려 있는 모든 차트 에 하나의 지표를 추가했습니다. 그러나 EA를 실행하는 차트에만 추가되었습니다.

여기 코드가 있습니다. 열려 있는 모든 차트에 동일한 지표를 추가하도록 코드를 수정하시겠습니까?

도와주세요

BTW (EA 및 스크립트로 시도했는데 둘 다 하나의 차트에만 표시기를 추가했습니다) :)

문안 인사,



# "user32.dll" 가져오기

int RegisterWindowMessageW(문자열 메시지 이름);

int PostMessageW(int hwnd,int msg,int wparam,uchar & 이름[]);

#수입


#define INDICATOR_NAME "CCI_FILTER6C"


정수 NOS ;

문자열 접미사="";

문자열 기호[30];

긴 차트[30];


//+----------------------------------------------- -------------------+

//+----------------------------------------------- -------------------+

//+----------------------------------------------- -------------------+


int OnStart()

{

NOS=10;

접미사 = "c";

기호[0] = "AUDCAD" + 접미사 ;

기호[1] = "AUDCHF" + 접미사 ;

기호[2] = "AUDJPY" + 접미사;

기호[3] = "AUDNZD" + 접미사;

기호[4] = "AUDUSD" + 접미사 ;

기호[5] = "CADJPY" + 접미사 ;

기호[6] = "CHFJPY" + 접미사;

기호[7] = "EURAUD" + 접미사 ;

기호[8] = "EURCAD" + 접미사 ;

기호[9] = "EURCHF" + 접미사;

for(int is=0;is<NOS;is++)

{

int hWnd=WindowHandle(기호[is],PERIOD_M30);

StartCustomIndicator(hWnd,INDICATOR_NAME);

}

리턴(0);

}

무효 StartCustomIndicator(int hWnd, string IndicatorName, bool AutomaticAcceptDefaults=true)

{

uchar 이름2[];

StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));


int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");

int r=PostMessageW(hWnd, 메시지 번호, 15, 이름2);

수면(100);

}

 
Abdul Manan :
안녕하세요, 동일한 코드를 사용하여 1EA에서 2개의 지표를 로드할 수 없습니다.

이것도 찾고 있습니다 - 동일한 EA에서 여러 지표를 추가하는 방법을 알아낸 사람이 있습니까?


동일한 EA에서 2개의 https://docs.mql4.com/indicators/ima 를 추가하고 싶습니다.


감사해요

사유: