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

 
Vladimir Karputov :

최적화는 AGENTS(귀하의 경우 - LOCAL AGENTS)에 의해 수행됩니다.

로컬 에이전트 의 로그를 보려면 로그 탭을 마우스 오른쪽 버튼으로 클릭하고 에이전트 폴더로 이동합니다.

오류가 없다는 점입니다. 모든 것이 중요합니다. 일종의 방화벽이나 다른 것이 아닐까요?

파일:
 
Aleksandr Dziuba :

오류가 없다는 점입니다. 모든 것이 중요합니다. 일종의 방화벽이나 다른 것이 아닐까요?

단일 테스트 실행 - 단일 패스. 최적화가 아니라 단일 패스입니다. 이렇게 하면 로그가 표시됩니다.

 
Vladimir Karputov :

단일 테스트 실행 - 단일 패스. 최적화가 아니라 단일 패스입니다. 이렇게 하면 로그가 표시됩니다.

비주얼 말하는거야? 글쎄, 나는 로그를 얻었다. 거기에 나쁜 것은 볼 수 없습니다. 모든 매개변수가 전달되었습니다. 심지어 그는 성취했다. 그리고 출력 잔액은 20,000으로 남았습니다.

파일:
20200924.log  17 kb
 
Aleksandr Dziuba :

비주얼 말하는거야? 글쎄, 나는 로그를 얻었다. 거기에 나쁜 것은 볼 수 없습니다. 모든 매개변수가 전달되었습니다. 심지어 그는 성취했다. 그리고 출력 잔액은 20,000으로 남았습니다.

따라서 오류가 발생하거나 거래 작업을 완료할 수 없는 경우 오류 메시지가 표시되도록 코드를 변경합니다. 또는 일반적으로 코드가 잘못되어 신호를 제공하지 않습니다. 기적은 일어나지 않습니다.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Импортируемая функция не может иметь такого параметра (нельзя передавать указатель, класс или структуру, содержащую динамический массив, указатель, класс и т.д.) Недопустимый возвращаемый тип. Например, такая ошибка будет выдана для функций, импортированных из...
 
Vladimir Karputov :

따라서 오류가 발생하거나 거래 작업을 완료할 수 없는 경우 오류 메시지가 표시되도록 코드를 변경합니다. 또는 일반적으로 코드가 잘못되어 신호를 제공하지 않습니다. 기적은 일어나지 않습니다.

응.

일반적으로 Ontick에는 최적화가 포함되어 있지 않습니다. OnInit가 처리 중입니다. 그리고 On Tick은 생성되지 않습니다. 문제가 무엇입니까?

입력과 출력에 점 인쇄( )를 넣습니다. 초기화만 기록됩니다.

추신

나는 오류를 처리합니다. 습관. 1987년부터 프로그램을 작성해 왔습니다.

 
Aleksandr Dziuba :

응.

일반적으로 Ontick에는 최적화가 포함되어 있지 않습니다. OnInit가 처리 중입니다. 그리고 On Tick은 생성되지 않습니다. 문제가 무엇입니까?

입력과 출력에 점 인쇄( )를 넣습니다. 초기화만 기록됩니다.

추신

나는 오류를 처리합니다. 습관. 1987년부터 프로그램을 작성해 왔습니다.

코드가 없으면 텔레파시만 도울 수 있습니다. 이제 운이 좋으면 모든 텔레파시가 휴가 중입니다.

 
Vladimir Karputov :

코드가 없으면 텔레파시만 도울 수 있습니다. 이제 운이 좋으면 모든 텔레파시가 휴가 중입니다.

이유를 찾았습니다. 어떤 이유로 지표는 Ontick에서 재계산되지 않습니다(재계산된 막대의 수를 표시하지 않음). 견적을 업데이트해야 할 수도 있습니다.

그럼에도 불구하고 감사합니다. 더 똑똑해졌습니다. 로그가 기록되는 위치를 찾았습니다.

 

MQL4 -> MQL5에서 단순 표시기로 변환되었지만 마지막 몇 개의 막대에 신호가 없습니다. 이유를 찾도록 도와주세요. 소스 코드 및 결과 첨부. 변환된 것도 여기에 넣을 것입니다.

 #property indicator_chart_window
#property indicator_plots    4
#property indicator_buffers 4
#property indicator_color1 PaleVioletRed
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
#property indicator_color4 LimeGreen

input int   dist2           = 21 ;       // Distance#2
input int   dist1           = 14 ;       // Distance#1

double b1[];
double b2[];
double b3[];
double b4[];

int     handle_atr;
int     min_rates_total;
double atr[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit () {

   SetIndexBuffer ( 0 ,b1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,b2, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,b3, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,b4, INDICATOR_DATA );
   
   ArraySetAsSeries (b1, true );
   ArraySetAsSeries (b2, true );
   ArraySetAsSeries (b3, true );
   ArraySetAsSeries (b4, true );

   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 1 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 2 , PLOT_DRAW_TYPE , DRAW_ARROW );
   PlotIndexSetInteger ( 3 , PLOT_DRAW_TYPE , DRAW_ARROW );

       PlotIndexSetInteger ( 2 , PLOT_ARROW , 159 );
       PlotIndexSetInteger ( 3 , PLOT_ARROW , 159 );
   
   ResetLastError ();
   handle_atr = iATR ( NULL , PERIOD_CURRENT , 50 );
   if (handle_atr== INVALID_HANDLE ) {
       Print ( "   ***   ATR handle was unable to create. Error " , GetLastError ());
       return INIT_FAILED ;
   }

   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 3 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   
   PlotIndexSetString ( 0 , PLOT_LABEL , "SuperSignals Upper" );
   PlotIndexSetString ( 1 , PLOT_LABEL , "SuperSignals Lower" );
   PlotIndexSetString ( 2 , PLOT_LABEL , "SuperSignals Sell" );
   PlotIndexSetString ( 3 , PLOT_LABEL , "SuperSignals Buy" );

         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 counted_bars=prev_calculated;
   int i,limit;
   
   ArraySetAsSeries (Low, true );
   ArraySetAsSeries (High, true );

   if (counted_bars< 0 ) return 0 ;
   if (counted_bars> 0 ) counted_bars--;
           limit=rates_total-counted_bars;
           limit= MathMax (limit,dist1);
           limit= MathMax (limit,dist2);

   for (i = limit- 1 ; i >= 0 ; i--) {
         int hhb1 = ArrayMaximum (High,i-dist1/ 2 ,dist1);
         int llb1 = ArrayMinimum (Low, i-dist1/ 2 ,dist1);
         int hhb  = ArrayMaximum (High, MathMax ( 0 ,i-dist2/ 2 ),dist2);
         int llb  = ArrayMinimum (Low, MathMax ( 0 ,i-dist2/ 2 ),dist2);

            b1[i] = EMPTY_VALUE ;
            b2[i] = EMPTY_VALUE ;
            b3[i] = EMPTY_VALUE ;
            b4[i] = EMPTY_VALUE ;
         
         ArraySetAsSeries (atr, true );
         int copied= CopyBuffer (handle_atr, 0 , 0 ,limit,atr);
         if (copied<= 0 ) Print ( "   ***   ATR failed to copy." );
         double tr = atr[i];

                      b1[i] = High[hhb];
                      b2[i] = Low[llb];
         if (i==hhb1) b3[i] = High[hhb1]+tr/ 2 ;
         if (i==llb1) b4[i] = Low[llb1] -tr/ 2 ;
    }
   
   return rates_total;
}
//+------------------------------------------------------------------+

결과.


 
Grigori.SB :

MQL4 -> MQL5에서 단순 표시기로 변환되었지만 마지막 몇 개의 막대에 신호가 없습니다. 이유를 찾도록 도와주세요. 소스 코드 및 결과 첨부. 변환된 것도 여기에 넣을 것입니다.

결과.


플랫폼간에 비논리적으로 행해진 일이 범인일 가능성이 있는 것 같습니다

다양한 입력 매개변수에 주의

MT4

 ArrayMaximum
Ищет в одномерном числовом массиве максимальный элемент.

int    ArrayMaximum (
   const void &   array[],             // массив для поиска
   int            count= WHOLE_ARRAY ,   // количество проверяемых
   int            start= 0                // с какого индекса начинаем поиск
   );

MT5

 ArrayMaximum
Ищет максимальный элемент в первом измерении многомерного числового массива.

int    ArrayMaximum (
   const void &   array[],             // массив для поиска
   int            start= 0 ,             // с какого индекса начинаем поиск
   int            count= WHOLE_ARRAY      // количество проверяемых
   );
 
Vitaly Muzichenko :

플랫폼간에 비논리적으로 행해진 일이 범인일 가능성이 있는 것 같습니다

다양한 입력 매개변수에 주의

MT4

MT5

고마워요, 비탈리.

이 시점에서 변수의 순서는 정확합니다. 변환하는 동안 변수를 바꿨습니다. 그리고 MQL4 버전 에는 iHighest /iLowest 기능도 있었습니다.

여기에는 다른 것이 있습니다. 나는 이미 내 머리를 부러뜨렸다.

사유: