MQL 전문가를 위한 질문 - 페이지 16

 
artmedia70 :

그런 상징이 있습니까?

밑에 감사합니다!!! 그런 글리치는 절대 발견하지 못했을 텐데... 교과서에 헛소리를 하고, 유혹을 받고, 쳐다보지도 않고 카피를 하고...
 

어디가 잘못되었는지 알려주세요. 결과가 다른 이유는 무엇입니까?

 //+------------------------------------------------------------------+
//|                                                       TestFr.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   double FrUpz= 0 ;
   double FrUp1 = GetFractal( "0" , 0 , 1 , MODE_UPPER );
   double FrUp2 = GetFractal( "0" , 0 , 2 , MODE_UPPER );
   double FrUp3 = GetFractal( "0" , 0 , 3 , MODE_UPPER );
   Print ( "# FrUp1=" ,FrUp1);
   Print ( "# FrUp2=" ,FrUp2);
   Print ( "# FrUp3=" ,FrUp3);
   for ( int z= 1 ;z<= 3 ;z++)
      {
       FrUpz = GetFractal( "0" , 0 , z, MODE_UPPER );
       Print ( "z=" ,z, " FrUpz=" ,FrUpz);
      } 
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal( string sy= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int     i, k= iBars (sy, tf), kf;
   for (i= 3 ; i<k; i++) {
     if (mode== MODE_LOWER ){
    f= iFractals (sy, tf, MODE_LOWER , i);
     if (f!= 0 ) {
      kf++;
       if (kf>nf) return ( iLow (sy,tf,i));
     } 
    }
     if (mode== MODE_UPPER ){
    f= iFractals (sy, tf, MODE_UPPER , i);
     if (f!= 0 ) {
      kf++;
       if (kf>nf) return ( iHigh (sy,tf,i));
      }
    }
  }
   Print ( "GetFractalBar(): Фрактал не найден" );
   return (- 1 );
}

결과:

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083

 
khorosh :

어디가 잘못되었는지 알려주세요. 결과가 다른 이유는 무엇입니까?

결과:

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083


제어의 편의를 위해 기능을 약간 재작업했습니다. 이제 막대의 번호를 반환합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal( string sy= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int     i,k= iBars (sy,tf),kf;
   for (i= 3 ; i<k; i++) 
     {
       if (mode== MODE_LOWER )
        {
         f= iFractals (sy,tf, MODE_LOWER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
       if (mode== MODE_UPPER )
        {
         f= iFractals (sy,tf, MODE_UPPER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
     }
   Print ( "GetFractalBar(): Фрактал не найден" );
   return (- 1 );
  }
//+------------------------------------------------------------------+

결과

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=3 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=2 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp1=13.0


 

모든 변수의 명시적 초기화 추가됨

 double GetFractal( string sy= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int     i= 0 ,k= iBars (sy,tf),kf= 0 ;
   for (i= 3 ; i<k; i++) 
     {
       if (mode== MODE_LOWER )
        {
         f= iFractals (sy,tf, MODE_LOWER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
       if (mode== MODE_UPPER )
        {
         f= iFractals (sy,tf, MODE_UPPER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
     }
   Print ( "GetFractalBar(): Фрактал не найден" );
   return (- 1 );
  }

결과

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

개발자에게 보여줘야 합니다. 기능에 문제가 있습니다.

 

나는 그 코드가

Print(ChartID()," ",ChartGetInteger(ChartID(), CHART_HEIGHT_IN_PIXELS ,0));

표시기에 배치하면 이상한 결과가 나타납니다. 따라서 지표가 실제로 재설정 된 차트의 탭이 열려 있으면 기본 차트 창의 높이 결과가 매우 올바르게 표시됩니다.

그러나 "네이티브" 차트를 떠나자마자 어떤 이유로 결과는 75와 같아지지만(물론 다른 경우에는 결과가 다를 수 있음) 차트 식별자의 값은 그대로 유지됩니다.

"네이티브" 플롯으로 돌아가면 높이 값이 정확해집니다.

여기에 있는 기능이 무엇인지 설명하기 위해 "알고 있는" 개발자와 사람들의 큰 요청입니다. 원래 그런 뜻이야?! 뭔가 믿을 수 없다!

글쎄요, 그렇다면 열려 있는 탭에 대해 "기본" 차트의 높이 값을 올바르게 제공하는 코드를 제안해 주시기 바랍니다.
 
Vinin :

모든 변수의 명시적 초기화 추가

결과

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

개발자에게 보여줘야 합니다. 기능에 문제가 있습니다.

제 문제에 관심을 가져주셔서 감사합니다. 그 이유는 함수의 두 변수가 명시적으로 초기화되지 않았기 때문인 것으로 밝혀졌습니다. Kim의 모든 기능을 살펴보고 수정해야 합니다.
 

안녕하세요.

I.Kim의 기능은 Advisor의 코드에 포함됩니다. "마운트된" 라이브러리 호출을 제공합니다. "외부 매개변수" 뒤의 코드에서 다음이 제공됩니다.

 //-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

그러나 우연히(동일한 mt4 업데이트 후 - 어드바이저가 작동하지 않음) "Advisor Properties" 창, "dependencies" 탭에서 이상한 항목을 발견했습니다.

이 오류의 의미와 해결 방법을 알려주세요(두 라이브러리가 모두 Include 폴더에 있는 경우)? 라이브러리 폴더는 어떻습니까?

 
Rita :

안녕하세요.

I.Kim의 기능은 Advisor의 코드에 포함됩니다. "마운트된" 라이브러리 호출을 제공합니다. "외부 매개변수" 뒤의 코드에서 다음이 제공됩니다.

그러나 우연히(동일한 mt4 업데이트 후 - 어드바이저가 작동하지 않음) "Advisor Properties" 창, "dependencies" 탭에서 이상한 항목을 발견했습니다.

이 오류의 의미와 해결 방법을 알려주세요(두 라이브러리가 모두 Include 폴더에 있는 경우)? 라이브러리 폴더는 어떻습니까?


stderror.mqh는 소스 코드와 함께 터미널의 표준 배포판의 Libraries 폴더에 있는 stdlib.ex4 라이브러리에서 ErrorDescription 함수를 가져옵니다 . 이 파일이 있는지 확인하고 그렇지 않은 경우 다른 터미널에서 가져옵니다.
 

두 폴더(Include 및 Libraries) 모두 stdlib 소스를 포함합니다. 만일을 대비하여 Include 폴더에서 추가 복사했습니다.

그러나 위에서 설명한 오류는 "종속성" 탭에 계속 표시됩니다. 어떻게 든 다음 함수의 호출을 변경할 수 있습니다. 대신:

 //-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

다른 방법으로 전화를 걸까요?

아니면 최신 버전의 MT4에서 아이킴의 기능을 사용할 수 없게 됩니까?

 
Rita :

두 폴더(Include 및 Libraries) 모두 stdlib 소스를 포함합니다. 만일을 대비하여 Include 폴더에서 추가 복사했습니다.

그러나 위에서 설명한 오류는 "종속성" 탭에 계속 표시됩니다. 어떻게 든 다음 함수의 호출을 변경할 수 있습니다. 대신:

다른 방법으로 전화를 걸까요?

아니면 최신 버전의 MT4에서 아이킴의 기능을 사용할 수 없게 됩니까?


stdlib.ex4 실행 파일이 Libraries 폴더에 있는지 확인하십시오. 비록 그것이 배송된 표준 파일인 Kimov의 파일이 아닌 것 같기는 하지만 말입니다.


옵션으로 Kimov 함수가 무엇을 가져오는지 확인하고 무엇이 잘못되었는지 알아내십시오.