Hatalar, hatalar, sorular - sayfa 810

 

Geliştiricilere bir önerim var - tüm yerleşik türler için varsayılan değerler yapın. C++ bu anlamda bir rol model değildir.

Ne de olsa, yukarıdan soruların yokluğunda kendinizi ve cevap verenleri kurtarmak gerçekten çok zaman ve sinir.

 
Fia :


   while((a/b)<1 && !IsStopped())//---------

Ne tür aksaklıklar var ya da bir şeyi yanlış mı anlıyorum ???
eşittir nedir?
 
sergeev :
eşittir nedir?

Varsayılan (yukarıdaki örnekte) a=2.652664430987377e-314 şeklindedir, ancak while döngüsü a+b=30 ile biter.

Elbette, hemen double a=1;

Ama benim durumum değişmiyor.

Çıktı her zaman a+b=30'dur

Ve return 0 değerini döndürür, hepsini hata ayıklayıcıda görebilirsiniz.

 
Fia :

Ne tür aksaklıklar var ya da bir şeyi yanlış mı anlıyorum ???

Değişken başlatma :

Tanımlandığında herhangi bir değişken başlatılabilir. Bir değişken açıkça başlatılmamışsa, bu değişkende depolanan değer herhangi bir şey olabilir . Örtük bir başlatma yoktur.

 

Fia :

Çıktı her zaman a+b=30'dur

Ve return 0 değerini döndürür, hepsini hata ayıklayıcıda görebilirsiniz.

inanması zor.
 
sergeev :
inanması zor.

Almayı ve kontrol etmeyi ne engeller?

Bu amaç için özel olarak ortaya çıkan kod iddiasız.

İki derlememde 687 (farklı brokerlerde) bunu her ikisinde de derlemeye çalıştım, sonuç aynı (ama bazen 30'u doğru verdiğim ortaya çıktı), aptal mıyım yoksa kayaklar mı anlamıyorum gitme!?

Bak, artık ne düşüneceğimi bilmiyorum.

 

Henüz çoğaltılamıyor. Ve en baştan başlayalım.

Ne bitliği, işletim sistemi?

 
alexvd :

Henüz çoğaltılamıyor.

Ne bitliği, işletim sistemi?

Win7 64bit

Bilmiyorum bile, şimdi indirdim yüklü MT5'i derlenmiş, her şey aynı.

chtol videosunu kaldırabilirim (aksi takdirde şaka yaptığımı düşünürler).

PS Şimdi dürttüm, 30 kez pes ettiğinde tekrar çalıştı, derlendi ve zaten birkaç kez daha sıfır veriyor (tasavvuf)

 

Tünaydın.

MQL5'i anlamaya çalışıyorum.   exp_tema.mq5 ayrıştırıldı ve kodu yeniden düzenledi. Şimdi her mumun MA günlüğüne yazdırılmalıdır (son 20 ). Ancak günlüğün neden bazı girişleri eksik olduğunu anlamıyorum. fark edildi ,   günlükte ma[3] yoksa, o zaman ma[13] olmayacaktır. Bu neden oluyor? Hata nerede?

 input string             Symb0 = "EURUSD" ;
input    bool             Trade0 = true ;
int MA_Shift0= 1 ;
input int MA_Per0 = 100 ;
//+-----------------------------------+
input string             Symb1 = "USDCHF" ;
input    bool             Trade1 = true ;
int MA_Shift1= 1 ;
input int MA_Per1 = 100 ;

bool MA ( int Number,
         string   Symbol_,           // имя символа
         bool     Trade,
         int      MA_Per,         // период для расчета средней линии
         int      MA_Shift           // смещение индикатора по горизонтали              
        )

  {
//---- проверка запрета на торговлю
   if (!Trade) return ( true );

//---- объявление переменной для хранения итогового размера массивов переменных
   static int Size_= 0 ;

//---- объявление массива для хранения хэндлов индикаторов как статической переменной
   static int Handle[];
   static int Recount[],MinBars[];
   double ma[ 20 ];
  
  
     if (Number+ 1 >Size_) // вход в блок инициализации только на первом старте
     {
      Size_=Number+ 1 ; // для этого номера вход в блок закрыт
         //---- изменение размеров массивов переменных
       ArrayResize (Handle,Size_);
       ArrayResize (Recount,Size_);
       ArrayResize (MinBars,Size_);

       //---- определение минимально количества баров, достаточного для расчета 
      MinBars[Number]= 3 *MA_Per;
      
             //---- предварительное обнуление ячеек массивов

      
       //---- используем массив как таймсерию
       ArraySetAsSeries (ma, true );

       //---- получение хендла индикатора
      
      Handle[Number]= iMA (Symbol_, 0 ,MA_Per,MA_Shift, MODE_SMA , PRICE_CLOSE );  
      
       Print ( "+++++++++Handle[Number]= " ,Handle[Number]);
     }


 //---- проверка количества баров на достаточность для расчета 
   if ( Bars (Symbol_, 0 )<MinBars[Number]) return ( true );
   //---- Получение торговых сигналов 
   if (IsNewBar(Number,Symbol_, 0 ) || Recount[Number]) // вход в блок на смене бара или при неудачном копировании данных
     {
      
       //---- используя хэндлы индикатора, копируем значения индикаторного буфера
       //---- в специально подготовленный для этого статический массив
       if ( CopyBuffer (Handle[Number], 0 , 0 , 20 ,ma)< 0 )
        {
         Recount[Number]= true ; // так как данные не получены, то следует вернуться 
                               // в этот блок получения торговых сигналов на следующем тике!
         return ( false );         // выходим из функции TradeSignalCounter() без получения торговых сигналов
        }
       //---- все операции копирования из индикаторного буфера завершены успешно
      Recount[Number]= false ; // можно не возвращаться в этот блок до очередной смены бара
      
      
 
 Print ( "+++++++++ma[0]= " ,ma[ 0 ]);     
 Print ( "+++++++++ma[1]= " ,ma[ 1 ]);
 Print ( "+++++++++ma[2]= " ,ma[ 2 ]);
 Print ( "+++++++++ma[3]= " ,ma[ 3 ]);
 Print ( "+++++++++ma[4]= " ,ma[ 4 ]);
 Print ( "+++++++++ma[5]= " ,ma[ 5 ]);
 Print ( "+++++++++ma[6]= " ,ma[ 6 ]);
 Print ( "+++++++++ma[7]= " ,ma[ 7 ]);
 Print ( "+++++++++ma[8]= " ,ma[ 8 ]);
 Print ( "+++++++++ma[9]= " ,ma[ 9 ]);
 Print ( "+++++++++ma[10]= " ,ma[ 10 ]);     
 Print ( "+++++++++ma[11]= " ,ma[ 11 ]);
 Print ( "+++++++++ma[12]= " ,ma[ 12 ]);
 Print ( "+++++++++ma[13]= " ,ma[ 13 ]);
 Print ( "+++++++++ma[14]= " ,ma[ 14 ]);
 Print ( "+++++++++ma[15]= " ,ma[ 15 ]);
 Print ( "+++++++++ma[16]= " ,ma[ 16 ]);
 Print ( "+++++++++ma[17]= " ,ma[ 17 ]);
 Print ( "+++++++++ma[18]= " ,ma[ 18 ]);
 Print ( "+++++++++ma[19]= " ,ma[ 19 ]);
      
     }
  
   return ( true );
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
MA( 0 ,Symb0,Trade0,MA_Per0,MA_Shift0);
MA( 1 ,Symb1,Trade1,MA_Per1,MA_Shift1);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| IsNewBar() function                                              |
//+------------------------------------------------------------------+
bool IsNewBar( int Number, string symbol, ENUM_TIMEFRAMES timeframe)
  {
//----
   static datetime Told[];
   datetime Tnew[ 1 ];
//---- объвление переменной для хранения размеров массивов переменных
   static int Size_= 0 ;

//---- изменение размеров массивов переменных
   if (Number+ 1 >Size_)
     {
       uint size=Number+ 1 ;
       //----
       if ( ArrayResize (Told,size)==- 1 )
        {
         string word= "" ;
         StringConcatenate (word, "IsNewBar( " ,Number,
                           " ): Ошибка!!! Не удалось изменить размеры массивов переменных!!!" );
         Print (word);
         //----          
         int error= GetLastError ();
         ResetLastError ();
         if (error> 4000 )
           {
             StringConcatenate (word, "IsNewBar( " ,Number, " ): Код ошибки " ,error);
             Print (word);
           }
         //----                                                                                                                                                                                                  
         Size_=- 2 ;
         return ( false );
        }
     }

   CopyTime (symbol,timeframe, 0 , 1 ,Tnew);
   if (Tnew[ 0 ]!=Told[Number])
     {
      Told[Number]=Tnew[ 0 ];
       return ( true );
     }
//----
   return ( false );
  }
 
Fia :

Win7 64bit

Bilmiyorum bile, şimdi indirdim yüklü MT5'i derlenmiş, her şey aynı.

chtol videosunu kaldırabilirim (aksi takdirde şaka yaptığımı düşünürler).

bir vizyoner olmanıza gerek yok.

Günlükte ara değişkenlerin neye eşit olduğunu görebilmemiz için kodda ayrıntılı bir Print yapın.