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

 
Artyom Trishkin :
Barlar[]
Mümkünse, lütfen kodu gösterin.
 
Vitaly Muzichenko :

Bars adlı derleyici, dünyanın neyi temsil ettiğini azarladı. Bu tasarımı test ettiniz mi, yoksa çalışması gerektiğini mi varsaydınız yoksa yanlış bir şey mi yapıyorum?

Evet, benim hatam. Ad çubukları. Genel olarak fikir, değişkenlere anlamlı isimler vermektir, o zaman varlığı her zaman haklı olmayan ek değişkenler oluşturmak gerekli olmayacaktır.
 
Vasiliy Sokolov :
Evet, benim hatam. Ad çubukları. Genel olarak fikir, değişkenlere anlamlı isimler vermektir, o zaman varlığı her zaman haklı olmayan ek değişkenler oluşturmak gerekli olmayacaktır.

Bir şeyi ifade etmek için değil, onlarla çalışırken kodu kısaltmak için aradım:

if (open1<close1 && close2>close3 && close1>close2 &&

Eh, ve aynı damarda, aksi takdirde - çizgilerin uzunluğu artar

Açıklama için herkese teşekkürler!

 
Vitaly Muzichenko :

Bir şeyi ifade etmek için değil, onlarla çalışırken kodu kısaltmak için aradım:

if (open1<close1 && close2>close3 && close1>close2 &&

Eh, aynı damarda, aksi takdirde - çizgilerin uzunluğu artar

Açıklama için herkese teşekkürler!

Kodu minimumda tutmak istiyorsanız, doğrudan veri dizisine bakın.

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar= 0 ; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   ArraySetAsSeries (bars, true );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if ( CopyRates ( Symbol (), PERIOD_CURRENT , start_bar, count_bar, bars)<count_bar) return ;
  
   if (bars[ 1 ].open<bars[ 1 ].close && bars[ 2 ].close>bars[ 3 ].close && bars[ 1 ].close>bars[ 2 ].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

Tünaydın!

Bir Expert Advisor'ı boşaltırken (silirken) verilen emirler ve açık pozisyonlar nerede ve nasıl silinir? Kolaysa, lütfen bir örnek paylaşın.

Teşekkür ederim.

 

Danışmanlardan birinin tuhaf bir saçmalığı var. Danışman normal olarak test edilir, "Tek testi başlat"a tıkladığınızda ilk kez yalnızca bir tanesi çalıştırılır. Ayrıca, tek bir teste tıkladığınızda veya Optimizasyon'da herhangi bir satıra tıkladığınızda, Günlük şunları gösterir:

2017.02.08 13:31:05.165 Test cihazı 4234087422336 geçmek için girdi alamıyor

2017.02.08 13:31:34.829 Test cihazı, 4076312468706 geçiş için girdi alamıyor

2017.02.08 13:31:47.973 Test cihazı geçiş için girdi alamıyor 1004506640527

Danışmanların geri kalanı normal davranıyor. Ne olabilirdi?

 

Beyler, 10000 * 10000 gibi büyük bir matris yazıyorum

       if (count== 0 )
        {
         //--- запишем файл
          ResetLastError ();
         int handle= FileOpen (path, FILE_READ | FILE_WRITE | FILE_BIN );
         //---
         if (handle!= INVALID_HANDLE )
           {
             for ( int z=ARRAY_SIZE_Y; z> 0 ; z--) // Перебор по барам, колонка Y
              {
               for ( int q= 0 ; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                 // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek (handle, 0 , SEEK_END );
               FileWriteArray (handle,arra);
              }
             FileClose (handle);
           }
         else
             Print ( "Failed to open the file, error " , GetLastError (), " handle " ,handle);
         //---
         count= 1 ;
        }

Sizce bu algoritma hız açısından verimli mi?

1000 * 1000'lik bir matrisle, hız birkaç saniye olduğundan, 10000 * 10000'e kadar bir artışla sistem ayağa kalkar

 
Top2n :

Beyler, 10000 * 10000 gibi büyük bir matris yazıyorum

       if (count== 0 )
        {
         //--- запишем файл
          ResetLastError ();
         int handle= FileOpen (path, FILE_READ | FILE_WRITE | FILE_BIN );
         //---
         if (handle!= INVALID_HANDLE )
           {
             for ( int z=ARRAY_SIZE_Y; z> 0 ; z--) // Перебор по барам, колонка Y
              {
               for ( int q= 0 ; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                 // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek (handle, 0 , SEEK_END );
               FileWriteArray (handle,arra);
              }
             FileClose (handle);
           }
         else
             Print ( "Failed to open the file, error " , GetLastError (), " handle " ,handle);
         //---
         count= 1 ;
        }

Sizce bu algoritma hız açısından verimli mi?

1000 * 1000'lik bir matrisle, hız birkaç saniye olduğundan, 10000 * 10000'e kadar bir artışla sistem ayağa kalkar

Dört boyutlu dizilerden daha fazlasına izin verilmezse böyle bir matrisi bu şekilde mi elde edebilirsiniz?
Herhangi bir şeyi karıştırıyor musun?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov :
Dört boyutlu dizilerden daha fazlasına izin verilmezse böyle bir matrisi bu şekilde mi elde edebilirsiniz?
Herhangi bir şeyi karıştırıyor musun?

10000 x 10000 iki boyutlu değil mi?

double arr[ 10000 ][ 10000 ];

vb...

 
Alexey Viktorov :
Dört boyutlu dizilerden daha fazlasına izin verilmezse, böyle bir matrisi bu şekilde elde edebilirsiniz?
Herhangi bir şeyi karıştırıyor musun?
Evet, iki boyutlu, bir şekilde bunu böyle söylemiyorum, görünüşe göre bir matris değil, bir dizi. Matris çok boyutluluğu ima ediyor mu?
Neden: