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

 
Artyom Trishkin:

这里最好的建议是多阅读帮助

它规定了可以为图检索/设置的属性

特别是--用鼠标左键滚动图表

这是我看过的文档中的地方。

当CHART_EVENT_MOUSE_MOVE = 1时,图表会收到鼠标移动的信息,但当CHART_EVENT_MOUSE_MOVE = 0时,它不会收到。这是可以理解的。
但这与我的问题没有关系......不管CHART_EVENT_MOUSE_MOVE设置的是什么值,我总是有可能在关闭AUTOSCROLL的情况下 "移动 "图表。
只需按下鼠标左键,在不松开按钮的情况下将鼠标向右移动,就可以将窗口中的图形 "移 "到过去(就时间而言)。
这将使窗口中的图形始终保持移动。
然而,如果我按下Ctrl+F(调用Crosshair)--然后当我按下鼠标左键,按住它并移动图形时,我将看到光束
工具提示将显示鼠标移动的数据和鼠标指针所在级别的价格。
而最重要的是--那一刻的图形本身不会在窗口中移动。

这就是如何在不启用Crosshair的情况下实现这种效果,这就是我所问的......

P.S. 我可以拍一段屏幕的视频,让你看看它的样子。

 
Maksims Ignatovs:

我在文件中看到过这个地方。

当CHART_EVENT_MOUSE_MOVE = 1时,图表会得到关于鼠标移动的信息,但如果CHART_EVENT_MOUSE_MOVE = 0,则不会。这是可以理解的。
但这与我的问题没有关系......不管CHART_EVENT_MOUSE_MOVE设置的是什么值,我总是有可能在关闭AUTOSCROLL的情况下 "移动 "图表。
只需按下鼠标左键,在不松开按钮的情况下将鼠标向右移动,就可以将窗口中的图形 "移 "到过去(就时间而言)。
这将使窗口中的图形始终保持移动。
然而,如果我按下Ctrl+F(调用Crosshair)--然后当我按下鼠标左键,按住它并移动图形时,我将看到光束
工具提示将显示鼠标移动的数据和鼠标指针所在级别的价格。
而最重要的是--那一刻的图形本身不会在窗口中移动。

那就是如何在不开启十字准星的情况下实现这种效果,这就是我所问的...

P.S. 我可以拍一段屏幕视频,让你看看它是什么样子。

我不是已经回答了吗?
如果你用鼠标移动图表上的东西,你就禁止在这一点上移动图表。只要你松开鼠标按钮,你就可以让图形移动

 

是否可以使用索引来访问结构的字段,即作为一个一维数组?是否可以创建一个结构字段的数组?

因此,这个想法是这样的。有一个结构

struct MyStruct {int qw;double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{int qw[5];double qe[5];}; MyStruct1 qr1;

那么,当把任何结构传递给一个函数时,我们必须对每个元素分别进行命名。

qr.qw qr.q51e,等等。当然,你不可能把它放到一个循环中,用一个线程来处理它。我想创建一个字段数组来存储这些项目,如下所示

Massiv[2];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

因此,我们可以通过索引来解决这些项目,当然,第二个结构可以放入一个循环,通过循环处理qw qe。

是否可以这样做,我前段时间在网上看到过这样的条目,但也许我误解了什么,因为我已经失去了这个网站?也许typedef enum union宏可以提供帮助?

 
Artyom Trishkin:
我不是已经回答了吗?
如果你用鼠标在图形上移动什么东西,你就会在那一刻禁用图形移 位。只要你松开鼠标按钮,你就可以让图形移动。

我不在图表上移动任何东西。如果我设置CHART_EVENT_MOUSE_MOVE = 0,则无济于事--图表仍然可以被移动。
,我不知道如何为图表禁用ChartNavigate处理。我在文档中也没有找到。
同时,"十字准线 "以某种方式应对了这种情况。这就是为什么我问--如何?
你回答我--只要为CHART_EVENT_MOUSE_MOVE 设置正确的值。 我试过了--它没有帮助。
CHART_EVENT_MOUSE_MOVE的任何数值下,你仍然可以用鼠标在时间上来回移动图形,只需在图形上按住鼠标左键并移动鼠标
同时,根据水平移动鼠标的方向,图表会在窗口中移动 如果我向右移动鼠标,图表会向左移动(向过去的历史),
,如果我向左移动鼠标,图表会向未来移动,直到出现当前条形图。 此后,试图用鼠标将其向左移动将不起作用。但这是可以理解的。
如果我
使用ChartNavigate将窗口中的图表移动到过去的某个日期,我应该怎样做才能确保在任何情况下(不在图表上进行点击和鼠标移动的操作),我看到的图表部分不会被移动?我必须要做什么?


 
Maksims Ignatovs:

我不在图表上移动任何东西。如果我设置 CHART_EVENT_MOUSE_MOVE = 0,则无济于事--图表仍然可以被移动。
,我不知道 如何为图表禁用ChartNavigate处理。我在文档中也没有找到。


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
下午好,请修复该指标,你需要通过按钮显示服务器时间,前提是按钮在其原始位置应显示
这是我没有得到的东西。
#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

string s1="";

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

   PutButton("B",50,50,"KNOPKA");
   
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";

   ObjectCreate("WeekDay1",OBJ_LABEL,0,0,0);          
   ObjectSet("WeekDay1",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);
   ObjectSet("WeekDay1",OBJPROP_YDISTANCE,2);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_HIDDEN,true);
   ObjectSet("WeekDay1",OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_COLOR,Black);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_SELECTED,false);
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);
   
   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[])
 {
 
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";
 
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);

  return(rates_total);
 }/*******************************************************************/

/********************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_CLICK)
   {
   
         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);    // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
 

vebster005:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

到底是什么原因造成的? 也就是说,用你自己的话说,你想做什么...。

制作了一个按钮,当你按下它时,它就会跑出屏幕(如果它不宽)。

为什么你对结果不满意?

 
Maxim Kuznetsov:

到底是什么原因造成的? 也就是说,用你自己的话说,你想做什么...。

按钮是做出来的,当你按下它时,它就会跑出屏幕(如果它不宽)。

这个结果有什么问题呢?

结果是,当你点击按钮时,时间被隐藏了,然后又重新出现,因为它被更新了,因为在计算器中的事实是

 
Maxim Kuznetsov:

你到底没能做什么? 即用你自己的话说,你想做什么......

制作了一个按钮,当你按下它时,它就会跑出屏幕(如果它不宽)。

为什么你对结果不满意?

你能不能让它对秒和其他一切都起作用,就像在终端,你可以禁用这个按钮
因为当我禁用这个按钮时(从屏幕上移开),时间又出现了。

 
vebster005:

你能不能得到这样的结果,秒和其他一切工作,像在终端,你可以禁用按钮
因为当我禁用这个按钮时(从屏幕上移开),时间又出现了。

这里有很多人几乎可以达到任何结果。

重要的是,你自己要努力实现这些目标,而不是乞求别人为你做这些。他们总是愿意提供帮助,但是是为了帮助,而不是为了替你做这件事。

原因: