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

 
Roni Iron:

大家早上好!


问题:确定一个条形图的最高和最低时间的最简单方法是什么?

酒吧的开放/关闭时间 并不有趣。

在MT4上。

谢谢你!

这样做

我把它贴在QBhttps://www.mql5.com/ru/code/25897

 

请告诉我,在MT4中,有一个预定义的变量double Ask,据我所知,在void OnTick()中,没有强制的

RereshRates的值不会改变。

在MT5中,Ask被MqlTick last_tick取代;SymbolInfoTick(_Symbol,last_tick);double Ask=last_tick.ask 其值总是被新的tick更新。

我的问题是,我需要通过Ask + X的值来设置线的坐标,但我不能在MT5中这样做,因为线在值改变后会改变其坐标。

Ask=last_tick.ask。您有什么建议?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

请告诉我,在MT4中,有一个预定义的变量double Ask,据我所知,在void OnTick()中 没有强制的

RereshRates的值不会改变。

在MT5中,Ask被MqlTick last_tick取代;SymbolInfoTick(_Symbol,last_tick);double Ask=last_tick.ask 其值总是被新的tick更新。

我的问题是,我需要通过Ask + X的值来设置线的坐标,但我不能在MT5中这样做,因为线在值改变后会改变其坐标。

Ask=last_tick.ask。您有什么建议?

它怎么没有变化?它随着每一次打勾而变化。但在循环中,它并没有改变。也许你对它有点迷惑?

但是在mql5中,你可以在循环之前确定当前的价格,并且在退出循环之前它不会改变。

 
伙计们,对不起,我提出了一个愚蠢的问题。在mt4终端,它显示的利润包括佣金、掉期等。在mt5中,它显示为 "裸体"。我找不到,mt5是否有任何设置,将其显示为mt4?或者它不能这样做?
 

有什么方法可以测量OBJ_TEXT 中的文字的宽度(像素)吗?

 
Alexey Viktorov:

怎么没有变化呢?它随着每一次打勾而变化。但在循环中,是的,它没有。也许,你对这个问题有点迷惑?

但是在mql5中,你可以在循环之前确定当前的价格,并且在退出循环之前它不会改变。

是的,谢谢你,我的假设原来是错的,但问题略有不同。我有一个代码,对MT4和MT5 都一样。

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

问题是,在MT4中,创建的线将固定在创建时的价格上,但在MT5中,每次在新的tick上,线将在LastAsk的新值上绘制,其位置将随价格变化而变化。我如何在MT5中避免这种情况?

 
WinProject:

是的,谢谢,我的假设结果是错误的,但问题有点不同。有一个代码,对MT4和MT5 都一样。

问题是,在MT4中,创建的线将固定在创建时的价格上,但在MT5中,每次新的刻度线将在LastAsk的新值上绘制,其位置将随着价格的变化而变化。我如何在MT5中避免这种情况?

按名称检查线路的可用性。如果没有,就创造一个。这些是一般的基础知识
 
Artyom Trishkin:
按名称检查行。如果没有线,就创建一个。这就是一般的基本情况。

谢谢你,我还能读到什么关于这些编程逻辑的基础知识?这看起来很简单,但从头开始就很难搞清楚。

 if(ObjectFind(0,"hLine"))

我添加了一个条件,一切都成功了。

 
WinProject:

谢谢你,我还能读到什么关于这些编程逻辑的基础知识?这看起来很简单,但从头开始就很难搞清楚。

我添加了一个条件,一切都成功了。

突然间(像往常一样)ObjectGetInteger(0,objectName,OBJPROP_TYPE)工作得更快。

ObjectFind是一个同步命令,即它等待图表对象的完全更新(和可用性)。

如果你使用你自己的对象(即在你自己的股票中创建的),你不应该使用ObjectFind- 你已经知道对象是在哪个窗口中创建的,它很可能存在,而且是正确的类型。
最坏的情况是,用户删除了对象或改变了属性

 
WinProject:

是的,谢谢,我的假设结果是错误的,但问题有点不同。有代码,对MT4和MT5 都一样。

问题是,在MT4中,创建的线将固定在创建时的价格上,但在MT5中,每次新的刻度线将在LastAsk的新值上绘制,其位置将随着价格的变化而变化。我如何在MT5中避免这种情况?

我不记得了,我需要检查一下,但我不想检查。也许,在mql4中,当试图创建一个以已经存在的对象命名的对象时,只是返回一个错误,而在mql5中,如果坐标不同,则不是一个错误,而是参数修改。

正如Artem所说--检查对象的存在。

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );
原因: