MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1168

 

İki boyutlu bir diziye yazmak için bir döngüde L1, L2, L3 ... Ln adlı değişkenleri sıralamanın mümkün olup olmadığını söyleyin.

Üç değişkenli bir örnek (aslında daha fazla değişken var, hantal çıkıyor):

 //+------------------------------------------------------------------+
//|                                                            1.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475;" ;
extern string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465;" ;
extern string L3 = "0.94947;0.93222;0.91472;0.90077;0.89075;0.88658;0.86814;0.84687;0.82795;0.81132;0.79022;0.75976;" ;

//Надо: Вместо rsLevels[] задать двухмерный массив

string rsLevels[]; 

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{

//Надо: Перебрать в цикле переменные L1, L2, L3 и записать в двухмерный массив 

 L1 = StringTrimLeft ( StringTrimRight (L1));
 
 if ( StringSubstr (L1, StringLen (L1)- 1 , 1 ) != ";" )
  L1 = StringConcatenate (L1, ";" );

 int s = 0 ,i = StringFind (L1, ";" , s);
 string current;
 
 while (i> 0 )
 
 {
 
  current= StringSubstr (L1, s, i - s);
  
   ArrayResize (rsLevels, ArraySize (rsLevels) + 1 );
  
  rsLevels[ ArraySize (rsLevels) - 1 ] = current;
  
  s = i + 1 ;
  
  i = StringFind (L1, ";" ,s);
  
 }
 
//---------------------------------------------------------

 for ( int x= 0 ; x< ArraySize (rsLevels); x++)
  
 {

   Print (rsLevels[x]); 
   
 }
 
 return ( INIT_SUCCEEDED );
}
 
kopeyka2 :

Cevap için teşekkürler. Tam kod. Dizinin statik boyutu artırıldı. Operatörlerdeki sıfır kontrol girişini kaldırdım... Ortak bir "boşluk". NEDEN ekleme SAYILMIYOR anlamak istiyorum. Şimdi kodumda ne eksik? İpuçları için teşekkürler. Henüz mql5'te statik dizilerle çalışmadım .....

KOD GÜNCELLENDİ. Aynı soru...

İşte kodunuzu derlerken oluşan hatalar


 
stepystr :

İki boyutlu bir diziye yazmak için bir döngüde L1, L2, L3 ... Ln adlı değişkenleri sıralamanın mümkün olup olmadığını söyleyin.

Üç değişkenli bir örnek (aslında daha fazla değişken var, hantal çıkıyor):

Tabii ki konu "çarpık" (MQL4 ve MQL5 için), bu nedenle sorunun başında sorunun hangi platforma yönlendirildiğini belirtmek kötü olmaz )))

 
stepystr :

İki boyutlu bir diziye yazmak için bir döngüde L1, L2, L3 ... Ln adlı değişkenleri sıralamanın mümkün olup olmadığını söyleyin.

Üç değişkenli bir örnek (aslında daha fazla değişken var, hantal çıkıyor):

Öncelikle gelecek dizinin ikinci boyutundaki değerlerin sayısına karar vermeniz gerekiyor. Elemanların sayısının aynı olmadığı zaten açıktır. Muhtemelen maksimumu almanız gerekiyor ve fazla olan yerlerde örneğin sıfır veya -1 ile doldurun. Evet ve ilk ölçüm bilinip bilinmediğini önceden belirlemeye engel değil. Ve sonra iç içe döngüde, L1'i alın ve ihtiyacınız olan her şeyi diziye yazın, ardından dış döngünün ikinci yinelemesi L2'deki her şeyi bir sonraki dizine yazar ve bu böyle devam eder.


Ve oldukça doğru, onu yapıya sokmak daha iyidir.

 struct name
   {
     double L1[];
     double L2[];
     double Ln[];
   }arr[];
O zaman hem birinci boyutta hem de ikinci boyutta boyutu değiştirmek mümkün olacaktır. Yani, tek boyutlu bir dizi içinde tek boyutlu bir dizi olacaktır.
 
Alexandr Sokolov :

İşte kodunuzu derlerken oluşan hatalar


Bu kodu kısalttım ve Tf - sadece fark etmedim. Soru temeldir, neden statik bir dizideki öğeler hesaplama için işlenmez?

Burada kontrol ettim, hatasız derleme))) Hesaplamaların sonucu aynı - SIFIR !!! diziler aç[], kapat[] vb. - çok önemli değil ....

 //+------------------------------------------------------------------+
//|                                                          123.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, "
//---- номер версии индикатора
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots    0
//----
input int        nBars = 20 ;
input double     CorrectorHL = 1.0 ;           //Корректор HL фильтрации размера свечи
input double     CorrectorOC = 1.0 ;           //Корректор OC фильтрации размера свечи
input color      ColorLines = clrLime ;         //Цвет линий
input bool       Tf = false ;
//----
int     limit= 0 ,br= 0 ,to_copy= 0 ;
double corrHL,corrOC;
double averpips,averpipsHL,coeff;
double filterOC,filterHL,candle,candleHL;
double opn,hgh,lw,cls;
double Open[ 65 ],High[ 65 ],Low[ 65 ],Close[ 65 ];
double level_1,level_2,level_3;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ObjectsDeleteAll ( 0 , "UP Period " );
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[] ,
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   if (CorrectorHL<= 0 )
      corrHL= 1 ;
   else
      corrHL=CorrectorHL;
   if (CorrectorOC<= 0 )
      corrOC= 1 ;
   else
      corrOC=CorrectorOC;
//----
   if (nBars< 0 )
      to_copy= 6 ;
   else
      to_copy=nBars;
       //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if ( CopyOpen ( NULL , PERIOD_H4 , 0 ,to_copy,Open)<to_copy)
       return ( 0 );
   if ( CopyHigh ( NULL , PERIOD_H4 , 0 ,to_copy,High)<to_copy)
       return ( 0 );
   if ( CopyLow ( NULL , PERIOD_H4 , 0 ,to_copy,Low)<to_copy)
       return ( 0 );
   if ( CopyClose ( NULL , PERIOD_H4 , 0 ,to_copy,Close)<to_copy)
       return ( 0 );
     int indexmass= ArraySize (Open);
//----
   if (Tf== true )
     {
       if (prev_calculated== 0 )
         for ( int j= 0 ; j<=to_copy; j++)
           {
             opn=Open[j];
            hgh=High[j];
            lw=Low[j];
            cls=Close[j];
             if (opn>cls)
               candle+=opn-cls;
             if (cls>opn)
               candle+=cls-opn;
            candleHL+=hgh-lw;
            br+= 1 ;
           } //for j
       if (br> 0 )
        {
         averpips=candle/br;
         averpips= NormalizeDouble (averpips, _Digits );
         averpipsHL=candleHL/br;
         averpipsHL= NormalizeDouble (averpipsHL, _Digits );
         filterOC=averpips;
         filterHL=averpipsHL;
        }
     
     }
   Comment ( "indexmass  " ,indexmass, "  Open " ,Open[ 10 ], "  candle  " ,candle, "  averpips " ,averpips);
//--- return value of prev_calculated for next call
   return (rates_total);
  }
Önemli değil
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
kopeyka2 :

Bu kodu kısalttım ve Tf - sadece fark etmedim. Soru temeldir, neden statik bir dizideki öğeler hesaplama için işlenmez?

Burada kontrol ettim, hatasız derleme))) Hesaplamaların sonucu aynı - SIFIR !!! diziler aç[], kapat[] vb. - çok önemli değil ....

Derlerken, programcının mantıksal hataları kontrol edilmez - bu, derleyici henüz zihin okuyamadığı için programcının vicdanında kalır.

 
Сергей Таболин :

Tabii ki konu "çarpık" (MQL4 ve MQL5 için), bu nedenle sorunun başında sorunun hangi platforma yönlendirildiğini belirtmek kötü olmaz )))

MQL4.

 
Artyom Trishkin :

Derlerken, programcının mantıksal hataları kontrol edilmez - bu, derleyici henüz zihin okuyamadığı için programcının vicdanında kalır.

Temelde nedenini arıyorum nerede? ZATEN var olan kodun kaydında veya kodda statik bir diziyi işlemek için başka bir şey YOKMUYOR?

Neyi bilmediğimi bilmiyorum ... Bu nedenle, deneyimi olan bir dış gözlemciden bilmediğim yerleri işaretlemesini rica ediyorum)))
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
kopeyka2 :

Temelde nedenini arıyorum nerede? ZATEN var olan kodun kaydında veya kodda statik bir diziyi işlemek için başka bir şey YOKMUYOR?

Neyi bilmediğimi bilmiyorum ... Bu nedenle, deneyimi olan bir dış gözlemciden bilmediğim yerleri işaretlemesini rica ediyorum)))

hesaplamalara ulaşmıyor


işte başlatma

 input bool       Tf = false ;


ve işte test koşulu

 if (Tf== true )
 
SQLite veritabanı ile işlemler test cihazından alınabilir mi? Veri eklemek ve değiştirmekten bahsediyorum.