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

[삭제]  
Advisor에서 첫 번째 줄은
 OnTick ()

이 줄 이후에 추가 코드는 양초당 한 번씩 실행됩니다. 형성 당시.

내가 이해하는 한 고문이이 지표를 호출합니까?

 
Aleksei Stepanenko :
Advisor에서 첫 번째 줄은

이 줄 이후에 추가 코드는 양초당 한 번씩 실행됩니다. 형성 당시.

내가 이해하는 한 고문이이 지표를 호출합니까?

글쎄, 일반적으로 나는이 표시기를 다른 표시기에 삽입하여 다른 프로그램으로 신호를 전송합니다. 즉, 고문이 없습니다. 즉, 지표 자체의 어딘가에 구축해야하지만 어떻게?
[삭제]  
그리고 어떤 프로그램이 거래를 시작합니까? 그녀는 고문입니다. 아니다?
 
Aleksei Stepanenko :
그리고 어떤 프로그램이 거래를 시작합니까? 그녀는 고문입니다. 아니다?

아, 음, 아마도... 하지만 모든 것이 더 복잡해지는 것 같습니다. 바로... 이 코드에 포함할 수는 없겠죠? 그리고 두 번째 표시기의 코드에도 코드가 없습니다.

 OnTick ()
도대체 어떻게 그렇게 작동합니까?
[삭제]  
iCustom을 통해 이 표시기를 호출하는 경우 다르게 시도할 수 있습니다. 이 기능의 끝에 0 대신 1을 넣으십시오.
 
그건 그렇고 인디케이터도 화살표를 많이 그리는데 차트를 새로고침하면 몇개만 남습니다. :(역사에서 지표가 스스로를 보호하는 것처럼 내가 어떻게 거래를 잘하는지 보지만 실시간으로 모든 것이 완전히 다릅니다. :(
[삭제]  
ElenkaVladi :
그건 그렇고, 인디케이터도 화살표를 많이 그립니다,

예? 흠 나중에 봐야겠다.

 
Aleksei Stepanenko :
iCustom을 통해 이 표시기를 호출하는 경우 다르게 시도할 수 있습니다. 이 기능의 끝에 0 대신 1을 넣으십시오.

바로 여기입니까?

 if (IndicatorName != "" ) {
      up = iCustom ( NULL , 0 , IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom ( NULL , 0 , IndicatorName, IndiBufferPut, SignalType);
 if (IndicatorName != "" ) {
      up = iCustom ( NULL , 1 , IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom ( NULL , 1 , IndicatorName, IndiBufferPut, SignalType);

그것을 하는 방법?

 
Aleksei Stepanenko :

예? 흠 나중에 봐야겠다.

메시지가 아닐까요? 당신은 여전히 그것을 할 필요가 있습니까?

https://www.mql5.com/ru/forum/160587/page223#comment_19618305

아무튼 이렇게 함께해주셔서 정말 감사합니다...:)))

상황에 대한 이해를 돕기 위해 파일을 첨부합니다.

Вопросы от начинающих MQL4 MT4 MetaTrader 4
Вопросы от начинающих MQL4 MT4 MetaTrader 4
  • 2020.11.29
  • www.mql5.com
Если у Вас вопросы по MQL4, MT4, MetaTrader 4, пожалуйста пишите в этой теме. Особенно когда вопросы касаются торговых функций...
[삭제]  
ElenkaVladi :

작업 코드는 다음과 같습니다.

 //---- indicator settings
#property   indicator_chart_window
#property   indicator_buffers 2
#property   indicator_color1   Blue
#property   indicator_color2   Red
//---- indicator parameters
extern int   period = 4 ; //12
extern int   shift  = 0 ; //сдвиг по бару
//---- indicator buffers
double BufferUp[],BufferDn[];
double Ma[],MaOn[];

datetime LastTime= 0 ;
int i, st= 5 ;

int OnInit ()
   {
   IndicatorBuffers( 2 );
//---- drawing settings
   SetIndexStyle( 0 , DRAW_ARROW , 2 );
   SetIndexArrow( 0 , 233 );
   SetIndexStyle( 1 , DRAW_ARROW , 2 );
   SetIndexArrow( 1 , 234 );

   SetIndexBuffer ( 0 ,BufferUp); //стрелка синяя верх
   SetIndexBuffer ( 1 ,BufferDn); //стрелка красная вниз
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName( "T3MA-ALARM (" +period+ ")" );
   
   ArraySetAsSeries (Ma, true );
   ArraySetAsSeries (MaOn, true );
//---- initialization done
   if ( Digits == 3 || Digits == 5 ) st*= 10 ;
   return ( INIT_SUCCEEDED );
   }
   
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
   {
   if (rates_total<= MathMax (period,shift)) return ( 0 );
   int limit=rates_total-prev_calculated;   
   if (prev_calculated> 0 ) limit++;

   if (LastTime!=time[ 1 ])
      {
      LastTime=time[ 1 ];
       ArrayCopy (Ma,Ma,rates_total- ArraySize (Ma), 0 , WHOLE_ARRAY );
       ArrayCopy (MaOn,MaOn,rates_total- ArraySize (MaOn), 0 , WHOLE_ARRAY );
      }

   for (i=limit; i>= 1 ; i--) Ma[i]= iMA ( NULL , 0 ,period, 0 , MODE_EMA , PRICE_CLOSE ,i);
   for (i=limit; i>= 1 ; i--) MaOn[i]=iMAOnArray(Ma,rates_total,period, 0 , MODE_EMA ,i);
      
   for (i=limit; i>= 1 ; i--)
      {
       if (MaOn[i+shift]-MaOn[i+ 1 +shift]< 0 && MaOn[i+ 1 +shift]-MaOn[i+ 2 +shift]> 0 ){BufferDn[i+ 1 ]=high[i+ 1 ]+st* Point ;}
       if (MaOn[i+shift]-MaOn[i+ 1 +shift]> 0 && MaOn[i+ 1 +shift]-MaOn[i+ 2 +shift]< 0 ){BufferUp[i+ 1 ]=low[i+ 1 ]-st* Point ;}
      }
   return (rates_total);
   }
화살표는 BufferDn[i+ 1 ]=... 소급적으로 그려집니다. 이것은 슬픈 일입니다.