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

 
Vitaly Muzichenko :

İşte orijinal sadece karanlıkta düzeltildi.

PS Dot.mq4 - tam orijinal

Bu kadar uzun sürdüğü için özür dilerim - işle meşguldüm.

Tutmak:

 //+------------------------------------------------------------------+
//|                                                      VMTest1.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        "https://mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_plots    3
//--- plot ARR
#property indicator_label1    "MaOSC"
#property indicator_type1    DRAW_COLOR_ARROW
#property indicator_color1    clrLimeGreen , clrOrangeRed , clrSilver
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- plot ArrUP
#property indicator_label2    "Up"
#property indicator_type2    DRAW_ARROW
#property indicator_color2    clrBlue
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
//--- plot ArrDN
#property indicator_label3    "Down"
#property indicator_type3    DRAW_ARROW
#property indicator_color3    clrCrimson
#property indicator_style3    STYLE_SOLID
#property indicator_width3    1
//---
#include <MovingAverages.mqh>

//--- input parameters
input uint      InpA= 40 ;
//--- indicator buffers
double          BufferMAOSC[];
double          BufferColorsARR[];
double          BufferArrUP[];
double          BufferArrDN[];
double          BufferMAV[];
double          BufferMAA[];
double          BufferTMP[];
//--- gv
int a= 0 ;
int per= 0 ;
int val= 0 ;
int handle_mav= INVALID_HANDLE ;
int handle_maa= INVALID_HANDLE ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufferMAOSC, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,BufferColorsARR, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 2 ,BufferArrUP, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,BufferArrDN, INDICATOR_DATA );
   SetIndexBuffer ( 4 ,BufferMAV, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 5 ,BufferMAA, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 6 ,BufferTMP, INDICATOR_CALCULATIONS );
   
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 159 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 225 );
   PlotIndexSetInteger ( 2 , PLOT_ARROW , 226 );
//---
   ArraySetAsSeries (BufferMAOSC, true );
   ArraySetAsSeries (BufferColorsARR, true );
   ArraySetAsSeries (BufferArrUP, true );
   ArraySetAsSeries (BufferArrDN, true );
   ArraySetAsSeries (BufferMAV, true );
   ArraySetAsSeries (BufferMAA, true );
   ArraySetAsSeries (BufferTMP, true );
//---
   a=(InpA< 4 ? 4 : InpA);
   per=( int ) floor ( sqrt (a));
   val=( int ) floor (a/ 1.9 );
//---
   handle_mav= iMA ( NULL , PERIOD_CURRENT ,val, 0 , MODE_SMA , PRICE_LOW );
   if (handle_mav== INVALID_HANDLE )
     {
       Print ( "Не удалось создать хэндл индикатора MA(" ,val, "), ошибка " , GetLastError ());
       return INIT_FAILED ;
     }
   handle_maa= iMA ( NULL , PERIOD_CURRENT ,a, 0 , MODE_SMA , PRICE_LOW );
   if (handle_maa== INVALID_HANDLE )
     {
       Print ( "Не удалось создать хэндл индикатора MA(" ,a, "), ошибка " , GetLastError ());
       return INIT_FAILED ;
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int limit=rates_total-prev_calculated;
   if (limit> 1 )
     {
      limit=rates_total- 2 ;
       ArrayInitialize (BufferMAOSC, EMPTY_VALUE );
       ArrayInitialize (BufferColorsARR, 2 );
       ArrayInitialize (BufferArrUP, EMPTY_VALUE );
       ArrayInitialize (BufferArrDN, EMPTY_VALUE );
       ArrayInitialize (BufferMAV, 0 );
       ArrayInitialize (BufferMAA, 0 );
       ArrayInitialize (BufferTMP, 0 );
     }
//--- Подготовка данных
   int count=(limit> 1 ? rates_total : 1 ),copied= 0 ;
   copied= CopyBuffer (handle_mav, 0 , 0 ,count,BufferMAV);
   if (copied!=count) return 0 ;
   copied= CopyBuffer (handle_maa, 0 , 0 ,count,BufferMAA);
   if (copied!=count) return 0 ;

//--- Предварительный расчёт
   for ( int i=limit;i> WRONG_VALUE ;i--)
      BufferTMP[i]= 2.0 *BufferMAV[i]-BufferMAA[i];
      
//--- Расчёт индикатора
   if (SimpleMAOnBuffer(rates_total,prev_calculated,a,per,BufferTMP,BufferMAOSC)== 0 )
       return 0 ;
   for ( int i=limit;i> WRONG_VALUE ;i--)
     {
      BufferArrUP[i]= EMPTY_VALUE ;
      BufferArrDN[i]= EMPTY_VALUE ;
      BufferColorsARR[i]=(BufferMAOSC[i]>BufferMAOSC[i+ 1 ] ? 0 : BufferMAOSC[i]<BufferMAOSC[i+ 1 ] ? 1 : 2 );
       if ((BufferColorsARR[i]== 0 && BufferColorsARR[i+ 1 ]== 1 ) || (BufferColorsARR[i]== 0 && BufferColorsARR[i+ 1 ]== 2 ))
         BufferArrUP[i]=BufferMAOSC[i];
       if ((BufferColorsARR[i]== 1 && BufferColorsARR[i+ 1 ]== 0 ) || (BufferColorsARR[i]== 1 && BufferColorsARR[i+ 1 ]== 2 ))
         BufferArrDN[i]=BufferMAOSC[i];
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy :

Bu fikri anladım, faydalı ama bu durumda bana uymuyor. Göstergede tespit etmem gerekiyor   Test cihazı: durdurma düğmesine basıldı

düğmeye bastıktan sonra dergiye baskıların yazılması gerçeği değil

bu nedenle, ortamla çalışmanın tüm işlevlerini her yeni çubuğa dosyaya yazmaya çalışın - ticaretin yasaklanması, test edilmesi, programın sonlandırılması ..... https://docs.mql4.com/ru/check

yardımcı olmazsa, imkansız, o zaman WinAPI kullanarak bir şeyler aramak kalır

Not: bir düğme yapın ve basın - tıklayın, tüm eylemleri gerçekleştirin ve ardından görselleştiricinin boşta çalışmayı bitirmesine izin verin, IMHO aramadan daha hızlı

 
Igor Makanu :

düğmeye bastıktan sonra dergiye baskıların yazılması gerçeği değil

bu nedenle, ortamla çalışmanın tüm işlevlerini her yeni çubuğa dosyaya yazmaya çalışın - ticaretin yasaklanması, test edilmesi, programın sonlandırılması .....

yardımcı olmazsa, imkansız, o zaman WinAPI kullanarak bir şeyler aramak kalır

Not: bir düğme yapın ve basın - tıklayın, tüm eylemleri gerçekleştirin ve ardından görselleştiricinin boşta çalışmayı bitirmesine izin verin, IMHO aramadan daha hızlı

Dergide düğme baskısını durdur   Test cihazı: durdurma düğmesine basıldı

Ama belgelerde bulamadım. Bir Uzman Danışman için, bir gösterge için OnDeinit aramalarını durdurun, yalnızca dergide bir baskı. Test, göstergede durur ve bu kadar. Aslında bir duraklama var. Ama burada dergide basılmıyor.

Tehdit

göstergeyi çıkarmak veya pencereyi elle kapatmak hiç de zor değil. Ama soru sadece ilginç. Bir üçüncü taraf sembolüne yapılan bir istekle gerçek zamana erişim gibi) Dur düğmesiyle testin tamamlanmasının bir şekilde izlenmesi gerekiyor gibi görünüyor.)

 
Valeriy Yastremskiy :

Dergide düğme baskısını durdur   Test cihazı: durdurma düğmesine basıldı

Ama belgelerde bulamadım. Bir Uzman Danışman için, bir gösterge için OnDeinit aramalarını durdurun, yalnızca dergide bir baskı. Göstergede test durur ve bu kadar. Aslında bir duraklama var. Ama burada dergide basılmıyor.

Tehdit

göstergeyi çıkarmak veya pencereyi elle kapatmak hiç de zor değil. Ama soru sadece ilginç. Bu, üçüncü taraf sembolüne yapılan bir istekle gerçek zamana erişim gibi) Dur düğmesiyle testin tamamlanmasının bir şekilde izlenmesi gerektiği görülüyor.)

bilmiyorum

forum araması IsTesting() - benzer tartışmalar bulundu

Not: bence, terminal çıktıları günlüğe yazdırıyor, ancak bunu yapmak için MQL koduna ihtiyacınız var

ZYZY: EA, IMHO yazın, göstergenin görselleştirilmesi sıkıcıdır)))

 
Artyom Trishkin :

Bu kadar uzun sürdüğüm için özür dilerim - işle meşguldüm.

Tutmak:

Değişiklikler dramatik, ama mesele bu değil.

iMAOnArray ile ilgileneceğim, amaç buydu

Teşekkür ederim!

 
Vitaly Muzichenko :

Değişiklikler dramatik, ama mesele bu değil.

iMAOnArray ile ilgileneceğim, amaç buydu

Teşekkür ederim!

Evet, burada her şey tam olarak orada olduğu gibidir. Sadece orada - ilk dörtte, bunun için bir tef ile dans etmeniz gerekiyor, ancak MQL5'te çok basit.

 

Merhaba. Neden, ObjectCreate() içinde açıklanmayan bir sabiti silerken;

Örneğin z_order veya gizli? Derlemeden sonra bir hata var mı? Hattın yapımına katılmazlar.

 bool VLineCreate( const long             chart_ID= 0 ,         // ID графика 
                 const string           name= "VLine" ,       // имя линии 
                 const int              sub_window= 0 ,       // номер подокна 
                 datetime               time= 0 ,             // время линии 
                 const color            clr= clrRed ,         // цвет линии 
                 const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии 
                 const int              width= 1 ,           // толщина линии 
                 const bool             back= false ,         // на заднем плане 
                 const bool             selection= true ,     // выделить для перемещений 
                 const bool             ray= true ,           // продолжение линии вниз 
                 const bool             hidden= true ,       // скрыт в списке объектов 
                 const long             z_order= 0 )         // приоритет на нажатие мышью 
  { 
//--- если время линии не задано, то проводим ее через последний бар 
   if (!time) 
      time= TimeCurrent (); 
//--- сбросим значение ошибки 
   ResetLastError (); 
//--- создадим вертикальную линию 
   if (! ObjectCreate (chart_ID,name, OBJ_VLINE ,sub_window,time, 0 )) 
     { 
       Print ( __FUNCTION__ , 
             ": не удалось создать вертикальную линию! Код ошибки = " , GetLastError ()); 
       return ( false ); 
     } 
 
Дмитрий :

Merhaba. Neden, ObjectCreate() içinde açıklanmayan bir sabiti silerken;

Örneğin z_order veya gizli? Derlemeden sonra bir hata var mı? Hattın yapımına katılmazlar.

Bir fonksiyonun giriş parametrelerinden birini silerken virgül ve kapanış parantezlerine dikkat edin.

 
Alexey Viktorov :

Bir fonksiyonun giriş parametrelerinden birini silerken virgül ve kapanış parantezlerine dikkat edin.

Alexey'e teşekkürler. İlk dikkatimi çeken noktalama işaretleri oldu. Komut dosyası, ObjectCreate () ( bağlantı noktası , sembol, vb.) için gerekli olan en aza indirildi. Ve sadece başlıkta koddaki bu sabitlerin hiçbir yerde bulunmadığı ortaya çıktı), bu yüzden en az bir hatanın silinmesinin neden ortaya çıktığı sorusu ortaya çıktı. Ve soru ortaya çıkıyor, belki de kullanıcı başlığında bir sabitler listesi içeren zorunlu koşullar vardır. Fonksiyonlar)))?
 
Dzmitry Zaitsau :
Alexey'e teşekkürler. İlk dikkatimi çeken noktalama işaretleri oldu. Komut dosyası, ObjectCreate () ( bağlantı noktası , sembol, vb.) için gerekli olan en aza indirildi. Ve sadece başlıkta koddaki bu sabitlerin hiçbir yerde bulunmadığı ortaya çıktı), bu yüzden en az bir hatanın silinmesinin neden ortaya çıktığı sorusu ortaya çıktı. Ve soru ortaya çıkıyor, belki de kullanıcı başlığında bir sabitler listesi içeren zorunlu koşullar vardır. Fonksiyonlar)))?

hangi hatanın çıktığını yazarsın hemen anlaşılır, yoksa telepati çıkar - tahmin et benim hatam ne)