MQL5에서 함께 배우고 쓰기 - 페이지 4

 
안녕하세요! 어렵지 않다면 Expert Advisor에서 지표를 올바르게 호출했는지 알려주실 수 있습니까?

이중 퍼셉트론()
{
더블 w1 = x1 - 100;
더블 w2 = x2 - 100;
더블 w3 = x3 - 100;
더블 w4 = x4 - 100;
더블 a1 = iCustom(NULL,0,"사용자 정의 CCI", 0);
이중 a2 = iCustom(NULL,0,"사용자 정의 CCI", 7);
double a3 = iCustom(NULL,0,"Custom CCI", 14);//CCI입니다.

이중 a4=iMA(NULL,0,21,0,0,0); // 포스 인덱스 입니다.

return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
}
 
Avelox :
안녕하세요! 어렵지 않다면 Expert Advisor에서 지표를 올바르게 호출했는지 알려주실 수 있습니까?

이중 퍼셉트론()
{
더블 w1 = x1 - 100;
더블 w2 = x2 - 100;
더블 w3 = x3 - 100;
더블 w4 = x4 - 100;
이중 a1 = iCustom(NULL,0,"사용자 정의 CCI", 0);
이중 a2 = iCustom(NULL,0,"사용자 정의 CCI", 7);
double a3 = iCustom(NULL,0,"Custom CCI", 14);//CCI입니다.

이중 a4=iMA(NULL,0,21,0,0,0); //포스 인덱스입니다.

return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
}


아니요.

다른 표시기 호출 함수 와 마찬가지로 iCustom은 표시기 핸들을 반환합니다. 문서 읽기

 

고맙습니다! 그럼!? 이중 a2 = iCCI(NULL,0,7,0);

이중 a4=iForce(NULL,0,21,0,0);

그리고 컴파일러는 이전 버전에 만족합니다.

 

맞춤형 악어 표시기의 예를 참조하십시오. https://www.mql5.com/en/code/9

거기:

  1. 핸들 ( iMA )
  2. 이 핸들( BarsCalculated )에 의해 계산되는 데이터의 양을 제어합니다.
  3. 데이터 조각이 복사됩니다( CopyBuffer ).
Alligator
Alligator
  • 투표: 14
  • 2010.01.26
  • MetaQuotes Software Corp.
  • www.mql5.com
The Alligator Indicator is a combination of Balance Lines (Moving Averages).
 
Avelox :

고맙습니다! 그럼!? 이중 a2 = iCCI(NULL,0,7,0);

이중 a4=iForce(NULL,0,21,0,0);

그리고 컴파일러는 이전 버전에 만족합니다.


컴파일러는 그것으로 괜찮습니다. 4에서 칠면조 중 하나를 전송할 때 다음 코드를 얻었습니다.


   iMA1Handle= iMA ( NULL , 0 ,Period1/ 2 , 0 , 3 , PRICE_CLOSE ); // Не забыть потом перемножить на 2
   iMA2Handle=   iMA ( NULL , 0 , Period1,   0 , 3 , PRICE_CLOSE );
   SQPeriod= NormalizeDouble ( MathSqrt (Period1), 0 );

... Бла-бла-бла ...

4에서는 다음과 같았습니다.

   while (i>= 0 )
      {
         ExtMapBuffer2[i]= 2 * iMA ( NULL , 0 ,PeriodX/ 2 , 0 , 3 , PRICE_CLOSE ,i);
         ExtMapBuffer3[i]=   iMA ( NULL , 0 , PeriodX, 0 , 3 , PRICE_CLOSE ,i);
         ExtMapBuffer4[i]=ExtMapBuffer2[i]-ExtMapBuffer3[i];
         i--;
      }
   i=i2; // Возврат i для расчёта значений индюка
   while (i>= 0 )
      {
         ExtMapBuffer1[i]=iMAOnArray(ExtMapBuffer4, 0 , NormalizeDouble ( MathSqrt (PeriodX), 0 ), 0 , 3 ,i);

... Бла-бла-бла ...

5-ke에 iMAOnArray가 없기 때문에 줄별 번역이 작동하지 않았고 베타에서 포함되었습니다. 음, 정말 사용하고 싶지 않습니다. - fih는 알고 있습니다 ... 글쎄, 그래서 2 * iMa 처음에 .... 오랫동안 나는 출력이 왜 쓰레기인지 이해할 수 없었습니다. 끔찍하게 저주. 이미 포럼에 글을 쓰고 싶었습니다. 그러다가 습관이 되었습니다. 컴파일러는 5에서 반환된 핸들이 데이터 유형 Int(실제로는 숫자)이고 2를 곱할 수 있기 때문에 이에 적합합니다. 그러나 출력이 될 핸들은 또 다른 질문이며 다음과 같이 작동하지 않습니다. 저것

 

나는 시스템을 상위 5위까지 옮기려고 하고 즉시 매복한다.

 //+------------------------------------------------------------------+
//|                                                  GetInternet.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"

#import "wininet.dll"
   int InternetAttemptConnect ( int x);
   int InternetOpenA( string sAgent, int lAccessType, 
                     string sProxyName = "" , string sProxyBypass = "" , 
                     int lFlags = 0 );
   int InternetOpenUrlA( int hInternetSession, string sUrl, 
                       string sHeaders = "" , int lHeadersLength = 0 ,
                       int lFlags = 0 , int lContext = 0 );
          
   int InternetReadFile( int hFile, int & sBuffer[], int lNumBytesToRead, 
                       int & lNumberOfBytesRead[]);
   int InternetCloseHandle( int hInet);


#import "stdlib.ex5"
#import
input int Step = 300 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment ( "Старт..." );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
     Comment (GetURL( "http://www.forexremote.net" ));
    
  }
//+------------------------------------------------------------------+


//+----------------------------------------------------------------------------------------------------------+
//| Функция получения WEB страницы                                                                           |
//+----------------------------------------------------------------------------------------------------------+
string GetURL( string url)
{
   int rv = InternetAttemptConnect( 0 );
   if (rv != 0 )
     {
       Alert ( "Ошибка при вызове InternetAttemptConnect()" );
       return ( "" );
     }

   int hInternetSession = InternetOpenA( "Microsoft Internet Explorer" , 1 , "" , "" , 0 );
   if (hInternetSession <= 0 )
     {
       Alert ( "Ошибка при вызове InternetOpenA()" );
       return ( "" );         
     }

   int hURL = InternetOpenUrlA(hInternetSession, url, "" , 0 , 0 , 0 );
   if (hURL <= 0 )
    {
       Print ( "Ошибка получения данных с узла!" );
       //fComment("Ошибка получения данных с узла!",true);
       InternetCloseHandle(hInternetSession);
       return ( "" );         
     } 
          
   int cBuffer[ 256 ];
   int dwBytesRead[ 1 ]; 
   string TXT = "" ;
   while (! IsStopped ())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024 , dwBytesRead);
       if (dwBytesRead[ 0 ] == 0 )
           break ;
       string text = "" ;   
       for ( int i = 0 ; i < 256 ; i++)
         {
              text = text + CharToString (cBuffer[i] & 0x000000FF );
               if ( StringLen (text) == dwBytesRead[ 0 ])
                   break ;
              text = text + CharToString (cBuffer[i] >> 8 & 0x000000FF );
               if ( StringLen (text) == dwBytesRead[ 0 ])
                   break ;
           text = text + CharToString (cBuffer[i] >> 16 & 0x000000FF );
           if ( StringLen (text) == dwBytesRead[ 0 ])
               break ;
           text = text + CharToString (cBuffer[i] >> 24 & 0x000000FF );
         }
       TXT = TXT + text;
       //Sleep(500);

     }
     InternetCloseHandle(hInternetSession);
     return (TXT);
}
//+----------------------------------------------------------------------------------------------------------+
//| Конец Функции получения WEB страницы                                                                     |
//+----------------------------------------------------------------------------------------------------------+
컴파일 오류가 0이지만 결국 스크립트가 작동하지 않을 때 :-(
 
maxandsoft :

나는 시스템을 상위 5위까지 옮기려고 하고 즉시 매복한다.

컴파일 오류가 0이지만 결국 스크립트가 작동하지 않을 때 :-(


"스크립트"란 무엇을 의미합니까? 코드의 기능으로 판단하면 어드바이저 코드를 게시한 것입니다. MQL4 마이그레이션 참조
 
Rosh :


"스크립트"란 무엇을 의미합니까? 코드의 기능으로 판단하면 어드바이저 코드를 게시한 것입니다. MQL4 마이그레이션 참조


네, 물론 말 그대로 고문입니다. wininet.dll을 사용하여 서버로부터 응답을 받아야 합니다.
 
maxandsoft :


네, 물론 말 그대로 고문입니다. wininet.dll을 사용하여 서버로부터 응답을 받아야 합니다.

이러한 기능의 유니코드 버전을 사용해 보십시오. MQL5는 유니코드 인코딩을 사용합니다.

 
Rosh :

이러한 기능의 유니코드 버전을 사용해 보십시오. MQL5는 유니코드 인코딩을 사용합니다.



따라서 결론은 디버깅 중에 컴파일한 후 오류를 표시하지 않고 MQL 편집기로 다시 던집니다. 그리고 차트에서 어드바이저를 뽑기만 하면 차트에 나오지도 않습니다. 저것들. 어드바이저를 디버깅하거나 실행하지 않아도 어디에서나 오류가 발생하지 않습니다.