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

 
Vitaliy Sendyaev :

안녕하세요!

시장 지표를 올바르게 구성하는 방법을 알려주실 수 있습니까?

확장자가 .mq5인 c 파일이 있고 확장자가 .mqh인 포함된 파일이 여러 개 있지만 시장에는 하나의 파일만 있으면 됩니다.

내가 알기로는 리소스를 통해 .mqh를 첨부하는 것은 불가능합니다. 수동으로 모든 것을 하나의 파일로 전송해야 합니까?

그리고 새 버전인 경우:? 당신이 할 수있는 미친 것입니다 +))

고맙습니다.

컴파일된(.ex5) 파일을 마켓으로 전송합니다. 이 파일에는 이미 모든 포함 파일이 포함되어 있습니다.

 
Vladimir Karputov :

반대 질문: "여기에 명시적으로 기호를 설정하는 이유는 무엇입니까?".

이 기능을 사용하는 경우 OnInit에서 m_symbol에 기호를 할당해야 합니다.

이 경우 "EURUSD.m" 기호에 대해 Expert Advisor를 실행하면 m_symbol이 자동으로 "EURUSD.m"으로 설정됩니다.

문제의 사실은 고문이 다른 기호에 달려 있다는 것입니다. EURUSD.m 견적을 업데이트해야 합니다.

이 솔루션을 찾았지만 옳지 않다고 생각합니다.

 void OnTick ()
  {   
// Обновляем котировки
     if (!m_symbol.Name( "EURUSD.m" )) //Обновляем котировки по второму символу
     RefreshRates ();
     if (!m_symbol.Name( "GBPUSD.m" )) //Обновляем котировки по символу где висит советник
     RefreshRates ();
 
EgorKim :

문제의 사실은 고문이 다른 기호에 달려 있다는 것입니다. EURUSD.m 견적을 업데이트해야 합니다.

이 솔루션을 찾았지만 옳지 않다고 생각합니다.

InInit에서 m_symbol에 대한 EURUSD .m 기호 를 입력하십시오. 글쎄, 또는 내가 추측 게임을 하려고 하는 동안 당신이 무엇을 하고 있는지, 어떻게 하는지 말해주세요.
 

여러분, 말씀해주세요!!!

TimeCurrent() 함수 에서 시와 분 값을 어떻게 전달하여 이러한 값으로 작업할 수 있습니까?

또는 예를 들어 문자열(12:15)을 통해 프로그램에 시간과 분을 전달하고 변수에 12와 15를 전달하고 싶은데 어떻게 해야 하나요?
 
TaywinLannister :

여러분, 말씀해주세요!!!

TimeCurrent() 함수 에서 시와 분 값을 어떻게 전달하여 이러한 값으로 작업할 수 있습니까?

또는 예를 들어 문자열(12:15)을 통해 프로그램에 시간과 분을 전달하고 변수에 12와 15를 전달하고 싶은데 어떻게 해야 하나요?

TimeToStruct

 
Konstantin Nikitin :

TimeToStruct

고맙습니다!
 
안녕하세요! 메타트레이더 4에서 메타트레이더 5로 인디케이터 를 변경했는데, 이제 메타트레이더 4에서와는 다른 위치에 1분 간격으로 화살표가 표시됩니다. 제가 어딘가에 실수를 한 걸까요 아니면 한 브로커의 터미널 4, 5 버전의 분 차트의 다른 인용문에 그 이유가 있습니까?
 #property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_color1    clrBlue
#property indicator_color2    clrRed

#property indicator_width1    1 
#property indicator_width2    1 
//+------------------------------------------------------------------+

double      SignalBufferRed[];
double      SignalBufferBlue[];
datetime TimeAlert= 0 ;
ENUM_TIMEFRAMES tf0,tf1,tf2,tf3,tf4,tf5; // Было инт
int S= 0 ;
//+------------------------------------------------------------------+
int OnInit ()
  {
  
     SetIndexBuffer ( 0 ,SignalBufferBlue);
     SetIndexBuffer ( 1 ,SignalBufferRed); 
//--- задать рисование линии 
   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_ARROW ); 
//--- задание стиля для рисования линии 
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 233 ); 
   //--- задать рисование линии 
   PlotIndexSetInteger ( 1 , PLOT_DRAW_TYPE , DRAW_ARROW ); 
//--- задание стиля для рисования линии 
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 234 ); 
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT , 5 ); 
   PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT ,- 5 ); 
   //--- установим в качестве пустого значения 0 
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0 ); 
   //--- установим в качестве пустого значения 0 
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0 ); 





   tf0= Period ();
   tf1=next_period(tf0+ 1 );
   tf2=next_period(tf1+ 1 );
   tf3=next_period(tf2+ 1 );
   tf4=next_period(tf3+ 1 );
   tf5=next_period(tf4+ 1 );
   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[])
  {
   int i,limit;

   limit=rates_total-prev_calculated- 1 ;
   if (rates_total< 1 ) return ( 0 );
   double d=(high[ 1 ]-low[ 1 ]+high[ 2 ]-low[ 2 ])/ 2 ;
   for (i=limit; i>= 0 ; i--)
     {
       if (S< 1 && NormalizeDouble (open[i]-close[i], _Digits )< 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf1, iBarShift ( NULL ,tf1,time[i], false ))- iClose ( NULL ,tf1, iBarShift ( NULL ,tf1,time[i], false )), _Digits )< 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf2, iBarShift ( NULL ,tf2,time[i], false ))- iClose ( NULL ,tf2, iBarShift ( NULL ,tf2,time[i], false )), _Digits )< 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf3, iBarShift ( NULL ,tf3,time[i], false ))- iClose ( NULL ,tf3, iBarShift ( NULL ,tf3,time[i], false )), _Digits )< 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf4, iBarShift ( NULL ,tf4,time[i], false ))- iClose ( NULL ,tf4, iBarShift ( NULL ,tf4,time[i], false )), _Digits )< 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf5, iBarShift ( NULL ,tf5,time[i], false ))- iClose ( NULL ,tf5, iBarShift ( NULL ,tf5,time[i], false )), _Digits )< 0 )
        {
         SignalBufferBlue[i]=low[i]-d;
...
         S= 1 ;
        }
       if (S>- 1 && NormalizeDouble (open[i]>close[i], _Digits )> 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf1, iBarShift ( NULL ,tf1,time[i], false ))- iClose ( NULL ,tf1, iBarShift ( NULL ,tf1,time[i], false )), _Digits )> 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf2, iBarShift ( NULL ,tf2,time[i], false ))- iClose ( NULL ,tf2, iBarShift ( NULL ,tf2,time[i], false )), _Digits )> 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf3, iBarShift ( NULL ,tf3,time[i], false ))- iClose ( NULL ,tf3, iBarShift ( NULL ,tf3,time[i], false )), _Digits )> 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf4, iBarShift ( NULL ,tf4,time[i], false ))- iClose ( NULL ,tf4, iBarShift ( NULL ,tf4,time[i], false )), _Digits )> 0 && 
         NormalizeDouble ( iOpen ( NULL ,tf5, iBarShift ( NULL ,tf5,time[i], false ))- iClose ( NULL ,tf5, iBarShift ( NULL ,tf5,time[i], false )), _Digits )> 0 )
        {
         SignalBufferRed[i]=high[i]+d;
...
         S=- 1 ;
        }
     }

   return (rates_total);
  }
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES next_period( int per) // Было инт
  {
   if (per > PERIOD_W1 )   return ( PERIOD_MN1 );   // Былы цифры вместо период_
   if (per > PERIOD_D1 )   return ( PERIOD_W1 );   // Былы цифры вместо период_
   if (per > PERIOD_H4 )     return ( PERIOD_D1 );   // Былы цифры вместо период_
   if (per > PERIOD_H1 )     return ( PERIOD_H4 );   // Былы цифры вместо период_
   if (per > PERIOD_M30 )     return ( PERIOD_H1 );   // Былы цифры вместо период_
   if (per > PERIOD_M15 )     return ( PERIOD_M30 );   // Былы цифры вместо период_
   if (per >   PERIOD_M5 )     return ( PERIOD_M15 );   // Былы цифры вместо период_
   if (per >   PERIOD_M1 )     return ( PERIOD_M5 );   // Былы цифры вместо период_
   if (per == PERIOD_M1 )     return ( PERIOD_M1 );   // Былы цифры вместо период_
   return ( Period ());
  }
//+------------------------------------------------------------------+
 
Yevgen Butov :
안녕하세요! 메타트레이더 4에서 메타트레이더 5로 인디케이터 를 변경했는데, 이제 메타트레이더 4에서와는 다른 위치에 1분 간격으로 화살표가 표시됩니다. 제가 어딘가에 실수를 한 걸까요 아니면 한 브로커의 터미널 4, 5 버전의 분 차트의 다른 인용문에 그 이유가 있습니까?

MQL5 및 MQL4 표시기에서 간단한 테스트를 수행하십시오. 막대 #0의 시간을 인쇄하십시오.

 Print ( "Bar #0: " ,time[ 0 ]);

이것은 당신이 무엇을 이해하는 데 도움이 될 것입니다 ...

 
Vladimir Karputov :

MQL5 및 MQL4 표시기에서 간단한 테스트를 수행하십시오. 막대 #0의 시간을 인쇄하십시오.

이것은 당신이 무엇을 이해하는 데 도움이 될 것입니다 ...

이 텍스트를 OnCalculate 에 추가했습니다. 이제 막대 시간이 1분마다 변경되지만 이제는 화살표가 전혀 없습니다. 무엇이 잘못되었을 수 있습니까?

 ArraySetAsSeries (time, true ); 

   ArraySetAsSeries (open, true ); 

   ArraySetAsSeries (high, true ); 

   ArraySetAsSeries (low, true ); 

   ArraySetAsSeries (close, true ); 
 
Yevgen Butov :

이 텍스트를 OnCalculate에 추가했습니다. 이제 막대 시간이 1분마다 변경되지만 이제는 화살표가 전혀 없습니다. 무엇이 잘못되었을 수 있습니까?

당신은 이해하지 못했습니다. 인쇄된 값 을 비교합니다. 막대 시간 #0과 막대 시간 #rates_total-1을 비교합니다. 여기 저기 비교...

사유: