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

 
Tango_X :

고맙습니다! 저는 항상 클래스에 대한 포인터를 통해 클래스에 액세스한다고 생각했습니다. 그리고 여기 그냥 공지입니다 ..이유는 무엇입니까?

이것은 OOP의 가장 기본적인 사항입니다. 약간의 도움말을 참조하세요. 예를 들어, new/delete 연산자 등이 있습니다.

 
Tango_X :

고맙습니다! 저는 항상 클래스에 대한 포인터를 통해 클래스에 액세스한다고 생각했습니다. 그리고 여기 그냥 공지입니다 ..이유는 무엇입니까?

참고하겠습니다 감사합니다!!

 
Seric29 :

MT5에서 기호를 만들 때 어떤 메타 트레이더를 사용합니까?

예, MT5에서

 
fxsaber :

금지되어 있습니다.

비애.

엑셀에 올려서 하고 있는데 부족한 부분도 있습니다. 그런 내장 기능이 없다는 것이 아쉽습니다.

그러나 이것은 어떻게 든 프로그래밍 방식으로 구현할 수 있다는 예감이 있습니다)

 
ISL :

예, MT5에서

MT4에서는 기호를 만들 수 없고 값을 변경할 수는 있지만 만들 수는 없는 것이 유감입니다.

 

ArraySetAsSeries()를 제거하는 방법을 배우십시오 !!!

여기에 MT4(완벽한 추세선)에 대한 잘 알려진 표시기의 일부를 다시 작성했습니다. 모든 것이 MT4에서와 같이 작동하지만... 강제로 작성한 ArraySetAsSeries()를 제거할 수 없습니다. 그렇지 않으면 표시기가 작동합니다. 올바르게 계산하지 않으면 ArraySetAsSeries()가 배열의 방향 인덱싱 을 변경할 것이라는 것을 알고 있지만 2일 만에 그는 이기지 못했습니다!

 #property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots    1
//--- plot BufBars
#property indicator_label1    "BufBars"
#property indicator_type1    DRAW_COLOR_BARS
#property indicator_color1    clrRed , clrAqua , clrNONE
#property indicator_style1    STYLE_SOLID
#property indicator_width1    3

//--- input parameters
input int SlowLength         = 7 ; //Slow length
input int SlowPipDisplace    = 0 ; //Slow pip displace
input int FastLength         = 3 ; //Fast length
input int FastPipDisplace    = 0 ; //Fast pip displace
//--- indicator buffers
double          BufBarsBuffer1[];
double          BufBarsBuffer2[];
double          BufBarsBuffer3[];
double          BufBarsBuffer4[];
double          BufBarsColors[];
double          BufLSELLBuffer[];
double          BufLBUYBuffer[];
static int trend= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufBarsBuffer1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,BufBarsBuffer2, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,BufBarsBuffer3, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,BufBarsBuffer4, INDICATOR_DATA );
   SetIndexBuffer ( 4 ,BufBarsColors, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 5 ,BufLSELLBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 6 ,BufLBUYBuffer, INDICATOR_DATA );
   for ( int i= 0 ;i< 7 ;i++)
     {
       PlotIndexSetInteger (i, PLOT_DRAW_BEGIN ,FastLength+ 1 );
       PlotIndexSetDouble (i, PLOT_EMPTY_VALUE , 0.0 );
     }
   ArraySetAsSeries (BufBarsBuffer1, true );
   ArraySetAsSeries (BufBarsBuffer2, true );
   ArraySetAsSeries (BufBarsBuffer3, true );
   ArraySetAsSeries (BufBarsBuffer4, true );
   ArraySetAsSeries (BufBarsColors, true );
   ArraySetAsSeries (BufLBUYBuffer, true );
   ArraySetAsSeries (BufLSELLBuffer, true );
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   trend= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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;
   double thigh1,tlow1,thigh2,tlow2,trendUp,trendDn;
   ArraySetAsSeries (open, true );
   ArraySetAsSeries (high, true );
   ArraySetAsSeries (low, true );
   ArraySetAsSeries (close, true );
   if (prev_calculated== 0 )
     {
      limit=rates_total- 1 ;
      BufLSELLBuffer[limit]=high[limit];
      BufLBUYBuffer[limit]=low[limit];
      limit--;
     }
   else limit=rates_total-prev_calculated+ 1 ;
   for (i=limit;i>= 0 ;i--)
     {
      thigh1= high[ iHighest ( NULL , 0 , MODE_HIGH ,SlowLength,i)]+SlowPipDisplace * _Point ;
      tlow1 = low[ iLowest ( NULL , 0 , MODE_LOW ,SlowLength,i)]-SlowPipDisplace * _Point ;
      thigh2= high[ iHighest ( NULL , 0 , MODE_HIGH ,FastLength,i)]+FastPipDisplace * _Point ;
      tlow2 = low[ iLowest ( NULL , 0 , MODE_LOW ,FastLength,i)]-FastPipDisplace * _Point ;
       if (close[i]>BufLBUYBuffer[i+ 1 ])  trendUp=tlow1;   else trendUp=thigh1;
       if (close[i]>BufLSELLBuffer[i+ 1 ]) trendDn=tlow2;   else trendDn=thigh2;
      BufLSELLBuffer[i]= trendDn;
      BufLBUYBuffer[i] = trendUp;
      BufBarsBuffer1[i] = 0.0 ;
      BufBarsBuffer2[i] = 0.0 ;
      BufBarsBuffer3[i] = 0.0 ;
      BufBarsBuffer4[i] = 0.0 ;
      BufBarsColors[i]  = 2 ;
       if (close[i]<trendUp && close[i]<trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 0 ;
        }
       if (close[i]>trendUp && close[i]>trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 1 ;
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

ArraySetAsSeries()를 제거하는 방법을 배우십시오 !!!

여기에 MT4(완벽한 추세선)에 대한 잘 알려진 표시기의 일부를 다시 작성했습니다. 모든 것이 MT4에서와 같이 작동하지만... 강제로 작성한 ArraySetAsSeries()를 제거할 수 없습니다. 그렇지 않으면 표시기가 작동합니다. 올바르게 계산하지 않으면 ArraySetAsSeries()가 배열의 방향 인덱싱을 변경할 것이라는 것을 알고 있지만 2일 만에 그는 이기지 못했습니다!

이렇게 될 수 있을까

 #ifdef __MQL5__
   ArraySetAsSeries (BufBarsBuffer1, true );
   ArraySetAsSeries (BufBarsBuffer2, true );
   ArraySetAsSeries (BufBarsBuffer3, true );
   ArraySetAsSeries (BufBarsBuffer4, true );
   ArraySetAsSeries (BufBarsColors, true );
   ArraySetAsSeries (BufLBUYBuffer, true );
   ArraySetAsSeries (BufLSELLBuffer, true );
#endif
 
Vitaly Muzichenko :

이렇게 될 수 있을까

고마워 친구! 그러나 여기에서는 소스 텍스트의 전체 "가중치"를 줄이는 것이 아니라 이해에 관한 것입니다. ArraySetAsSeries() 없이 표시기 값을 계산할 수 있다는 것을 알고 있지만 어떤 이유로 든 내가 ' m 잘못하고 있습니다. 코드베이스에서 간단한 예제를 찾으려고했지만 아아, 모든 표시기가 너무 다르게 작성되어 알아낼 수 없습니다 (((

추신: 크로스 플랫폼 표시기가 필요하지 않습니다. 기본 배열 인덱싱 을 처리하고 싶습니다. 이미 ArrayGetAsSeries()를 통해 배열을 인쇄했습니다. - 알아내지 못했습니다.

 
Igor Makanu :

고마워 친구! 하지만 여기서는 소스 텍스트의 전체 "가중치"를 줄이는 것이 아니라 이해에 관한 것입니다. ArraySetAsSeries() 없이 표시기 값을 계산할 수 있다는 것을 알고 있지만 어떤 이유로 잘못해서 코드베이스에서 간단한 예를 찾으려고했지만 아아, 모든 표시기가 너무 다르게 작성되어 알아낼 수 없습니다 (((

지표를 처음부터 끝까지(최신 기록 데이터에서 최신 데이터까지 - 현재까지) 계산 합니다. 그리고 이것은 시계열에서와 같이 인덱싱에 대해 말합니다. 이것은 배열이 그에 따라 인덱싱되어야 함을 의미합니다.

그러면 작동하지 않는 것은 무엇입니까?

 
Igor Makanu :

고마워 친구! 하지만 여기서는 소스 텍스트의 전체 "가중치"를 줄이는 것이 아니라 이해에 관한 것입니다. ArraySetAsSeries() 없이 표시기 값을 계산할 수 있다는 것을 알고 있지만 어떤 이유로 잘못해서 코드베이스에서 간단한 예를 찾으려고했지만 아아, 모든 표시기가 너무 다르게 작성되어 알아낼 수 없습니다 (((

추신: 크로스 플랫폼 표시기가 필요하지 않습니다. 기본 배열 인덱싱 을 처리하고 싶습니다. 이미 ArrayGetAsSeries()를 통해 배열을 인쇄했습니다. - 알아내지 못했습니다.

ArraySetAsSeries 없이도 할 수 있습니다. 예를 들어 open[0]과 같이 0 배열 인덱스를 출력하는 Print 또는 Comment 로 명확성을 확인하십시오. 그리고 여기서부터 춤을 춥니다. 이것은 무엇인지 이해하기 위한 것입니다.

사유: