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

 

거래 중 사용자 지정 지표의 입력 매개변수를 변경하고 변경 사항을 적용하는 방법은 무엇입니까?

ma 25가 있었다고 가정해 봅시다. 이제는 ma 33이 필요합니다.

내가 아는 한 입력 매개변수는 초기화 중에만 노출됩니다. 하지만 거래하는 동안 지표를 변경해야 합니다

 input int             InpMA_ma_period      = 25 ;         // Параметры МА 
input int             InpMA_ma_shift       = 0 ;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA ;   // MA PRICE_HIGH: smoothing type 

int             handle_MA; 

int OnInit ()
  {
    handle_MA= iCustom (m_symbol.Name(), Period (), "MA" ,InpMA_ma_period,InpMA_ma_shift,InpMA_ma_method, PRICE_CLOSE );
  }

void OnTick ()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   InpMA_ma_period      = 33 ;
  }
 
ilvic :

거래 중 사용자 지정 지표의 입력 매개변수를 변경하고 변경 사항을 적용하는 방법은 무엇입니까?

ma 25가 있었다고 가정해 봅시다. 이제는 ma 33이 필요합니다.

내가 아는 한 입력 매개변수는 초기화 중에만 노출됩니다. 하지만 거래하는 동안 지표를 변경해야 합니다

2개의 지표를 미리 생성합니다.

 
Vladimir Karputov :

2개의 지표를 미리 생성합니다.

아니요, 두 개의 지표가 필요하지 않습니다. 경매장에서 바꿔야겠네요.

말하자면 역학.

어떻게든 언로드하고 새 매개변수로 로드할 수 있습니까?

 
ilvic :

아니요, 두 개의 지표가 필요하지 않습니다. 경매장에서 바꿔야겠네요.

말하자면 역학.

어떻게든 언로드하고 새 매개변수로 로드할 수 있습니까?

세 개의 지표를 만듭니다 :).

일반적으로 먼저 생각하고 환경을 만든 다음 데이터를 수신해야 합니다.

 
Vladimir Karputov :

세 개의 지표를 만듭니다 :).

일반적으로 먼저 생각하고 환경을 만든 다음 데이터를 수신해야 합니다.

의 말을하자-

어드바이저 시작 시 매개변수 MA=25;

새로운 틱마다 MA = +1 매개변수를 변경합니다.

즉 MA = 26;

나는 다른 조건에 대해 500개의 핸들을 생성하지 않을 것입니다)

 
ilvic :

거래 중 사용자 지정 지표의 입력 매개변수를 변경하고 변경 사항을 적용하는 방법은 무엇입니까?

ma 25가 있었다고 가정해 봅시다. 이제는 ma 33이 필요합니다.

내가 아는 한 입력 매개변수는 초기화 중에만 노출됩니다. 하지만 거래하는 동안 지표를 변경해야 합니다

글쎄, 어드바이저의 입력 매개변수 값을 변경할 때 OnInit()가 트리거되는 것으로 보이며, 이는 새 매개변수 값이 적용된다는 것을 의미합니다. 아니면 내가 틀렸어?

 
Vitaly Muzichenko :

글쎄, 어드바이저의 입력 매개변수 값을 변경할 때 OnInit()가 트리거되는 것으로 보이며, 이는 새 매개변수 값이 적용된다는 것을 의미합니다. 아니면 내가 틀렸어?

나는 이런 적이있다.

작동하지 않습니다

 input int             InpMA_ma_period      = 25 ;         // Параметры МА 
input int             InpMA_ma_shift       = 0 ;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA ;   // MA PRICE_HIGH: smoothing type 

double ExtInpMA_ma_period=InpMA_ma_period;
int             handle_MA; 

int OnInit ()
  {
    handle_MA= iCustom (m_symbol.Name(), Period (), "MA" ,ExtInpMA_ma_period,InpMA_ma_shift,InpMA_ma_method, PRICE_CLOSE );
  }

void OnTick ()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   ExtInpMA_ma_period      = 33 ;
  }
 
ilvic :

나는 이런 적이있다.

작동하지 않습니다

글쎄, 이것은 작동하지 않을 것입니다. 표시기를 다시 초기화하려면 OnInit 를 호출해야 합니다.

작동 중 매개변수를 얼마나 자주 변경합니까?

 
Vitaly Muzichenko :

글쎄, 작동하지 않을 것입니다. 표시기를 다시 초기화하려면 OnInit 를 호출해야 합니다.

작동 중 매개변수를 얼마나 자주 변경합니까?

자주 갈아타야겠습니다.

코드는 다음과 같아야 합니까?

 void OnTick ()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   
   ExtInpMA_ma_period      = 33 ;
   OnInit();

  }
 
ilvic :

자주 갈아타야겠습니다.

코드는 다음과 같아야 합니까?

모든 틱 에서 OnInit 를 가져오지 않도록 값 변경을 확인하는 플래그를 설정해야 합니다.

이 같은:

 void OnTick ()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   static int NewExtInpMA_ma_period;
   if (ExtInpMA_ma_period != NewExtInpMA_ma_period)
    {
     NewExtInpMA_ma_period=ExtInpMA_ma_period;
     OnInit ();
    }
  }
사유: