포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 473

 
Kutuzov :

오류를 도와주세요!

나는 mql4 참조의 예를 기반으로 나 자신을 위한 고문을 만들기로 결정했습니다. 하지만 유. 항상 약간의 오류를 제공합니다. 일주일 동안 그를 걱정해 왔지만 아무 것도 나오지 않았습니다.

이봐, 무엇이 잘못되었는지 말해줘, 대괄호 외에 제거하거나 변경할 수 있는 것이 있다.

오류:

'}' - 예기치 않은 프로그램 종료 전문가.mq4 218

'{' - 불균형 괄호 전문가.mq4 23 2


그래서 오류에 쓰여진 것을 번역하십시오. 제 생각에는 이것이 오류의 원인을 찾는 가장 쉬운 방법입니다

이것은 처음에 무엇을합니까?

 #property indicator_level1 20 // Задаём верхний уровень                             
#property indicator_level2 80 // Задаём нижний уровень 

당신에게는 칠면조가 아니라 전문가가 있습니다.

 DPeriod,       // "Redline" индикатора StochRSI.mq4 
 DPeriod= Bid ;   // Запрашивем значение "Redline"

유형이 설정되지 않은 이유는 무엇입니까?

   return ;       // Выход из start()

닫는 괄호는 어디에 있습니까?

 };

그리고 이 소식은 무엇입니까?

예제에서 그것이 쓰여진 위치를 보여줍니까?

 bool Ans = false ,   // Ответ сервера после закрытия
bool Cls_B= false ,

끝에 세미콜론이 아닌 쉼표가 있는 이유는 무엇입니까? 왜 같은 것을 두 번 쓰는가?

다음과 같이 쉼표를 작성하십시오.

 bool Ans = false ,   // Ответ сервера после закрытия
 Cls_B= false , // Критерий для закрытия Buy
 Cls_S= false , // Критерий для закрытия Sell
 Opn_B= false , // Критерий для открытия Buy
 Opn_S= false; // Критерий для открытия Sell

뭐라고요:

[ 1 ] Close

나는 더 이상 보지 않았고, 나는 피곤했고,

일반적으로 - 실수를 비난할 것은 없습니다. 그들은 당신의 부주의에서 나타납니다. 도움말을 다시 읽고 비디오를 보고 이 언어로 프로그래밍하는 방법에 대한 기사를 읽어야 합니다.

 
Vladon :

오류를 수정했는데... 테스트할 때 " 사용자 지정 지표 를 테스트할 수 없습니다"라고 표시됩니다.

처음에는 지정된 인디케이터 버퍼를 의심했지만, 둘을 차례로 지정해도 오류가 정확히 사라지지 않았습니다. 또 어디선가 망했어?

파일:
expert_2.mq4  9 kb
 
프로그래밍 전문가 도움말). 나는 어드바이저를 테스트하고 캠페인을 마쳤습니다. ) 어드바이저 테스터를 켜고 봇이 작동하기 시작하자마자 테스터가 멈추고 모든 것이 매우 오랫동안 정지되어 있습니다. 테스터를 느리게 하는 코드에는 무엇이 있습니까?
 
miha91 :
프로그래밍 전문가 도움말). 나는 어드바이저를 테스트하고 캠페인을 마쳤습니다. ) 어드바이저 테스터를 켜고 봇이 작동하기 시작하자마자 테스터가 멈추고 모든 것이 매우 오랫동안 정지되어 있습니다. 테스터를 느리게 하는 코드에는 무엇이 있습니까?
나는 또한 욕실 아래에서 바스락거리는 무언가가 있습니다! 뭐가 될수 있었는지?
 
int OnInit ()
  {
//--- indicator buffers mapping
 SetIndexBuffer ( 0 ,buf1);
SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 ,Red);



 SetIndexBuffer ( 1 ,buf2);
SetIndexStyle ( 1 , DRAW_LINE , 0 , 1 ,Aqua);


 SetIndexBuffer ( 2 ,buf3);
SetIndexStyle ( 2 , DRAW_LINE , 0 , 1 ,Green);



 SetIndexBuffer ( 3 ,buf4);
SetIndexStyle ( 3 , DRAW_LINE , 0 , 1 ,Yellow);



//---
   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[])
  {
//---



   
   buf1[pos]= iOpen ( Symbol (), 0 ,pos);
   buf2[pos]= iHigh ( Symbol (), 0 ,pos);
   buf3[pos]= iClose ( Symbol (), 0 ,pos);
   buf4[pos]= iLow ( Symbol (), 0 ,pos);
   
  
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
4개의 라인을 그려야 하지만 첫 번째 버퍼만 그리고 다른 버퍼가 없는 경우에만 그립니다.
 

수정 후 라인의 한 점을 확인하려고 하는데 모든 기간에 잘 작동하지만 1시간과 4시간에 주기적으로 100-200점의 오류가 발생합니다. 이를 처리하는 방법은 무엇입니까?

결혼

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   SetTLine(Red, "LineAlert" , Time [ 15 ], High [ 15 ], 0 , High [ 0 ]+ 15 * Point , 0 , 0 , 1 );
//---
   return ( INIT_SUCCEEDED );
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Уравнение прямой.                                              |
//|             Вычисляет значение Y для X в точке пересечения с прямой.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x1,y1 - координаты первой точки,                                        |
//|    x2,y2 - координаты второй точки,                                        |
//|    x     - значение, для которого вычислить Y                              |
//+----------------------------------------------------------------------------+
double EquationDirect( double x1, double y1, double x2, double y2, double x)
  {
   double tk;
   if (x2==x1) return (y1);
   tk=(y2-y1)/(x2-x1)*(x-x1)+y1;

   return ( NormalizeDouble (tk, Digits ));
  }
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine( color cl, string nm= "" ,
               datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 ,
               bool ry= False , int st= 0 , int wd= 1 )
  {
   if (nm== "" ) nm= DoubleToStr ( Time [ 0 ], 0 );
   if (t1<= 0 ) t1= Time [ 10 ];
   if (p1<= 0 ) p1= Low [ 10 ];
   if (t2<= 0 ) t2= Time [ 0 ];
   if (p2<= 0 ) p2= Bid ;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1 ,t1);
   ObjectSet (nm, OBJPROP_PRICE1 ,p1);
   ObjectSet (nm, OBJPROP_TIME2 ,t2);
   ObjectSet (nm, OBJPROP_PRICE2 ,p2);
   ObjectSet (nm, OBJPROP_COLOR ,cl);
   ObjectSet (nm, OBJPROP_RAY ,ry);
   ObjectSet (nm, OBJPROP_STYLE ,st);
   ObjectSet (nm, OBJPROP_WIDTH ,wd);
  }
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow( int cd, color cl,
               string nm= "" , datetime t1= 0 , double p1= 0 , int sz= 0 )
  {
   if (nm== "" ) nm= DoubleToStr ( Time [ 0 ], 0 );
   if (t1<= 0 ) t1= Time [ 0 ];
   if (p1<= 0 ) p1= Bid ;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_ARROW , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1 ,t1);
   ObjectSet (nm, OBJPROP_PRICE1 ,p1);
   ObjectSet (nm, OBJPROP_ARROWCODE ,cd);
   ObjectSet (nm, OBJPROP_COLOR ,cl);
   ObjectSet (nm, OBJPROP_WIDTH ,sz);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   int d= 0 ;
   int     X_1,X_2,X3d;
   double Y_1,Y_2,Y3d;
   static int _time_waiting= 0 ;
   static int i;
//---
   X_1=   ObjectGet ( "LineAlert" , OBJPROP_TIME1 );
   X_2 = ObjectGet ( "LineAlert" , OBJPROP_TIME2 );
   Y_1 = ObjectGet ( "LineAlert" , OBJPROP_PRICE1 );
   Y_2 = ObjectGet ( "LineAlert" , OBJPROP_PRICE2 );
   SetArrow( 6 ,Orange, "X1" ,X_1,Y_1, 3 );
   SetArrow( 6 ,Orange, "X2" ,X_2,Y_2, 3 );
   X3d= Time [ 0 ];Y3d=EquationDirect(X_1,Y_1,X_2,Y_2,X3d);
   SetArrow( 6 ,Orange, "X" ,X3d,Y3d, 3 );
  }
//+------------------------------------------------------------------+
 
beginner :

수정 후 라인의 한 점을 확인하려고 하는데 모든 기간에 잘 작동하지만 1시간과 4시간에 주기적으로 100-200점의 오류가 발생합니다. 이를 처리하는 방법은 무엇입니까?


그래서 시도

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   SetTLine(Red, "LineAlert" , Time [ 15 ], High [ 15 ], 0 , High [ 0 ]+ 15 * Point , 0 , 0 , 1 );
//---
   return ( INIT_SUCCEEDED );
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Уравнение прямой.                                              |
//|             Вычисляет значение Y для X в точке пересечения с прямой.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x1,y1 - координаты первой точки,                                        |
//|    x2,y2 - координаты второй точки,                                        |
//|    x     - значение, для которого вычислить Y                              |
//+----------------------------------------------------------------------------+
double EquationDirect( double x1, double y1, double x2, double y2, double x)
  {
   double tk;
   if (x2==x1) return (y1);
   tk=(y2-y1)/(x2-x1)*(x-x1)+y1;

   return ( NormalizeDouble (tk, Digits ));
  }
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine( color cl, string nm= "" ,
               datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 ,
               bool ry= False , int st= 0 , int wd= 1 )
  {
   if (nm== "" ) nm= DoubleToStr ( Time [ 0 ], 0 );
   if (t1<= 0 ) t1= Time [ 10 ];
   if (p1<= 0 ) p1= Low [ 10 ];
   if (t2<= 0 ) t2= Time [ 0 ];
   if (p2<= 0 ) p2= Bid ;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1 ,t1);
   ObjectSet (nm, OBJPROP_PRICE1 ,p1);
   ObjectSet (nm, OBJPROP_TIME2 ,t2);
   ObjectSet (nm, OBJPROP_PRICE2 ,p2);
   ObjectSet (nm, OBJPROP_COLOR ,cl);
   ObjectSet (nm, OBJPROP_RAY ,ry);
   ObjectSet (nm, OBJPROP_STYLE ,st);
   ObjectSet (nm, OBJPROP_WIDTH ,wd);
  }
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow( int cd, color cl,
               string nm= "" , datetime t1= 0 , double p1= 0 , int sz= 0 )
  {
   if (nm== "" ) nm= DoubleToStr ( Time [ 0 ], 0 );
   if (t1<= 0 ) t1= Time [ 0 ];
   if (p1<= 0 ) p1= Bid ;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_ARROW , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1 ,t1);
   ObjectSet (nm, OBJPROP_PRICE1 ,p1);
   ObjectSet (nm, OBJPROP_ARROWCODE ,cd);
   ObjectSet (nm, OBJPROP_COLOR ,cl);
   ObjectSet (nm, OBJPROP_WIDTH ,sz);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   int d= 0 ;
   int     X_1,X_2,X3d;
   double Y_1,Y_2,Y3d;
   static int _time_waiting= 0 ;
   static int i;
//---
   X_1=   ObjectGet ( "LineAlert" , OBJPROP_TIME1 );
   X_2 = ObjectGet ( "LineAlert" , OBJPROP_TIME2 );
   Y_1 = ObjectGet ( "LineAlert" , OBJPROP_PRICE1 );
   Y_2 = ObjectGet ( "LineAlert" , OBJPROP_PRICE2 );
   SetArrow( 6 ,Orange, "X1" ,X_1,Y_1, 3 );
   SetArrow( 6 ,Orange, "X2" ,X_2,Y_2, 3 );
   X3d= Time [ 0 ];Y3d= ObjectGetValueByShift ( "LineAlert" , 0 );
   SetArrow( 6 ,Orange, "X" ,X3d,Y3d, 3 );
  }
//+------------------------------------------------------------------+

시도, 시도하지 않았습니다.

 

또한 다음을 수행할 수 있습니다.

Y3d = ObjectGetValueByTime ( "LineAlert" , Time [ 0 ], 2 );
  

현대어

 
r772ra :

또한 다음을 수행할 수 있습니다.

현대어


효과가 있는 것 같은데 계속 보고 있습니다.

고맙습니다!

 
지식이 있는 사람들을 위한 질문, 문제가 최근에 발생했습니다. 메일에 대한 신호가 VPS로 오는 것을 중단했습니다. 이전에는 모든 것이 괜찮았지만 이제 테스트 중에 터미널 로그에 씁니다. sant했지만 비누에는 아무 것도 오지 않습니다. VPS가 재부팅되었지만 터미널도 결과가 없었습니다. 여기서 문제가 무엇입니까?