一个EA能否在一个图表中监控和交易多个货币对? - 页 2

 
angevoyageur:

如果你不想回答他的问题,就不要回答,这很简单。没有必要得罪人。

相信我,这对我来说也是可用的,如果 我把 我想 东西都 发了 我至少有 1000个 评分点。



如果他做了一些研究并在代码库中 查看,那么他就会发现,例如https://www.mql5.com/en/code/11176

你可以找到更多这样的例子,他现在的要求在我看来,我想在其他人看来也是如此

他在学习如何编码方面做得不够,想从别人那里得到编码,以获得如何交易一个EA不同符号的例子

而不用自己做任何尝试...

就像CodeMonkey写给xennon的那样

'这里的问题不是说它不能做,而是你甚至没有费心去尝试做。'

.

如果xennon做了这个他不喜欢的回复,那么这也是他对它的错误反应。

我想你应该明白我是怎么看待这个问题的......

 
deVries:


如果他做了一些研究并在代码库中 查找,那么他就会发现,例如https://www.mql5.com/en/code/11176

你可以找到更多这样的例子,他现在问的方式在我看来,我猜在其他人看来也是如此

他没有做足够的工作来学习如何编码,并希望从别人那里得到编码,以获得如何做交易一个EA不同符号的例子

而不用自己做任何尝试...

就像CodeMonkey写给xennon的那样

'这里的问题不是说它不能做,而是你甚至没有费心去尝试做。'

.

如果xennon做了这个他不喜欢的回复,那么这也是他对它的错误反应。

我想你应该明白我所看到的情况...。

当然,我同意。

但我也同意,如果有人回复,没有必要冒犯OP(或任何其他用户)。我认为这个论坛需要一个更好的氛围。

 
deVries:

xennon: 从2012年1月开始注册,现在来这里提出这个问题?

在我看来,他是时候通过阅读和学习做一些研究了。

如果他想做那个EA,那么他就必须来尝试一下,如果他在做的时候遇到问题的话

这是有可能的 .... 经过两年多的时间,他现在肯定知道了。


是的,2年了,那又怎样? 这并不意味着我一直在积极地在MQL中捣乱,不是吗?- 事实上,我对MQL的集体经验可能还不到一个月,TOTAL。 我建议你要么贡献一些积极和有用的东西,要么就XXXX。 这是一个多么愚蠢和白痴的说法。
 
xennon:

是的,2年了,那又怎样? 这并不意味着我一直在积极地在MQL中捣乱,不是吗?- 事实上,我对MQL的集体经验可能还不到一个月,TOTAL。 我建议你要么贡献一些积极和有用的东西,要么就xxx。 这是一个多么愚蠢和白痴的说法。

我已经建议你注意你的语言。这是我最后一次警告。

谢谢你。

 
xennon:

是的,2年了,那又怎样? 这并不意味着我一直在积极地在MQL中捣乱,不是吗?- 事实上,我对MQL的集体经验可能还不到一个月,TOTAL。 我建议你要么贡献一些积极和有用的东西,要么就XXXX。 这是一个多么愚蠢和白痴的说法。


我指出的代码库的例子 ????https://www.mql5.com/en/forum/149766/page2#915892

 
xennon:

我想知道是否有可能让一个单一的EA在任何货币对上运行,但让它监控多个货币对,并在每个货币对出现触发时作出反应。

从本质上讲,我希望有一个EA能够轮询所有感兴趣的货币对,在每个货币对上测试预先配置的标准,并根据需要回应买入/卖出/平仓/警报。

我想这是做不到的,但我很想知道,如果有人对如何实现这一目标有什么想法,而不需要打开大量的图表,并将EA分别应用于每个图表,这主要是为了提高效率(最好有一个代码块而不是一打?)


谢谢。


我认为应该用一个字符串数组来表示符号,然后对所有感兴趣的符号进行循环。

比如说

string nameArray[]={"EURUSD","...","USDJPY"};

然后

for(x=numberOfSymbols;x>=0;x--)
   {
   string symbol=nameArray[x];
   CustomCondition(symbol)
   ....
   .....
//or something like that
 
xennon:

我想知道是否有可能让一个单一的EA在任何货币对上运行,但让它监控多个货币对,并在每个货币对出现触发时作出反应。

从本质上讲,我希望有一个EA能够轮询所有感兴趣的货币对,在每个货币对上测试预先配置的标准,并根据需要响应买入/卖出/平仓/警报。

我想这是做不到的,但我想听听谁有什么想法,如何在不打开大量图表的情况下实现这一目标,并在每个图表上分别应用EA,主要是为了提高效率(最好有一个代码块而不是一打?)


谢谢。

你好,xennon。

对你的问题的简短回答是:是的。

我也想过做类似的事情,但还没来得及编码,所以我会给你一个基本的大纲,告诉你我将如何构建代码,但不是具体的,因为如果你自己研究如何编码每个部分,并参考代码库和其他来源的编码例子作为学习练习,可能会对你未来的代码编写有更大的帮助,而不是简单地从例子中复制代码,把一个解决方案粘贴在一起,而不真正了解发生了什么和为什么,此外,这也有助于调试代码错误。虽然如果你不熟悉编码,代码库可能会很混乱,因为一些术语可能难以理解。

另外,由于我的想法还没有经过测试或实施,所以可能有更好的编码方法或我没有预见到的错误,因为我不是一个编码高手,而且一般来说比较生疏,所以如果有人有任何建议,我都会听,如果有错误,请不要击倒我。

一般的想法是使用毫秒计时器事件,因为OnTick事件只对它所连接的图表起作用,所以其他货币对 的ticks不会产生tick事件,EA也不会运行,但毫秒事件的计时器可以每秒触发多次,监测价格变化。同时使用三个数组,一个用来存储你想使用的符号的字符串,另一个用来存储价格数据。

我试着解释一下。数组nameArray将以数组形式存储每个符号,但更重要的是该数组的元素可以用来为其他两个数组设置位置,因为它们不能使用字符串来定位数组中的位置,但索引值可以。由于每个符号的刻度是在不同的时间收到的,写入PriceArray的数据不会都是在同一时间,因为有些符号在不同的时间更活跃,所以第二个数组存储了PriceData数组的索引,这样可以快速写入,而不会覆盖任何过去的价格数据。第三个数组将写入你需要的必要的价格数据。

代码是代码和英文的组合,其中有需要添加的内容。它非常简单,但应该为你的想法提供一个起点。有许多空白,例如当数组到达终点时,何时处理它们,但这都是学习曲线的一部分。我建议让代码在一个符号下工作,然后是两个,以此类推,让你剔除并修复代码中的任何错误。正如我所说的,这只是一个粗略的草案,所以就这样使用它,改进是可能的,例如,你可以使用一个Struct数据类型或一个对象,而不是三个数组来存储tick数据,但这种设计在开始时比较简单,你可以在以后的编码阶段看看结构和面向对象的编程。

我已经尽量说得很清楚了,但这可能会让你感到非常困惑,所以如果你有任何关于清晰度的进一步问题,请告诉我,我会尽可能地帮助你,但不幸的是,我没有时间来编写这样的代码。

下面是伪代码。

// OnInit ()
    {
     string nameArray[]={"EURUSD","...","USDJPY"};                         // As suggested by thrdel. Creates an array with currency pairs
     int TicksRecorded [#  of symbols monitored];                           // Records the required position in the PriceData array to write the next tick data to for each symbol
     double PriceData [#  of symbols monitored][Ticks][data to record];     // Stores price data for each symbol required for as many ticks as required

     Create the timer and set an appropriate interval
     Open a file to save data if required for future use
     
     for (x=0; x < #  of symboels; x++)                                     // Get all prices for all the symbols you want and store them in the first position of the Ticks and data to record dimensions
           {                                                               // Also adapted from thrdel's code example
            PriceData [x][0][0] = Ask;
            PriceData [x][0][0] = Bid;
            ... whatever else you want to record
           }

// EventSetMillisecondTimer()
    {
     Refresh all price data for all symbols
     for (x=0; x < #  of symbols; x++)                                     // Get all prices for all the symbols you want and store them in the first position of the Ticks and data to record dimensions
           {
            if ((current Ask != to previously recorded Ask for that x) or (current Bid != to previously recorded Bid for that x)... and every other price data you want)
                {
                 TicksRecorded [x]++;                                    // Increments the position in the PriceData array holding the latest tick data for that symbol
                 PriceData [x][TicksRecorded[x]][0] = Ask;
                 PriceData [x][TicksRecorded[x]][1] = Bid;
                 ... and whatever else you want to record
                 Flag to indicate a new tick has been received set to true
                }
            if (new data)
                {
                 Set new data flag to false
                 Do custom action
                }
           }
     }

// OnDeinit ()
     {
      Kill the timer
      Save data to a file if required
     }
 

我只是使用全局变量 来允许我的EA在一个图表中监控/进行交易。

尽管你必须使你的EA更加强大,并且不局限于一个图表。

 

为什么下面的方法不能工作?


如果(这是真的){

ticket=OrderSend("GBPUSD",OP_SELL,lot,Bid,0,0,",0,Red)。

ticket=OrderSend("GBPJPY",OP_BUY,lot,Ask,0,0,0,",0,Green);

ticket=OrderSend("USDJPY",OP_BUY,lot,Ask,0,0,0,",0,Green);

}


弹出一个错误 4106 符号未知

 
Daniel Laverdiere: 为什么下面的方法不能工作?

如果(此为真){

ticket=OrderSend("GBPUSD",OP_SELL,lot,Bid,0,0,",0,0,Red);

ticket=OrderSend("GBPJPY",OP_BUY,lot,Ask,0,0,0,",0,Green);

ticket=OrderSend("USDJPY",OP_BUY,lot,Ask,0,0,0,",0,Green);

}


弹出一个错误 4106 符号未知

  1. 当你发布代码时,请使用SRC按钮!

  2. 如果你的图表的命名模式不完全是"BasQuo",那么它就不能工作。

  3. 不要在一个EA中交易多种货币。