Hatalar, hatalar, sorular - sayfa 422

 
468'i oluşturmak için güncelleme yapıldıktan sonra, teşhisi [ticaret devre dışı bırakılmış] olan işlemler artık test cihazında işlenmedi. 2010 şampiyonası hesabında test.
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

İyi günler, forum kullanıcıları.

Lütfen anlamak için yardım edin. Bazı nedenlerden dolayı, gösterge grafikte görüntülenmiyor - hatanın nerede olduğu belli değil.

Genel olarak, grafikte şu şekilde görüntülenmelidir:

Ancak bu göstergenin penceremde sadece boşluk var. MT 4.

İşte gösterge kodu. Kodda bir hata mı var yoksa başka bir şey mi?

 //+------------------------------------------------------------------+
//|                                                        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 );      
}

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

Tabii ki Soori, ama MT4 web sitesine gitmeyi tercih ediyorsun

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


bu MT5

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


Kim ne max söylemez. geçerli bin dosya boyutu

hangi okuma için bir danışman açabilir ve daha sonra 3 milyon onda 25 metre. değerler

açmak istemiyor ama 500.000 değerle mi açılıyor?

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

Tabii ki Soori, ama MT4 web sitesine gitmeyi tercih ediyorsun

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


bu MT5

Teşekkürler, oraya gideceğim.
 
Im_hungry :

Kim ne max söylemez. geçerli bin dosya boyutu

hangi okuma için bir danışman açabilir ve daha sonra 3 milyon onda 25 metre. değerler

açmak istemiyor ama 500.000 değerle mi açılıyor?

Geliştiricilere. Belgelerde dosya boyutu sınırlarıyla ilgili hiçbir şey yoktur.
 
Im_hungry :


Kim ne max söylemez. geçerli bin dosya boyutu

hangi okuma için bir danışman açabilir ve daha sonra 3 milyon onda 25 metre. değerler

açmak istemiyor ama 500.000 değerle açılıyor?

Muhtemelen dosyayı bir diziye mi okuyorsunuz? - büyük olasılıkla yeterli RAM yok.
 
Astar


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

Hemen hemen aynı değerleri döndürür (fark sadece bir çubuktur), nasıldır?

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

Teoride, bir fonksiyon mevcut grafikte kaç tane çubuk görüntüleneceğini (örneğin, 5000) ve diğeri sadece ekrana sığan sayıyı (benim durumumda 380'den biraz fazla) döndürmelidir.

466 oluşturun, Windows 7 x64 işletim sistemi

 
olyakish :
Astar


Hemen hemen aynı değerleri döndürür (fark sadece bir çubuktur), nasıldır?

Teoride, bir fonksiyon mevcut grafikte kaç tane çubuk görüntüleneceğini (örneğin, 5000) ve diğeri sadece ekrana sığan sayıyı (benim durumumda, 380'den biraz fazla) döndürmelidir.

466 oluşturun, Windows 7 x64 işletim sistemi

Her şey doğru. Görünür çubuk sayısı:
 ChartGetInteger ( 0 , CHART_VISIBLE_BARS )

her zaman ilk (sol) görünen çubuğun sayısından 1 fazla:

 ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR)

Sonuçta, son çubukta (sağda) 0 sayısı vardır.

Tabii ki grafik "kaydırılmamış" değilse. Grafik "kaydırılırsa", <görünür ilk çubuğun sayısı>=<görünür çubukların sayısı>+<çubuklardaki grafik ofseti>-1.

Ve ne yazıyorsun:

...geçerli grafikte görüntülenecek çubuk sayısı (örneğin, 5000)...

bu biraz farklı:

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

Boyutunda bir dosya açmamasına ve 2010 ve 2009 2008 için açmak istememesine gelince,

Hindinin oluşturduğu dosyayı bu kodla açmaya çalışıyorum ama açılamıyor diyor

 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'den itibaren herhangi bir zaman diliminde, 01, 01'in geri kalanının açılması, no,

Ne halt?

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

bu biraz farklı:


Korkarım sığmayacak.

 TerminalInfoInteger ( TERMINAL_MAXBARS ); 

Çünkü örneğin ayarlarda 50.000 bar ayarlanmış ve gerçekte 11.375 bar yüklenmiş ve amaç bunu kaldırmak.


yöntem

 PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,);


Ve burada hangi numara kullanılacak.

Tehdit onInit'te var

   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,);

Ve tarihte hiç temizlenmeyen çöpler...