오류, 버그, 질문 - 페이지 422

 
빌드 468로 업데이트한 후 [trade disabled] 진단을 받은 거래는 더 이상 테스터에서 처리되지 않았습니다. 챔피언십 2010 계정에 대한 테스트 .
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

좋은 오후, 포럼 사용자.

이해를 도와주세요. 어떤 이유로 지표가 차트에 표시되지 않습니다. 오류가 어디에 있는지 명확하지 않습니다.

일반적으로 차트에는 다음과 같이 표시되어야 합니다.

그러나이 표시기의 내 창에는 공허함이 있습니다. MT4.

다음은 표시기 코드입니다. 코드에 버그가 있습니까? 아니면 다른 것이 있습니까?

 //+------------------------------------------------------------------+
//|                                                        Bands.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Red
//---- indicator parameters
extern int    BandsPeriod= 50 ;
extern int    BandsShift= 0 ;
extern double BandsDeviations= 2.0 ;
extern int    TrendBars = 10 ;
extern bool EnableTextDisplay = true ;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
double HighTrend[];
double LowTrend[];
double MidTrend[];

//bool DisplayText = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,MovingBuffer);
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 ,UpperBuffer);
   SetIndexStyle( 2 , DRAW_LINE );
   SetIndexBuffer ( 2 ,LowerBuffer);
   SetIndexBuffer ( 3 ,HighTrend);
   SetIndexBuffer ( 4 ,LowTrend);
   SetIndexBuffer ( 5 ,MidTrend);
   
//----
   SetIndexDrawBegin( 0 ,BandsPeriod+BandsShift);
   SetIndexDrawBegin( 1 ,BandsPeriod+BandsShift);
   SetIndexDrawBegin( 2 ,BandsPeriod+BandsShift);
//----
   if (EnableTextDisplay)
   {
      DisplayLabel_1();
      DisplayLabel_2();
      DisplayLabel_3();
   }
   
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres;
//----
   if ( Bars <=BandsPeriod) return ( 0 );
//---- initial zero
   if (counted_bars< 1 )
      for (i= 1 ;i<=BandsPeriod;i++)
        {
         MovingBuffer[ Bars -i]= EMPTY_VALUE ;
         UpperBuffer[ Bars -i]= EMPTY_VALUE ;
         LowerBuffer[ Bars -i]= EMPTY_VALUE ;
        }
//----
   int limit= Bars -counted_bars;
   if (counted_bars> 0 ) limit++;
   for (i= 0 ; i<limit; i++)
      MovingBuffer[i]= iMA ( NULL , 0 ,BandsPeriod,BandsShift, MODE_SMA , PRICE_CLOSE ,i);
//----
   i= Bars -BandsPeriod+ 1 ;
   if (counted_bars>BandsPeriod- 1 ) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
      sum= 0.0 ;
      k=i+BandsPeriod- 1 ;
      oldval=MovingBuffer[i];
      while (k>=i)
        {
         newres=Close[k]-oldval;
         sum+=newres*newres;
         k--;
        }
      deviation=BandsDeviations* MathSqrt (sum/BandsPeriod);
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
//----

   double TestVal1 = 0 ;
   double TrendValueHigh = 0 ;
   for (i= 0 ;i<TrendBars;i++)
   {
         TestVal1 = UpperBuffer[i] - UpperBuffer[ 1 + 1 ];
         TrendValueHigh = TrendValueHigh - TestVal1;

   }
   double TrendValueLow = 0 ;
   for (i= 0 ;i<TrendBars;i++)
   {
         TestVal1 = LowerBuffer[i] - LowerBuffer[ 1 + 1 ];
         TrendValueLow = TrendValueLow - TestVal1;

   }   
   double TrendValueMid = 0 ;
   for (i= 0 ;i<TrendBars;i++)
   {
         TestVal1 = MovingBuffer[i] - MovingBuffer[ 1 + 1 ];
         TrendValueMid = TrendValueMid - TestVal1;

   }  
   
   
   MidTrend[ 0 ] = TrendValueMid * 1000 ;
   HighTrend[ 0 ] = TrendValueHigh * 1000 ;
   LowTrend[ 0 ] = TrendValueLow * 1000 ;


   if (EnableTextDisplay)
   {
      ObjectSetText( "Label_Message1" , "High " + DoubleToStr(HighTrend[ 0 ], 2 ), 14 , "Arial" ,Yellow);
      ObjectSetText( "Label_Message2" , "Mid " + DoubleToStr(MidTrend[ 0 ], 2 ), 14 , "Arial" ,Yellow);
      ObjectSetText( "Label_Message3" , "Low " + DoubleToStr(LowTrend[ 0 ], 2 ), 14 , "Arial" ,Yellow);
   }


   return ( 0 );
  }
  
  int  DisplayLabel_1()  
{
   ObjectCreate ( "Label_Message1" , OBJ_LABEL , 0 , 0 , 0 ); // Creating obj.
   ObjectSet( "Label_Message1" , OBJPROP_CORNER , 1 );    // Reference corner
   ObjectSet( "Label_Message1" , OBJPROP_XDISTANCE , 10 ); // X coordinate
   ObjectSet( "Label_Message1" , OBJPROP_YDISTANCE , 15 ); // Y coordinate

   ObjectSetText( "Label_Message1" , "" , 14 , "Arial" ,White);
   
   return ( 0 );      
}
int  DisplayLabel_2()  
{
   ObjectCreate ( "Label_Message2" , OBJ_LABEL , 0 , 0 , 0 ); // Creating obj.
   ObjectSet( "Label_Message2" , OBJPROP_CORNER , 1 );    // Reference corner
   ObjectSet( "Label_Message2" , OBJPROP_XDISTANCE , 10 ); // X coordinate
   ObjectSet( "Label_Message2" , OBJPROP_YDISTANCE , 35 ); // Y coordinate

   ObjectSetText( "Label_Message2" , "" , 14 , "Arial" ,White);
   
   return ( 0 );      
}
int  DisplayLabel_3()  
{
   ObjectCreate ( "Label_Message3" , OBJ_LABEL , 0 , 0 , 0 ); // Creating obj.
   ObjectSet( "Label_Message3" , OBJPROP_CORNER , 1 );    // Reference corner
   ObjectSet( "Label_Message3" , OBJPROP_XDISTANCE , 10 ); // X coordinate
   ObjectSet( "Label_Message3" , OBJPROP_YDISTANCE , 55 ); // Y coordinate

   ObjectSetText( "Label_Message3" , "" , 14 , "Arial" ,White);
   
   return ( 0 );      
}

//+------------------------------------------------------------------+
 

수리는 당연하지만 차라리 MT4 홈페이지로

http://forum.mql4.com/en/


MT5 입니다

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\


누가 최대 무엇을 말하지 않습니다. 유효한 bin 파일 크기

독서를위한 고문을 열 수 있으며 300 만분의 1에서 25 미터를 열 수 있습니다. 가치

열고 싶지 않지만 500.000 값으로 열립니다?

MQL4: форум по механическим торговым системам и тестированию стратегий
  • www.mql5.com
MQL4: форум по механическим торговым системам и тестированию стратегий
 
Im_hungry :

수리는 당연하지만 차라리 MT4 홈페이지로

https://www.mql5.com/ru/forum


MT5 입니다

고마워, 내가 갈게.
 
Im_hungry :

누가 최대 무엇을 말하지 않습니다. 유효한 bin 파일 크기

독서를 위해 고문을 열 수 있으며 300 만분의 1에서 25 미터를 열 수 있습니다. 가치

열고 싶지 않지만 500.000 값으로 열립니다?

개발자들에게. 문서에는 파일 크기 제한에 대한 내용이 없습니다.
 
Im_hungry :


누가 최대 무엇을 말하지 않습니다. 유효한 bin 파일 크기

독서를 위해 고문을 열 수 있으며 300 만분의 1에서 25 미터를 열 수 있습니다. 가치

열고 싶지 않지만 500.000 값으로 열립니다?

아마도 파일을 배열로 읽고 있습니까? - RAM이 충분하지 않을 가능성이 큽니다.
 
라인


 Print (( int ) ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR ), " " ,( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS ));

거의 같은 값을 반환합니다(차이는 막대 하나뿐). 어때요?

 2011.06 . 18 00 : 03 : 45      CHFJPY (CHFJPY,M15)     384 385

이론적으로 한 함수는 현재 차트에서 볼 막대의 수(예: 5000)를 반환하고 다른 함수는 화면에 맞는 숫자(내 경우에는 380보다 약간 높음)만 반환해야 합니다.

빌드 466, OS Windows 7 x64

 
olyakish :
라인


거의 같은 값을 반환합니다(차이는 막대 하나뿐). 어때요?

이론적으로 한 함수는 현재 차트에서 볼 막대의 수(예: 5000)를 반환하고 다른 함수는 화면에 맞는 숫자(내 경우에는 380보다 약간 높음)만 반환해야 합니다.

빌드 466, OS Windows 7 x64

모든 것이 정확합니다. 보이는 막대의 수:
 ChartGetInteger ( 0 , CHART_VISIBLE_BARS )

항상 첫 번째(왼쪽) 보이는 막대의 수보다 1이 더 큽니다.

 ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR)

결국 마지막 막대(오른쪽)의 숫자는 0입니다.

물론 그래프가 "스크롤"되지 않는 한. 차트를 스크롤하면 <첫 번째 보이는 막대의 수>=<보이는 막대의 수>+<차트의 막대 오프셋>-1입니다.

그리고 당신이 쓰는 것:

...현재 차트에서 볼 막대 수(예: 5000)...

이것은 약간 다릅니다:

 TerminalInfoInteger ( TERMINAL_MAXBARS );   // Максимальное количество баров на графике
 

2010년과 2009년의 경우 2008년은 파일을 열지 않는 크기 로 파일을 열지 않는다는 점에서,

이 코드로 칠면조가 만든 파일을 열려고 하는데 열 수 없다고 나옵니다

 2 значения - первое целое (хранит время в секундах)

второе дробное (цену или еще что),


Когда время (т.е. секунды) в файле совпадает с временем, текущим, используем второе значение

и выводим его. Все это я реализовал следующим образом - работает без косяков - пока :-)


double proverka()
{
 handle= FileOpen ( "kor.bin" , FILE_BIN | FILE_READ );
 if (handle< 0 ) Print ( "-----Неоткрывается :-)" );
 ulong file= FileSize (handle);
 ulong N = 0.0 ;
 double kor = 0.0 ;
 datetime bar[ 1 ];
 CopyTime (Symbol_1, NULL , 0 , 1 ,bar);
 ulong New = ( ulong ) bar[ 0 ];
 while (N < file)
  {
   kor= FileReadDouble (handle); 
   N = FileTell (handle);
   if (kor == New) 
    {
     double ss = FileReadDouble (handle);
     FileClose (handle);
     return (ss);
     break ;
    }
  } 
 FileClose (handle);
 return (kor);
}

2011, 01, 01을 제외한 모든 기간은 나머지를 열지 않으며,

이런 젠장?

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
uncleVic :

이것은 약간 다릅니다:


맞지 않을 것 같아요.

 TerminalInfoInteger ( TERMINAL_MAXBARS ); 

예를 들어 설정에 50,000개의 막대가 설정되어 있고 11,375개의 막대가 실제로 로드되어 있고 이를 제거하는 것이 목표이기 때문에


방법

 PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,);


그리고 여기에 사용할 숫자.

onInit에 있는 위협

   SetIndexBuffer ( 0 ,CHF, INDICATOR_DATA );
   PlotIndexSetString ( 0 , PLOT_LABEL , "CHF" );
   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR , clrMagenta );
   ArraySetAsSeries (CHF, true );
   ArrayInitialize (CHF, EMPTY_VALUE );
   //PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);

그리고 역사상 한 번도 청소되지 않은 쓰레기 ...