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

 
alex_xss:

1)我个人同意,如果由我来决定,我会简单地关闭它,并禁止它被包含在代码中。但你不能)

2) 谢谢,但我还没有找到任何解决方案(到处都是通过OBJ_VLINE对象 来解决,这不适合我),我正在挖掘自己的方法

你可以在一些人喜欢的Canvas上做一个网格。把画布作为图表的背景(或前面),在上面作画,并遵循几何/价格/时间关系。

这是一个痛苦的过程,但只要有一定的品味和时间,它就可以是美丽的。

 
Maxim Kuznetsov:

你可以在一些Canvas的最爱上制作一个网格。将画布布置成图表的背景(或前面),在上面画图,并遵循几何/价格/时间关系。

它是痛苦的,但如果有一些品味和时间,它可能是美丽的。

你能在kanvas上写一个简单的例子吗? 拜托了

我对它一无所知,我只需要一个像图表一样大小的矩形,并在上面画一条垂直线

 
alex_xss:

你能在kanvas上写一个简单的例子吗? 拜托了

我对它一无所知,我只需要一个像图表一样大小的矩形,并在上面画一条垂直线。

应该给@Nikolai Semko 打电话,他对Kanvas更在行。当他在路上时--看看他的资料,画布上有很多东西

 
alex_xss:

你能在kanvas上写一个简单的例子吗? 拜托了

我对它一无所知,我只需要一个像图表一样大小的矩形,并在上面画一条垂直线

有趣的是。这样的故障只在MT4中出现,而且只在垂直线 上出现。

唯一神秘的是它为什么会干扰。在我的生活中,我不会注意到它。

你能否更详细地制定问题,以了解解决这个问题的最佳方法。图形对象与画布的互动有细微差别。
顺便说一下,解决这个问题的可能方法之一是更换经理。))
如果他/她认为变色是一种拐杖,那么坎布就越是会成为他/她的拐杖。
虽然我承认你的经理是一个虚构的人物或一个寓言故事。))

 

alex_xss
:

你能在kanvas上写一个简单的例子吗? 拜托了

我对它一无所知,我只想得到一个像图表一样大小的长方形,并在上面画一条垂直线。


在性能方面不是最佳的(重新绘制的频率比它应该发生的要高--只是懒得让代码复杂化),但它可以工作。

你可以为屏幕的大小(而不是窗口的大小,例如1920x1080)实现一个画布,并且完全不重绘。它只需占用8兆字节的内存。
顺便说一下,改变网格的颜色不会有帮助。

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/en/code/23840

int OnInit()
  {
   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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_CHART_CHANGE) DrawGrid();
  }
//+------------------------------------------------------------------+
void DrawGrid() {
  Canvas.Erase(0);
  if (ChartGetInteger(0,CHART_SHOW_GRID)) {
      Canvas.SetBack(false);
      ChartSetInteger(0,CHART_FOREGROUND,0,true);
      uint clr = ColorToARGB((color)ChartGetInteger(0,CHART_COLOR_GRID),255);
      for (int y=0;y<W.Height;y++)
      if (y%6<2 || y%6>4) {
         for (int x=32;x<W.Width;x+=32)
         Canvas.m_pixels[y*W.Width+x]=clr;
      } 
  }
  Canvas.Update();
}
附加的文件:
 
有没有人有一个按字母顺序排列数组(字符串)的函数?
 
Aleksey Vyazmikin:
也许有人有一个按字母顺序排列数组(字符串)的函数?

我有一个这样的东西,曾经的军刀写道

//===============================================================================================
//--------------------------------- Сортирует строковой массив ---------------------------------+
//===============================================================================================
void ArraySortStr(string &Str[]) {
 string Min;
 int jMin, Size = ArraySize(Str);
  for(int i=0; i<Size-1;i++) {
   Min = Str[i];
   jMin = i;
    for(int j=i+1; j<Size; j++)
     if(Str[j] < Min) {
       Min = Str[j];
       jMin = j;
      }
     if(jMin > i) {
       Str[jMin] = Str[i];
       Str[i] = Min;
     }
   }
 }
 
Vitaly Muzichenko:

我有一个这样的东西,曾经是一把军刀写的

谢谢你。

 
Maxim Kuznetsov:

我们应该给垂直线 上。

这是一个谜,为什么它阻止我使用它。我永远不会注意到它。

你能否更详细地制定问题,以了解解决这个问题的最佳方法。图形对象与画布的互动有细微差别。
顺便说一下,解决这个问题的可能方法之一是更换经理。))
如果他/她认为变色是一种拐杖,那么坎瓦就越是会成为他/她的拐杖。
虽然我承认你的经理是一个虚构的人物或寓言。))

是的,一个很酷的噱头,我已经花了将近一个星期的时间)我的屁股着火了)

那么,为什么会成为一个障碍呢。有一个指标是用三角形来画的。这一切都变的很好,颜色也被挑出来了,现在你注意到了这样一个错误。
该指标不供个人使用,带着这个错误发布是无稽之谈。我必须改变整个绘图,这相当复杂,因为我是一个初学者,或者修复这个错误。

改变颜色网格并没有帮助,正如你所注意到的,我自己也是这样过来的)最初,一些颜色组合似乎有帮助

改变网格颜色(如果它有帮助的话)是一个不可接受的拐杖,因为用户可能对它有影响,万一他们想改变颜色。
为用户屏蔽这个功能的选项也不合适,我想这是很清楚的原因)))。

任务:如果网格被启用,要让用户看到屏幕上始终 有相同的颜色。考虑到MT4的垂直网格+填充对象的错误。我 不知道还有什么可以补充的)

基本上你上面写的varic是没有问题的。我可以擦亮它。你是一个金子般的人!!!。根本没有什么话可以表达我的感激之情。我给你五块钱作为你的帮助。

只有几个小问题:
我在弱小的PC上会得到多少滞后?我知道这是一个抽象的问题,但我很乐意听到你的意见。
"它只会吃掉8MB的内存"--我猜你说的不是内存?))如果是这样的话,8MB根本就不像
iCanvas是必须的,普通的就不行了?这只是另一个用户说 "这个文件在这里,这个文件在那里"。他们太笨了,不知道该把它放在哪里)。

 
日安

请指教 - 回答问题

在Metatrader中有一个Bulls.mq4指标
为什么需要一个额外的缓冲区,为什么不能直接使用一个中间变量
dd = iMA(NULL,0,InpBullsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
ExtBullsBuffer[i]=dd;

问题是ExtBullsBuffer[i]只是用来存储iMA函数结果的计算值,在下一行这个值被分配给指标缓冲 元素。ExtBullsBuffer在其他地方没有使用。为什么这里需要这个中间缓冲区ExtBullsBuffer,而不只是一个变量,因为它在图中用绿色标出
***