Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 442

 

Herkese iyi akşamlar,

1.

strateji - çubuk göründü, zararı durdur ve kârı al (sl, tp), başka bir şey olmayan bekleyen bir emir verdi.

Diyelim ki mevcut barda bir süre sonra emrin çalışması için fiyat görünecek, daha sonra fiyat sl ve ardından fiyat tp gelecek.

Lütfen açıklığa kavuşturun - açılış fiyatlarını test ederken: diyelim ki yeni bir barın açılış fiyatı = sl ve tp sınırlarından uzak bir yerde. Hesaplama nasıl yapılır?

Mantıksal olarak, hiçbir şekilde, çünkü testçi için sadece bir sonraki bar açılış fiyatı var mı? Ancak, bekleyen bir emir başlatma koşulunda belirtilen fiyatla eşleşmiyor, bu da emre dokunulmaması gerektiği anlamına geliyor.

Ancak: test cihazında çalışırken, bir şekilde anlaşmalar yapılır, durmalar tetiklenir. Ne şekilde?

2.

test cihazı her başlatmada fxt oluşturur. ve bu zaman. Bundan kaçınmayı ima eden herhangi bir ayar bulamadım ... teoride: Bir kez oluştururdum ve hiçbir şeyi değiştirmezsem bu dosyayı kullanın, ancak hayır, terminal bunun üzerine yazar

 
Söyleyin lütfen, EA'nın init()'i işlemek için bir onay işaretine ihtiyacı var mı?
 
-Aleks- :
Söyleyin lütfen, EA'nın init()'i işlemek için bir onay işaretine ihtiyacı var mı?

Numara. Gerekli değil. İşte onu görmenize yardımcı olacak kod:

 //+------------------------------------------------------------------+
//|                                                  test_expert.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright    "Copyright 2015, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version      "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 
   Print ( __FUNCTION__ );
   return ( INIT_FAILED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   Print ( __FUNCTION__ );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   Print ( __FUNCTION__ );
  }
//+------------------------------------------------------------------+
Grafiğe ekleyin ve hafta sonları hangi işlevlerin çalıştığını görün.
 
-Aleks- :
Söyleyin lütfen, EA'nın init()'i işlemek için bir onay işaretine ihtiyacı var mı?
Öyle görünüyor.
 
Karputov Vladimir :

Numara. Gerekli değil. İşte onu görmenize yardımcı olacak kod:

Grafiğe ekleyin ve hafta sonları hangi işlevlerin çalıştığını görün.
Tapochun :
Öyle görünüyor.
Hemen yanıt verdiğiniz için teşekkür ederiz. O zaman neden işe yaramadığını anlamıyorum - baskıya gerek yok ..
 
-Aleks- :
Hemen yanıt verdiğiniz için teşekkür ederiz. O zaman neden işe yaramadığını anlamıyorum - baskıya gerek yok ..
Baskınız nerede? Çoğaltmak için bir kod alabilir miyim?
 
Karputov Vladimir :
Baskınız nerede? Çoğaltmak için bir kod alabilir miyim?

Başlatma işleminin terminal yüklendiğinde gerçekleşmediği, ancak zaman çerçevesi değiştiğinde gerçekleştiği ortaya çıktı.

İlk başlatma sırasında on Uzman Danışman tarafından bir dosyayı okurken herhangi bir sorun olup olmayacağını kontrol etmem gerekiyor...

bir sınıf kullanıyorum.

 int init()
  {
//Автоматическая настройка
   if (Use_SetupLoad== true )
     {
      CSVReader FileLoads(FileLoadSetup);
      FileLoads.SetDelimiter( ';' );
      FileLoads.SetCommon( true );
       int StrokaSetup= 0 ;
       if (FileLoads.Load( 1 ))
        {
         PrintFormat ( "File %s loaded. Total rows=%d, Total columns=%d" ,FileLoads.FileName(),FileLoads.TotalRows(),FileLoads.TotalColumns());
         
         for ( int i= 1 ;i< 30 ; i++)
         //for (int i=1; i<100 || StrokaSetup!=0; i++)
         {
           if (Magic==FileLoads.GetIntValue(i, 13 ))
           {
            StrokaSetup=i ;
             Print ( "StrokaSetup=" ,StrokaSetup);
             break ;
            }
         //   if (i==100) i=1;
         //  Print (FileLoads.GetIntValue(i,13));
         }
         /*
         for (int i=1; i<30; i++)
         {
         Print (FileLoads.GetIntValue(i,13));         
         }
         */
         if (StrokaSetup!= 0 )
           {
            pipsXH=FileLoads.GetIntValue(StrokaSetup, 4 )/ 10 ;
             if (pipsXH> 0 )
            {
            pMAH=FileLoads.GetIntValue(StrokaSetup, 3 );
   //         typeMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         priceMAH=FileLoads.GetIntValue(StrokaSetup,2);
            
   //          if (pipsXH<0)
   //          PrintFormat("pMAH=%d",pMAH,"typeMAH=%d",typeMAH,"priceMAH=%d",priceMAH,"pipsXH=%d",pipsXH);
            }
             else pipsXH=(- 1 );
            
            pipsXL=FileLoads.GetIntValue(StrokaSetup, 7 )/ 10 *(- 1 );
             if (pipsXL> 0 )
            {
            pMAL=FileLoads.GetIntValue(StrokaSetup, 6 );
     //       typeMAL=FileLoads.GetIntValue(StrokaSetup,3);
     //       priceMAL=FileLoads.GetIntValue(StrokaSetup,2);
            
       //      PrintFormat("pMAL=%d",pMAL,"typeMAL=%d",typeMAL,"priceMAL=%d",priceMAL,"pipsXL=%d",pipsXL);
            }
             else pipsXL=(- 1 );
                        
            pMAT=FileLoads.GetIntValue(StrokaSetup, 9 );
       //      typeMAT=FileLoads.GetIntValue(StrokaSetup,3);
       //      priceMAT=FileLoads.GetIntValue(StrokaSetup,2);
       //      PrintFormat("pMAT=%d",pMAT,"typeMAT=%d",typeMAT,"priceMAT=%d",priceMAT);
            
            lot=FileLoads.GetDoubleValue(StrokaSetup, 11 );
       //    PrintFormat("pMAH=%d",pMAH,"pipsXH=%d",pipsXH,"pMAL=%d",pMAL,"pipsXL=%d",pipsXL,"lot=%d",lot);            
             Print ( "Magic=" ,Magic, " pMAH=" ,pMAH, " pipsXH=" ,pipsXH, " pMAL=" ,pMAL, " pipsXL=" ,pipsXL, " lot=" ,lot);            
            
           }

        }
       else PrintFormat ( "Error in loading data from %s" ,FileLoads.FileName());
     }
///Конец автоматической настройки///  
   return ( INIT_SUCCEEDED );
  } 

dosyayı okumaktan sorumlu sınıfın bir parçası

 //+------------------------------------------------------------------+
//| Load                                                             |
//+------------------------------------------------------------------+
bool CSVReader::Load( int start_line)
  {
   int filehandle= FileOpen (m_filename, FILE_CSV | FILE_READ | FILE_ANSI | FILE_SHARE_READ , '\n' );
   if (filehandle== INVALID_HANDLE )
     {
       Alert ( "Error in open of file " ,m_filename, ", error" , GetLastError ());
       return ( false );
     }
//---
   int line_index= 0 ;
   while (! FileIsEnding (filehandle))
     {
       string str= FileReadString (filehandle);
       //--- skip 0th row
       if (line_index>=start_line)
         if (str!= "" )
           {
             if (line_index== 1 ) AddData(str, true );
             else AddData(str, false );
           }
      line_index++;
     }
//---
   FileClose (filehandle);
   return ( true );
  } 
 
-Aleks- :

Başlatma işleminin terminal yüklendiğinde gerçekleşmediği, ancak zaman çerçevesi değiştiğinde gerçekleştiği ortaya çıktı.

İlk başlatma sırasında on Uzman Danışman tarafından bir dosyayı okurken herhangi bir sorun olup olmayacağını kontrol etmem gerekiyor...

bir sınıf kullanıyorum.

dosyayı okumaktan sorumlu sınıfın bir parçası

Bu nedenle, yazdırmadan önce kodunuzda birçok kontrol ve koşul vardır. Hata ayıklama modunda yürüyün ve tam olarak neyin çalışmadığını kontrol edin.
 
Karputov Vladimir :
Bu nedenle, yazdırmadan önce kodunuzda birçok kontrol ve koşul vardır. Hata ayıklama modunda yürüyün ve tam olarak neyin çalışmadığını kontrol edin.
Test cihazında her şey çalışıyor - ancak terminali yüklerken baskı yok - bu beni şaşırttı.
 
-Aleks- :
Test cihazında her şey çalışıyor - ancak terminali yüklerken baskı yok - bu beni şaşırttı.
Bu nedenle, daha fazla baskı eklemeye ve algoritmanın nereye hareket ettiğini izlemeye değer.