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

 
Taras Slobodyanik :

Sıfır görmüyorum, bir yerde hata yaptın


Her iki baskı da aynı değerleri mi veriyor?

Kodumda herhangi bir Yazdır işlevi olmadığı ve bu satırlar sırasıyla birbiri ardına gittiği için değerler değişmiyor.

Ancak Var 0 ve Kod verir - istenen değer

 
LuckySith :

Bu yüzden, atanan tüm değerlerden sonra ben de bir kerede çıkarım. Yani temelde kod şöyle:

a=b;

yazdır(a);

Yazdır(b);

Ama a sıfır çıktı ve b doğru çıktı

Bu, bir tamsayı değişkenine gerçek bir değer atanırken int a ve double b>0 ve b<1 ise mümkündür, kesirli kısım atılır

 
STARIJ :

Bu, bir tamsayı değişkenine gerçek bir değer atanırken int a ve double b>0 ve b<1 ise mümkündür, kesirli kısım atılır


b birden büyüktür

a - double türünde bir dizi

 

Sorunu çözdüm.

Dizim şu şekilde oluşturuldu:


çift çizgi[];

Bu seçenek ile line[0]=x atarken; gördüğünüz gibi sıfır elemanı hala boş kaldı.


yazdığımda


çift hat[20];


Her şey olması gerektiği gibi çalıştı. Nedenini anlamıyorum, çünkü ilk durumda sınırsız bir dizi oluşturdum, fark nedir?

 
LuckySith :

Sorunu çözdüm.

Dizim şu şekilde oluşturuldu:


çift çizgi[];

Bu seçenek ile line[0]=x atarken; gördüğünüz gibi sıfır elemanı hala boş kaldı.


yazdığımda


çift hat[20];


Her şey olması gerektiği gibi çalıştı. Nedenini anlamıyorum, çünkü ilk durumda sınırsız bir dizi oluşturdum, fark nedir?

Dinamik bir dizi oluşturdunuz ve bunun boyutunun bağımsız olarak ayarlanması ve kontrol edilmesi gerekiyor.

 
Artyom Trishkin :

Dinamik bir dizi oluşturdunuz ve bunun boyutunun bağımsız olarak ayarlanması ve kontrol edilmesi gerekiyor.

#property katı yönergesi bu hatayı bulmayı hızlandırır. Program şöyle bir mesajla biter: 'С.mq4' (31,32) içinde dizi aralık dışında
 

Kimse yardım etmeye istekli değil mi? Benim için çıkmaz sorun burada belirtilmiştir: dosyaya yazılmasını gerektirmeyen başka bir çözüm var mı?

Program kodu burada açıklanmıştır: https://www.mql5.com/ru/forum/160683/page378#comment_6053255

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2017.11.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
LRA :

Bir dosyadaki verilere dayalı gösterge - aramaya bu satıra girdi ve bulundu


Bir dosyadan veri almak için önce oradaki verileri doldurmanız gerekir.

 

Ah... iyi insanlar! Yardım et, lütfen! Programlama öğreniyorum. Yardımınız olmadan, çıkmaz tamamlandı.

Göstergeyi oluşturmak için daha sonra kullanmak için gösterge verilerini bir dosyaya yazmaya çalışıyorum. Gösterge, mevcut çubuk için pozitif tiklerin hacmi ile negatif tiklerin hacmi arasındaki farka ilişkin verilere dayalı olarak bir çizgi olarak çizilir.

Bir veri dizisinin bir dosyaya nasıl yükleneceği hakkında bilgi almak için MQL4 referansını kullandım. Sonuç olarak, hatalarla dolu bir kod aldım. Hataların özünü anlayamıyorum ve genel olarak referans kitaptaki ipucunu doğru kullandım ya da kullanmadım. Biri yardım edebilir mi?

 input string              InpFileName= "111.csv" ;       // Имя файла 
input string              InpDirectoryName= "Data" ;     // Имя каталога 

datetime Время= 0 ;   // Время прошлого бара
double Bid1;
double    Buf_1[];
// double ExtBuffer;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;   // отрицательные и положительные iVolume нарастающим итогом


void OnInit ()
{
   IndicatorDigits ( 0 );
   SetIndexBuffer ( 0 ,Buf_1);
   //SetIndexBuffer(1,Buf_2);
   Bid1= Bid ;
   V5 = 0 ;
    
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
//      Buf_1[0]=0;         // и обнулить последний элемент буфера
   }
   
   datetime date_Buf_1; // массив дат индикатора 
   datetime time_Buf_1; // массив времени 
// --- считаю объем для положительных и отрицательных тиков      
   if ( Bid >= Bid1) 
{
   if ( Bid > Bid1) // если тик положительный..
{   
   V1 = iVolume ( NULL , 0 , 0 ); // если повышающий цену тик, то находим его объем
   V2 = V1 + V2;
}
   else
{
   V1 = 0 ;                 // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
   V2 = V1 + V2;      
}               
}              
   else 
{
   V3 = iVolume ( NULL , 0 , 0 ); // если понижающий цену тик 
   V4 = V3 + V4;             // то находим его объем  
}
  
   V5 = V2-V4;               // определяем разницу (дельту) между объемами положительных и отрицательных тиков
   Bid1= Bid ;
   Buf_1 [ 0 ] = V5; // в буфер сгружаем  дельту

//   ExtBuffer = Buf_1 [0];
//   double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0); 

// запись в файл данных буфера

//--- установим для массивов признак таймсерии 
   ArraySetAsSeries (Buf_1, true ); 
   ArraySetAsSeries (date_Buf_1, true );
   
//--- скопируем таймсерию 
   int copied= CopyTime ( NULL , 0 , 0 , 0 ,date_Buf_1);    

//--- подготовим массив Buf_1 
   ArrayResize (Buf_1,copied); 
//--- скопируем значения линии индикатора  
   for ( int i= 0 ;i<copied;i++) 
     { 
      Buf_1[i]= V5; 
     } 
//--- откроем файл для записи значений индикатора 
   ResetLastError (); 
   int file_handle= FileOpen (InpDirectoryName+ "//" +InpFileName, FILE_READ | FILE_WRITE | FILE_CSV ); 
   if (file_handle!= INVALID_HANDLE ) 
     { 
       PrintFormat ( "Файл %s открыт для записи" ,InpFileName); 
       PrintFormat ( "Путь к файлу: %s\\Files\\" , TerminalInfoString ( TERMINAL_DATA_PATH )); 
       //--- сначала запишем значения индикатора 
       FileWrite (file_handle,Buf_1); 
       //--- запишем время и значения в файл 
       for ( int i= 0 ;i<Buf_1;i++) 
         FileWrite (file_handle,time_Buf_1[i],Buf_1[i]); 
       //--- закрываем файл 
       FileClose (file_handle); 
       PrintFormat ( "Данные записаны, файл %s закрыт" ,InpFileName); 
     } 
   else 
       PrintFormat ( "Не удалось открыть файл %s, Код ошибки = %d" ,InpFileName, GetLastError ()); 
  }
   
   return (rates_total);
}
 
YarTrade : Daha sonra göstergeyi oluşturmak için kullanabilmem için gösterge verilerini bir dosyaya yazmaya çalışıyorum. Gösterge, mevcut çubuk için pozitif tiklerin hacmi ile negatif tiklerin hacmi arasındaki farka ilişkin verilere dayalı olarak bir çizgi olarak çizilir.

Kodunuza bakan birinin bir hatayı çabucak bulabileceğini düşünüyorsanız - yanılıyorsunuz. Derleyici hataları arar. Programın metni biçimlendirilmelidir - MetaEditor bunun için bir şekillendiriciye sahiptir. Farklı bir stilden hoşlanıyorsanız - örneğin, AStyle.exe programını kullanın. Şekillendirmeden sonra, 1) programının ekstra bir kapatma ayracı olduğunu hemen göreceksiniz. 2) Değişken bildirildi: datetime date_Buf_1; // bir dizi gösterge tarihleri - onu bir dizi yapmak için, dinamik bir dizi için [size] veya []'ye ihtiyacınız var ve ardından göründüğü gibi ArrayResize boyutunu ayarlayın. Ve bu, diziyi kullanmadan önce yapılmalıdır - bununla ilgili yukarıdaki gönderilere bakın. 3) FileOpen(InpDirectoryName+"//"+InpFileName - çubukların diğer yöne eğilmesi gerekiyor gibi görünüyor. Ve InpDirectoryName+"//" olmadan yapmak daha iyi - dosyayı Dosyalar klasöründe bulacaksınız.

satır başına: int kopyalanmış=CopyTime(NULL,0,0,0,date_Buf_1); Derleyici kızgın, başlangıç=bitiş=0 sayı=0

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...