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

 

Herkese iyi internet ve sağlık.


Soru şu ki, neyi yanlış yapıyorum? Diziler (STATIC) doldurulur ve hesaplama 0 (sıfır) verir. Kodumda neyin eksik olduğunu söyle. Dizi öğeleri neden karşılaştırılıp eklenmiyor?... Teşekkürler


 double Open[60],High[60],Lo[60,Close[60]; int to_copy=60;
 if ( CopyOpen ( NULL , PERIOD_H4 , 1 ,to_copy,Open)<to_copy) return ( 0 );
   if ( CopyHigh ( NULL , PERIOD_H4 , 1 ,to_copy,High)<to_copy) return ( 0 );
   if ( CopyLow ( NULL , PERIOD_H4 , 1 ,to_copy,Low)<to_copy) return ( 0 );
   if ( CopyClose ( NULL , PERIOD_H4 , 1 ,to_copy,Close)<to_copy) return ( 0 );
//----   
   //int start=to_copy*PeriodSeconds(PERIOD_H4)/PeriodSeconds(_Period);
   int start=to_copy;
   
   if (Tf== true )
     {
       if (prev_calculated== 0 )
         for ( int j= 1 ; j<=start; j++)
           {
             if (Open[j]>Close[j])
               candle+=Open[j]-Close[j];
             if (Close[j]>Open[j])
               candle+=Close[j]-Open[j];
            candleHL+=High[j]-Low[j];
            br+= 1 ;
           } //for 
Comment(High[10],". ",candle);
 candle дает результат 0 ноль
 
kopeyka2 :

Herkese iyi internet ve sağlık.


Soru şu ki, neyi yanlış yapıyorum? Diziler (STATIC) doldurulur ve hesaplama 0 (sıfır) verir. Kodumda neyin eksik olduğunu söyle. Dizi öğeleri neden karşılaştırılıp eklenmiyor?... Teşekkürler


1) Döngüde bir dizi taşması var - arabellek boyutu 60 ise, ilk dizin 0 olduğundan son dizin 59 olacaktır.

2) Kod tamamlanmadı - örneğin, Tf nasıl tanımlanır ve mum nasıl başlatıldı?


* fiyatları kopyalarken indeksleme bir kaydırılır, çünkü ilk indeksten başlayarak 60 element kopyaladığınız için, yani ilk kapalı çubuğun fiyatları zaten indeks 0'da olacaktır.

 

İşlev nasıl çalışır?

 IsStopped ();

... ve hangi görev listesini gerçekleştirir?


Yardım diyor ki - "mql5 programının zorla kapatıldığını kontrol eder". Yani, ilerideki belirli sayıda kod satırına "bakıyor" ve herhangi bir şeyin doğruluğunu kontrol ediyor mu? Sorumluluk alanı nasıl belirlenir (örneğin, satır başına veya 10 satır)?


Sadece döngünün dizinin ötesine geçmesine izin vermediğini düşündüm, ancak Yüksek ve Düşük fiyatları kopyalamadan önce FAMA kodunda gördüm.

 
Alexandr Sokolov :

İşlev nasıl çalışır?

... ve hangi görev listesini gerçekleştirir?


Yardım diyor ki - "mql5 programının zorla kapatıldığını kontrol eder". Yani, ilerideki belirli sayıda kod satırına "bakıyor" ve herhangi bir şeyin doğruluğunu kontrol ediyor mu? Sorumluluk alanı nasıl belirlenir (örneğin, satır başına veya 10 satır)?


Sadece döngünün dizinin ötesine geçmesine izin vermediğini düşündüm, ancak Yüksek ve Düşük fiyatları kopyalamadan önce FAMA kodunda gördüm.

Hiçbir yere bakmıyor ... Orada her şey açıkça yazılmış. Bayrak kontrol ediliyor... Tekrar okuyun .

Документация по MQL5: Проверка состояния / IsStopped
Документация по MQL5: Проверка состояния / IsStopped
  • www.mql5.com
Возвращает true, если в системной переменной _StopFlag содержится значение, отличное от 0. Ненулевое значение записывается в переменную _StopFlag, если поступила команда завершить...
 
Alexandr Sokolov :

İşlev nasıl çalışır?

... ve hangi görev listesini gerçekleştirir?


Yardım, "mql5 programının zorunlu olarak kapatıldığını kontrol eder" diyor. Yani, ilerideki belirli sayıda kod satırına "bakıyor" ve herhangi bir şeyin doğruluğunu kontrol ediyor mu? Sorumluluk alanı nasıl belirlenir (örneğin, satır başına veya 10 satır)?


Sadece döngünün dizinin ötesine geçmesine izin vermediğini düşündüm, ancak Yüksek ve Düşük fiyatları kopyalamadan önce FAMA kodunda gördüm.

MQL programı durursa, hem önceden tanımlanmış değişken hem de IsStopped() işlevi kullanılarak kontrol edilebilen _StopFlag bayrağı ayarlanır - hiçbir fark yoktur, bu uygun, onu kullanın

_StopFlag bayrağını ayarladıktan sonra, MQL programına durması için kısa bir süre verilir, ardından terminal onu zorla boşaltacaktır

en yaygın kullanım döngülü komut dosyalarıdır, yazılmaz

 while ( true )
{
...
}

şöyle yazmak daha iyidir:

 while (! IsStopped ())
{
...
}

peki, aynı zamanda maliyetli hesaplamalarda veya döngülerdeki büyük hesaplarda da olur.

 for ( int i= 0 ; i< 1 e6 && ! IsStopped (); i++)
{

}
 

Herkese merhaba.

İ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.

 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;" ; 

...

extern string Ln      = " ... " ;    
 
Alexandr Sokolov :

1) Döngüde bir dizi taşması var - arabellek boyutu 60 ise, ilk dizin 0 olduğundan son dizin 59 olacaktır.

2) Kod tamamlanmadı - örneğin, Tf nasıl tanımlanır ve mum nasıl başlatıldı?


* fiyatları kopyalarken indeksleme bir kaydırılır, çünkü ilk indeksten başlayarak 60 element kopyaladığınız için, yani ilk kapalı çubuğun fiyatları zaten indeks 0'da olacaktır.

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...

 //+------------------------------------------------------------------+
//|                                                          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 ;
//----
int     limit= 0 ,br= 0 ,to_copy= nBars;
double corrHL,corrOC;
double averpips,averpipsH;
double candle,candleHL;
double opn,hgh,lw,cls;
double Open[ 65 ],High[ 65 ],Low[ 65 ],Close[ 65 ];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   
   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 ( 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= 1 ; 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 );
        }
      }
   Comment ( "indexmass  " ,indexmass, "  Open " ,Open[ 10 ], "  candle  " ,candle, "  averpipsHL " ,averpipsHL);
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+ 
Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpips ",averpips);
Dizi elemanı değerleri sıfırdan büyük. Hesaplamalarda sıfır
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
stepystr :

Herkese merhaba.

İ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.

silinen gönderi - dizileri bilirsiniz

ama yine de yapamam

bir seçenek olarak bir makro ikamesi yazın, belirli bir örnek yazın - belki biri sizin göreviniz için bir makro yazar, ben makro ikamelerini kötü yazarım

 

İnsanlar!!! Söylemek ... )))

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...

Dizi elemanı değerleri sıfırdan büyük. Hesaplamalarda sıfır
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
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...

SİZİN hakkında göstergelerim var, ama bu sadece gereksiz. zaten var)))

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