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

 
Valeriy Yastremskiy # :
Windows aracılığıyla. Grafiklerin ayarlanması büyük küçük yazı tipini de ayarlamalıdır.

Ya iki monitör varsa? Çeşitli...

 
Artyom Trishkin # :

Ya iki monitör varsa? Çeşitli...

Ardından, görüntünün görüntülendiği ekran çözünürlüğünü anlamanız gerekir. Nesne 2 monitöre geçebilir) ancak bu daha zor bir iştir.
Evet, negatif TextSetFont() değerleri aracılığıyla standart sistem yazı tiplerine bağlanmak iyi bir çözümdür.
 

Göstergeyi optimize etmeye yardımcı olun. Hindi çalışıyor ama yavaş çalışıyor, danışmanın optimizasyonu çok uzun sürüyor. Bana neyin yanlış olduğunu söyle? İş nasıl hızlandırılır?

 //+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, MetaQuotes Software Corp."
#property link        " http://www.metaquotes.net/ "

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red

#property indicator_maximum 1
#property indicator_minimum 0

#property indicator_width1 2

//---- input parameters
extern int   MomPeriod    = 10 ;
extern int   WindowOfNorm = 45 ; // ширина окна нормирования в барах
extern int   MA_Length    = 10 ; // Average Period
extern int   MA_Mode      =   0 ; // Mode of Moving Average

//---- buffers
double NormBuffer[],MomBuffer[],AvgVolumes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexStyle( 2 , DRAW_NONE );
   SetIndexBuffer ( 2 ,NormBuffer);

   SetIndexStyle( 1 , DRAW_NONE );
   SetIndexBuffer ( 1 ,MomBuffer);
   
    SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,AvgVolumes);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   for ( int i = 1 ;i <= 130 ; i++)
     {
      MomBuffer[i]= iMA ( NULL , 0 ,MomPeriod, 0 , 0 , 0 ,i)* 100 / iMA ( NULL , 0 ,MomPeriod, 0 , 0 , 0 ,i+MomPeriod);

       // нормирование
      NormBuffer[i]=Norm(WindowOfNorm,i);
       //-----
      AvgVolumes[i] = iMAOnArray(NormBuffer, 0 ,MA_Length, 0 ,MA_Mode,i);
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+

// нормирование
double Norm( int norm, int i) {
   // экстремумы
   double max=MomBuffer[ ArrayMaximum (MomBuffer,norm,i)];
   double min=MomBuffer[ ArrayMinimum (MomBuffer,norm,i)];
   // вычисление осциллятора
   double delta=max-min; // размах
   if (delta== 0 ) return ( 1 );
   else return ((MomBuffer[i]-min)/delta);
  }

Dosyalar:
 
IrishDance # :

Göstergeyi optimize etmeye yardımcı olun. Hindi çalışıyor ama yavaş çalışıyor, danışmanın optimizasyonu çok uzun sürüyor. Bana neyin yanlış olduğunu söyle? İş nasıl hızlandırılır?

Bu şekilde yapılmaz. Sadece bu satıra dikkat et

 //|                      Copyright © 2004 , MetaQuotes Software Corp. |

Bu 18 yıl boyunca, programlama dili öyle değişiklikler geçirdi ki, hiç çalışmaması gerekiyor. MQ'nun neden int init() ve int start() işlevlerini henüz devre dışı bırakmadığını anlamıyorum.

 

Ne var ki test cihazında 2 VLine parametresi varken 2022 .03.24 18:24:27.615 hatası veriyor. TestGenerator: eşleşmeyen veri hatası (2022.03.18 14:30'da 263 ses sınırı aşıldı)

İlk time1 parametresini kaldırırsanız, her şey yolunda demektir.

 bool FlagOpOr= false ;
bool FlagClOr= false ;
bool Work= true ;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping

   
//---
   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[])
  {

//---
     static bool FlagNDay= true , FlagVLRed= false ,FlagVLBlue= false ;
   static datetime Data = 0 , NData= 0 ;
  Data = Day();
 if (NData!=Data){FlagVLRed= true ; FlagVLBlue= true ;NData=Data;} 
if (FlagVLRed== true && Hour()== 0 ){ VLine( 1 , clrRed ); FlagVLRed= false ;}
if (FlagVLBlue== true &&  Hour()== 1 ){ VLine( 1 , clrBlue ); FlagVLBlue= false ;  }
      
    
  
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnDeinit ( const int reason) //int deinit(void)void
  {
   int i;
   int obj_total= ObjectsTotal ();
   for (i=obj_total- 1 ;i>= 0 ;i--)
     {
 string      sn= ObjectName (i);
       string Head= StringSubstr (sn, 0 , 4 ); // Извлекаем первые 4 сим
       if (Head == "VLin" )
        {
           ObjectDelete (sn);       

       }
     }
   
     Comment ( "" );
   return ;
  }
 
   //+------------------------------------------------------------------+
   bool VLine( int time1= 0 , color clr = clrRed ){
   string   var1=TimeToStr( TimeCurrent (), TIME_DATE | TIME_SECONDS );
     string NameLine= "VLine_" +   "_" +var1;
             bool    created= ObjectCreate ( 0 ,NameLine, OBJ_VLINE , 0 , TimeCurrent (), 0 );
             if (created) // если создался - сделаем ему тюнинг
              {              
               //--- точка привязки сверху, чтобы не наезжать на бар
               ObjectSetInteger ( 0 ,NameLine, OBJPROP_STYLE , STYLE_SOLID );
               //--- последний штрих - покрасим
               ObjectSetInteger ( 0 ,NameLine, OBJPROP_COLOR ,clr);
               //--- установим толщину линии 
               ObjectSetInteger ( 0 ,NameLine, OBJPROP_WIDTH , 2 ); 
                
              }
               else return ( false );time1= 0 ;
               return ( true );
              }
 

Herkese iyi günler. Ticaret sırasında 20-40 çizelge açıktır. Ve tüm araçların altında veya üst menünün “pencere” öğesinde ihtiyacınız olanı kazmak için çok zaman harcamanız gerekiyor. Ve bir şekilde bir komut dosyası ile hızlandırabilirsiniz - Komut dosyasını giriş parametrelerine attım, gerekli araca elimle girdim ve sanki gözlerle bulunmuş gibi açıldı ve fare ile üzerine tıkladım. Böyle bir şey nasıl uygulanır?

 
DanilaMactep # :

Herkese iyi günler. Ticaret sırasında 20-40 çizelge açıktır. Ve tüm araçların altında veya üst menünün “pencere” öğesinde ihtiyacınız olanı kazmak için çok zaman harcamanız gerekiyor. Ve bir şekilde bir komut dosyası ile hızlandırabilirsiniz - Komut dosyasını giriş parametrelerine attım, gerekli araca elimle girdim ve sanki gözlerle bulunmuş gibi açıldı ve fare ile üzerine tıkladım. Böyle bir şey nasıl uygulanır?

Mantıksal olarak, script kaç tane çizelge / pencerenin açık olduğunu ve hangi enstrümanlar için olduğunu bulmalı, onları hatırlamalı (semboller ve chart_id çizelgeleri), ardından enstrüman sayısına göre enstrümanın adının yazılı olduğu düğmelerle bir panel çizmelidir. . Düğmeye basıldığında, gerekli enstrümanın bulunduğu grafik, özelliğini genişletilmiş (daraltılabilir) olarak değiştirir ve hepsinden önemlisi, komut dosyası kapanır.

 
Valeriy Yastremskiy # :

Mantıksal olarak, script kaç tane çizelge / pencerenin açık olduğunu ve hangi enstrümanlar için olduğunu bulmalı, onları hatırlamalı (semboller ve chart_id çizelgeleri), ardından enstrüman sayısına göre enstrümanın adının yazılı olduğu düğmelerle bir panel çizmelidir. . Düğmeye basıldığında, gerekli enstrümanın bulunduğu grafik, özelliğini genişletilmiş (daraltılabilir) olarak değiştirir ve hepsinden önemlisi, komut dosyası kapanır.

Kötü mantık - hangi düğmelerin aranacağı arasındaki fark nedir - altta, pencere menüsünde veya komut dosyası tarafından çizilen düğmelerde? Giriş parametrelerine istediğiniz karakteri girebilmeniz için bir şeyler yapmanız gerekiyor ve komut dosyası sizin için bu pencereyi açıyor - bu şekilde daha kolay ve daha hızlı olacak. Böyle bir mucizesi olan var mı - lütfen paylaşın?
 

merhaba!

Bir danışman, bir şebeke işçisi arıyorum.

piyasa emirlerini açar - ızgara.

şebeke belirli bir (%) kâra ulaştığında siparişleri kapatır.

Böyle bir danışmanla tanıştım ama şimdi bulamıyorum.

Elinde olan var mı?

 
DanilaMactep # :
Kötü mantık - hangi düğmelerin aranacağı arasındaki fark nedir - altta, pencere menüsünde veya komut dosyası tarafından çizilen düğmelerde? Giriş parametrelerine istediğiniz karakteri girebilmeniz için bir şeyler yapmanız gerekiyor ve komut dosyası sizin için bu pencereyi açıyor - bu şekilde daha kolay ve daha hızlı olacak. Böyle bir mucizesi olan var mı - lütfen paylaşın?
Yeni bir pencere açın (bir danışman olmadan ve varsayılan bir şablonla açılır) veya zaten açık olan bir pencereyi yükseltin veya genişletin.
Ekli koda bakın, çizelgelerin bir listesi ve duruma göre çizelge üzerinde çizim var. O yardımcı olabilir.