专家顾问 - 杂项问题 - 页 17

 

#订单计算和账户信息 的更新 - 开放

( 我曾经问过 - 但我仍然需要帮助 )

我通过OnTick() Start() 调用我的计算函数,而它们取决于图表符号Ticks
我已经开始研究如何才能使我的EA的计算更新 依赖于Ticks和符号(/图表-Ticks,符号)。
我只是想让"所有订单计算和账户信息 " 与 "终端>交易 "同步更新(/实时)

请帮助我,谢谢。
谢谢。

 
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
  • www.mql5.com
Language Basics / Functions / Event Handling Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

还有SymbolName(x,1)。

好的评论,它帮助了我,非常感谢。
现在,我正在使用OnTick()和OnTimer(),这两个函数 对我来说都很有用。(我是第一次在EA中使用OnTimer()。

---

我也想试试Ticks。我只需要在 "终端>交易 "和当前的图表符号中的哪些符号(对)的Ticks。这个SymbolName()可以帮助我吗?
请帮助我或给我建议,我如何才能做到这一点?

一切顺利。

 
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }
 
Marco vd Heijden:
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }

惊人的例子和对我来说非常有用的评论,非常感谢老兄。

请问Ticks 有可能来自交易对/符号 吗?
因为几乎所有的时间我的市场观察都显示所有的符号--特别是我为交易寻找新的好对子,这就是我正在研究如何获得"终端>交易 " 符号/对子的唯一原因,目前只是打开交易刻度线。

先谢谢你。

 
没有,但你可以在OnTimer()函数 中更新价格,设置为一个低值,例如250毫秒将等于每秒4个点,那么你为什么需要它?
 
Marco vd Heijden:
没有,但你可以在OnTimer()函数 中更新价格,设置为一个低值,例如250毫秒将等于每秒4个点,所以你为什么需要它?

谢谢你的评论。

( 副题 -#订单计算和账户信息的更新 - 开放)正如我提到的,我使用订单利润计算,这与 "终端>交易 "不同步,这就是唯一的原因。
所以,有时波动率很低,点数最少,我认为函数可能在一秒钟内运行4次,所以白白运行(/徒劳)。

如果我找不到哪种方法可以给我' 终端>交易'的订单利润计算和账户信息(/更新)同步的点子。我将使用你非常有用的方法--你在最后的评论中向我展示了哪种方法,非常感谢。(我已经测试过了,这个方法对我有用)

先谢谢你。

 

好吧,如果你真的喜欢它,你可以使用。

struct MqlTick
  {
   datetime     time;          // Time of the last prices update
   double       bid;           // Current Bid price
   double       ask;           // Current Ask price
   double       last;          // Price of the last deal (Last)
   ulong        volume;        // Volume for the current Last price
   long         time_msc;      // Time of a price last update in milliseconds
   uint         flags          // Tick flags
  };

The Structure for Returning Current Prices (MqlTick)

这是一个用于存储符号的最新价格的结构。它是为快速检索关于当前价格的最需要的信息而设计的。

MqlTick类型的变量允许在一次调用SymbolInfoTick() 函数中获得Ask, Bid, Last和Volume的值。

每个tick的参数都会被填入,不管与前一个tick相比是否有变化。因此,它有可能找出过去任何时刻的正确价格,而不需要在tick历史中搜索以前的值。例如,即使在一个tick到达期间只有一个Bid价格变化,该结构仍然包含其他参数,包括之前的Ask价格、成交量等。

你可以通过分析tick标志来了解到底有哪些数据被改变了。

  • TICK_FLAG_BID - 勾股价已经改变了一个买入价格
  • TICK_FLAG_ASK - 嘀嗒声已经改变了询问价格
  • TICK_FLAG_LAST - 一个刻度线改变了最后的交易价格
  • TICK_FLAG_VOLUME - 一个刻度线改变了一个成交量。
  • TICK_FLAG_BUY - 一个刻度是买入交易的结果。
  • TICK_FLAG_SELL - 一个刻度是卖出交易的结果。

例子。

void OnTick()
  {
   MqlTick last_tick;
//---
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print(last_tick.time,": Bid = ",last_tick.bid,
            " Ask = ",last_tick.ask,"  Volume = ",last_tick.volume);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
//---
  }

也请看

https://www.mql5.com/en/docs/constants/structures/mqltick

结构和类,CopyTicks(),SymbolInfoTick()

所以你可以用它来检查一个特定的符号是否有新的刻度线,但这实际上比直接读取价格水平多了一步,所以再一次说明你为什么需要它。

Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure - Reference on algorithmic/automated trading language for MetaTrader 5
 

Marco vd Heijden:

如果你真的喜欢它,你可以使用:...
所以你可以用它来检查一个特定的符号是否有新的刻度,但这实际上比直接读取价格水平多了一步,所以再一次,你为什么需要它。

谢谢你的信息评论,非常感谢。

---

如果我是对的,这部分句子是一个问题。

......你为什么需要它。
原因只有一个,我是为了防止不相关的函数循环/运行。

(我想说的是,今天我在测试我的EA的订单利润计算时,计算不断地更新(/白白地循环),我在欧元兑美元图表 上测试,当我测试时,我看到非常低的成交量,几乎每分钟20(没有超过)。
在我测试的时候,我再一次确定,我可以找到一种方法,它将只给我 "终端>交易 "的点数。我想再说一次,这没有任何理由。
我只知道在OnTick()中,只有图表符号才会给我提供点数。而其他的OnTimer()可以给我一秒钟4个点......等等,这是我从你非常有用和伟大的评论中学到的,再次感谢你。)

而且我需要描述我的情况。

我的订单利润计算可以与终端交易面板同步,当我的EA在图表符号上运行时(例如:欧元兑美元),如果图表符号与订单符号相同,但如果我为英镑兑美元开立新的头寸,那么与终端交易面板的同步就会中断。
如果我有欧元兑美元的订单,但我试图在其他图表符号上寻找新的好货币对进行交易(例如:英镑兑美元,纽元兑美元等)。 订单利润计算不与 "终端>交易 "面板同步。
(不要忘了我已经知道OnTimer(),你帮助我如何使用它来实现一秒钟4个点。)

所有这些担忧都来自于此。

今天,我开的是短期头寸,如果我开的是长期头寸,我就不会关注与终端交易的同步问题。

---

我希望你现在能更清楚地理解我。

祝您一切顺利。

 

如果你真的想等待每一个刻度,你将不得不为每个符号写一个单独的EA,并使用OnTick()函数

但我可以告诉你,我也为微型控制器编程,它们处于无尽的while循环中(永远),直到断电或中断发生。

检查一个条件是真还是假,需要使用最小的布尔数据类型,而你的处理器已经在后台运行的所有进程和图形等方面每秒做了数百万次甚至数十亿次。

当你开始做涉及较大数据类型的重型计算时,这就成了一个问题。

原因: