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

 
Vitaly Muzichenko :

Başlangıçta böyle olsun.

Ardından, çubuğun çalıştığına dair doğru bir tespit yapmanız gerekir, ancak burada TK'ye olan tüm yaklaşımı hesaplamanız gerekir.

Şimdiye kadar, yazınızdan gördüğüm kadarıyla, bunu yapmanız gerekiyor:

Sonuç olarak, yayılma normdan daha büyükse, o zaman OnTick'e geri dönüyoruz ve yeni bir kene üzerinde yayılmayı kontrol ediyoruz, eğer normal ise, bir sipariş gönderiyoruz ve bu çubukta bir anlaşma olduğunu hatırlıyoruz. .

Ayrıca ikinci bir yol var:

Genel olarak, mantığa ne zaman kaydedilmesi gerektiğine karar vermeniz ve "Yeni Çubuk" oluşumundan önce artık kontrol etmemeniz gerekir.


Seni anlıyorum, teşekkürler!

 

Beyler tavsiye verirmisiniz İkinci hafta için gösterge verilerini bir dosyaya yazmaya çalışıyorum, böylece daha sonra okuyabilir ve verilere dayalı bir gösterge oluşturabilirim. Gösterge eğiticidir, belirli bir çubuğun her bir tıkındaki hacmi hesaplarım. Kene pozitifse, hacmini "+" ye, negatif ise - "-" ye eklerim. Alınan birikmiş hacimleri ekleyip delta alıyorum ve bu deltayı tahakkuk bazında dikkate alıyorum. Bu şekilde bir eğri elde edersiniz. Ancak, bu eğri yalnızca gerçek zamanlı olarak oluşturulur. Tarihe dayalı değildir. Bunu yapmak için bir dosyaya veri yazmaya karar verdim. Bu aşamada takıldı. Kederle, kodun derleyici hataları üretmediğinden emin oldum. Ancak ortaya çıkan ürün çalışmıyor. Gösterge daha önce - çalıştı. Dosya yazma kodunu ekledikten sonra gösterge çalışmayı durdurdu. Program, anlaşılmaz bir giriş içeren bir dosya oluşturur ve bunun üzerine ölür. Bütün gün oturuyorum, hiçbir şey anlamıyorum. Biri yardım edebilir mi?

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property version    "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1    "Вверх"
#property indicator_type1    DRAW_LINE
#property indicator_color1   Salmon
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2

#property indicator_label2    "Вниз"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrDarkTurquoise
#property indicator_style2    STYLE_SOLID
#property indicator_width2    2

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[ 0 ]);
       //--- запишем время и значения в файл 
       for ( int i= 0 ;i<Buf_1[ 0 ];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 :

Beyler tavsiye verirmisiniz İkinci hafta için gösterge verilerini bir dosyaya yazmaya çalışıyorum, böylece daha sonra okuyabilir ve verilere dayalı bir gösterge oluşturabilirim. Gösterge eğiticidir, belirli bir çubuğun her tıkındaki hacmi hesaplarım. Kene pozitifse, hacmini "+" ye, negatif ise - "-" ye eklerim. Alınan birikmiş hacimleri ekleyip delta alıyorum ve bu deltayı tahakkuk bazında dikkate alıyorum. Bu şekilde bir eğri elde edersiniz. Ancak, bu eğri yalnızca gerçek zamanlı olarak oluşturulur. Tarihe dayalı değildir. Bunu yapmak için bir dosyaya veri yazmaya karar verdim. Bu aşamada takıldı. Kederle, kodun derleyici hataları üretmediğinden emin oldum. Ancak ortaya çıkan ürün çalışmıyor. Gösterge daha önce - çalıştı. Dosya yazma kodunu ekledikten sonra gösterge çalışmayı durdurdu. Program, anlaşılmaz bir giriş içeren bir dosya oluşturur ve bunun üzerine ölür. Bütün gün oturuyorum, hiçbir şey anlamıyorum. Biri yardım edebilir mi?


Yazmadan önce işaretçiyi dosyanın sonuna taşımak güzel olurdu.

FileSeek - Файловые операции - Справочник MQL4
FileSeek - Файловые операции - Справочник MQL4
  • docs.mql4.com
Если выставить позицию за "правую границу" файла (больше, чем размер файла), то последующая запись в файл будет будет произведена не с конца файла, а с выставленной позиции. При этом между предыдущим концом файла и выставленной позицией будут записаны неопределенные значения...
 
Alexey Viktorov :

Yazmadan önce işaretçiyi dosyanın sonuna taşımak güzel olurdu.


Bu neden gerekli? Linki okudum ama bir şey anlamadım.

 
YarTrade :

Bu neden gerekli? Linki okudum ama bir şey anlamadım.

Tamam da niye? Dosyayı açıyorsunuz, işaretçi dosyanın başında, dosyanın başında ve bilgi yazılıyor. Doğru yere yazmak için işaretçi doğru yere taşınmalıdır.

 
YarTrade :

Beyler tavsiye verirmisiniz İkinci hafta için gösterge verilerini bir dosyaya yazmaya çalışıyorum...

Okudun mu?
 
Alexey Kozitsyn :
Okudun mu?

Hala MQL4 öğreniyorum. Okuma.

Bir öğretmenle örnekler kullanarak MQL4'ü ücretsiz/ücretli öğrenmenizi sağlayan bir çevrimiçi eğitim hizmeti var mı? MQL4 eğitimini neredeyse okuyorum ama hiç programlayamıyorum. Daha önce, hiç programlama yapmadım. Bu başlıkta bir şeyler öğrenmeye çalışıyorum ama bir haftadır ilerleme kaydedemedim. Tavsiye verebilirmisin?

 
YarTrade :

Hala MQL4 öğreniyorum. Okuma.

Bir öğretmenle örnekler kullanarak MQL4'ü ücretsiz/ücretli öğrenmenizi sağlayan bir çevrimiçi eğitim hizmeti var mı? MQL4 eğitimini neredeyse okuyorum ama hiç programlayamıyorum. Daha önce, hiç programlama yapmadım. Bu başlıkta bir şeyler öğrenmeye çalışıyorum ama bir haftadır ilerleme kaydedemedim. Tavsiye verebilirmisin?

1. mql4'teki dosyalarla çalışmak mql5'tekiyle aynıdır.

2. Sergei Kovalev'e tüm saygımla, o sırada sorularımı da yanıtladı, ancak bence Kirill'den alınan ders daha anlaşılır. Yandex'e yazın ve dersine hemen 2 bağlantı yazın


 

Merhaba! Sitedeki ders kitabı benim için yeterliydi, birkaç yıl boyunca tuzaklara karşı yenerek kendim için göstergeler yazmayı öğrendim. Ama sorular devam ediyor. Şimdi göstergelerin neden yanlış gittiğini anlamıyorum. M1'de yaklaşık 12 saat sonra bazıları yanlış çizmeye başlar, ancak doğru kornaya basar. Bazıları yanlış işlemeyi çizer ve kornaya basar. M5'te beş kat daha uzun süre dayanırlar. Lütfen bana söyle.

 
Alexey Viktorov :

1. mql4'teki dosyalarla çalışmak mql5'tekiyle aynıdır.

2. Sergei Kovalev'e tüm saygımla, o sırada sorularımı da yanıtladı, ancak bence Kirill'den alınan ders daha anlaşılır. Yandex'e yazın ve dersine hemen 2 bağlantı yazın



Daha önce programlama yapmadıysanız "Cyril'den" derslerden bir şeyler öğrenmek gerçekten mümkün mü? Ve ne kadar süreceğini düşünüyorsun?