新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1935

 
Valeriy Yastremskiy #:
在Windows的帮助下。图形设置大的小的字体也应该调整。

如果有两个显示器怎么办?不同的人...

 
Artyom Trishkin #:

如果有两个显示器怎么办?不同的...

然后你需要了解显示图像的屏幕的分辨率。该对象也可以到2个显示器),但这是一个更复杂的任务。
是的,通过负的TextSetFont() 值绑定到系统的标准字体是一个好的 解决方案。
 

帮助优化指标。该指标可以工作,但很慢,用它来优化EA需要很长的时间。请告知有什么地方做错了?如何加快其工作速度?

//+------------------------------------------------------------------+
//|                                                     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);
  }

附加的文件:
 
IrishDance #:

帮助优化指标。该指标可以工作,但很慢,用它来优化EA需要很长的时间。请告知有什么地方做错 了?如何让它更快地工作?

不是这样做的。请注意这一行

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

18年来,编程语言已经发生了很大的变化,以至于它根本就不应该工作。我不明白为什么MQ还没有完全禁用int init()和int start()。

 

什么是错的,有2个参数的VLine在测试器中出现错误 2022.03.24 18:24:27.615 TestGenerator: unmatched data error (volume limit 263 at 2022.03.18 14:30 exceeded)

如果删除第一个参数time1,则一切正常。

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

大家下午好。在交易过程中,我有20-40个图表打开。我必须花很多时间在所有仪器的底部或顶部菜单项 "窗口 "中找到正确的仪器。如果我可以用脚本来加速,我把脚本放在输入参数中,输入必要的符号,它就会打开,就像用眼睛发现并点击一样。如何实现这样的事情?

 
DanilaMactep #:

大家下午好。在交易过程中,我有20-40个图表打开。我不得不花很多时间在所有仪器的底部或顶部菜单项 "窗口 "中找到正确的仪器。如果我可以用脚本来加速,我把脚本放在输入参数中,输入必要的符号,它就会打开,就像用眼睛发现并点击一样。如何才能做到这一点呢?

作为逻辑,脚本应该找出有多少个图表/窗口被打开,以及哪些工具被打开,记住它们(符号和chart_idies),然后,根据工具的数量,画一个面板,上面写有工具名称的按钮。在按下按钮时,带有所需工具的图表将其属性改为展开(可以折叠)和全部,并且脚本关闭。

 
Valeriy Yastremskiy #:

从逻辑上讲,脚本应该找出有多少个图表/窗口被打开,以及哪些工具被打开,记住它们(符号和chart_idies),然后,根据工具的数量,画一个面板,上面写有工具名称的按钮。在按下按钮时,带有所需工具的图表将其属性改为展开(可以折叠)和全部,并且脚本关闭。

糟糕的逻辑--这有什么区别--在哪个按钮上看--在底部、在菜单窗口还是在脚本绘制的按钮?必须以某种方式使你在输入参数中输入所需的符号,而脚本已经为你打开了这个窗口--这样会更容易和更快。有没有人有这样的奇迹,请分享一下?
 

你好!

我正在寻找一个EA,一个电网运营商。

在一个网格中打开市场订单。

当网格达到一定(%)的利润时,关闭订单。

我曾见过这样的专家顾问,但现在我找不到了。

我曾见过这样的专家顾问,现在我找不到了。

 
DanilaMactep #:
糟糕的逻辑--看哪个按钮有什么区别--在底部、在菜单窗口还是在脚本绘制的按钮?必须以某种方式做到这一点,即在输入参数中输入所需的符号,并且脚本已经为你打开了这个窗口--这样会更容易和更快。有没有人有这样的奇迹,请分享一下?
打开一个新的窗口(在没有EA和默认模板的情况下打开)或提高或扩大一个已经打开的窗口。
看看附件中的代码,有一个图表枚举和按条件在图表上绘图。也许会有帮助。
原因: