OrderModify()问题 - 页 3

 

西蒙。

我在想我该如何去做这件事,但什么也想不出来。我正在搜索MetaEditor中的字典,寻找可能的途径。我正在考虑使用OrderSymbol()和OrderSelect()函数。如果你给我一个提示的选项,显然我会接受。什么是提示?;) 我认为这更像是一个讨论,而不是一个挑战。如果你认为这是一个挑战,我将同意不接受任何暗示。我对自己的能力有充分的信心。

谢谢你。

 

你为什么要用MarketInfo()? 告诉你什么?


在你编写这个代码之前,你需要弄清楚如何去做,然后能够用简单的语言而不是代码来表达。


满足这个要求所需要的代码包含了很多方面,你需要用你放在代码库中的代码来做。


现在是我的睡觉时间 ...... 所以这里有一个提示可以让你开始,你有多个订单,所以你需要循环浏览所有的订单来找到正确的订单 ...... 或者也许不止一个,涵盖你能看到的所有选项。

如果你找不到方法,请告诉我,我会想出我认为的解决方案,并把它贴出来......然后你可以阅读它,理解它,并把它拆开,要求我证明你认为错误或不需要的任何部分的理由。

无论哪种方式,我都相信你会在这个过程中学习。

 

西蒙。

Richard Bhauer给我发来了我之前发布的修订版。这绝对不是 我喜欢的编码风格,但我认为它令人印象深刻。我想我应该与你分享,看看这段代码是否与你正在推广的选择订单和关闭订单的方法有任何联系。再次感谢理查德。另外,我想尝试OrderSymbol()的一个原因是,我写过使用OrderSend("GBPUSD"...)的多个订单的EA;或者任何货币对。我想,我可以简单地尝试一个类似的过程来关闭订单。显然,选择订单的工作(为了关闭它)是在OrderSelect()函数 中完成的。在之前的帖子中,你提到了一个提示,尝试运行一个循环来定位正确的票据号码(我猜测是先运行循环,当找到票据后,下降到下一个代码块,首先是OrderSelect()函数。在OrderSelect()函数中,有一个在循环的前一个代码块中用来寻找正确票号的变量。OrderSelect()函数将使用该变量来选择机票。一旦选择了车票,其他的事情就很简单了。我明天早上再看你的回复。

谢谢你。

附加的文件:
 
WhooDoo22:

显然,选择订单的工作(为了关闭它)是在OrderSelect()函数中完成的。

阅读以下函数的文档,OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice()它们都有如下说明。注意:订单必须是先前由OrderSelect()函数选择的

OrderClose()没有这句话,因为你把票号 作为第一个参数传给 OrderClose()......上面列出的所有函数都没有,所以要使用它们,你首先要选择你感兴趣的订单,这就是OrderSelect()的工作。然后你可以用OrderLots()找到它的头寸大小,或用OrderOpenPrice()找到它的开仓价,但 首先 必须选择它。


你必须掌握这个概念并理解它。. .

WhooDoo22:

在之前的帖子中,你提到了一个提示,尝试运行一个循环来定位正确的票据号码(我猜测是先运行循环,当找到票据后,下降到下一个代码块,首先包含OrderSelect()函数。在OrderSelect()函数中,有一个变量 是在循环的前一个代码块中用来寻找正确的票号的。

你如何从一个循环中找到正确的票号? 你不知道哪个票号是正确的......你有什么信息可以使用?
 

西蒙。

以下函数,OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice()必须事先由OrderSelect()函数 选择。

OrderClose()函数不需要事先被OrderSelect()函数选中,因为OrderClose()函数将票号作为第一个参数传递。

OrderSelect()的目的是为了选择一个订单。

概念理解了,我将查看文档。

你将如何找到...

RE:还在研究这个问题。

谢谢你

 

西蒙。

看来你一直在指出 "票号"。我明白这一点。但问题是,我知道只有两种方法可以用OrderSelect()函数 来隔离票据。我可以使用 "订单池 "的方式,即没有特定的票号变量,或者我可以使用另一种方式,即使用特定的票号变量名称 "ticket"、"babab22"、"lambchops "等,来隔离票号。我相信使用 "订单池 "的方式是最实用的,所以我正在考虑以这种方式使用这个功能。我喜欢它。


另外,我浏览了罗伯特的修订版,注意到当他关闭订单时,他只是使用了OrderSelect()函数,(就是你从订单池中选择的那个),除了明显的关闭信号外,唯一使用的 "如果 "条件是手数和订单是否是买/卖。就是这样。我喜欢它,但这不是目前的任务。在这个任务中,是的,我可以打出同样的东西,但什么也学不到。目前困难的是,如果我不知道你想教我什么,我怎么能学会你想教的东西。 我相信如果你能更直接地表达你的想法,我就能更快地掌握你想分享的东西。我会试着更加理解。

谢谢你。

 
WhooDoo22:

西蒙。

看来你一直指出 "票号"。我明白这一点。但问题是,我知道只有两种方法可以用OrderSelect()函数来隔离票据。我可以使用 "订单池 "的方式,即没有特定的票号变量,或者我可以使用另一种方式,即使用特定的票号变量名称 "ticket"、"babab22"、"lambchops "等,来隔离票号。我相信使用 "订单池 "的方式是最实用的,所以我正在考虑以这种方式使用这个功能。我喜欢它。

在这种情况下,你不能将票号存储在变量中,因为订单是手动下的,所以代码在发现票号之前不知道任何票号,所以你只能使用第一个选项,使用循环和OrderSelect()。

保存票据号码是一个很大的不便,应该避免,除非你必须这样做,也就是说没有可能避免。 为什么?因为你的代码必须能够从MT4重启中恢复,所以这意味着将票据信息保存到文件中,最好是将文件复制到第二台电脑上,以便进行额外的备份。 然后当代码重新启动时,它必须读取文件,获得票据号码并尝试从它离开的地方继续。......这种复杂性对大多数人来说是不需要的,但他们往往认为保存票号是更简单的选择......而且他们并不真的需要将信息保存到文件中,等等......然后当一切出错时,他们希望他们能这样做。

好吧,我编了我的代码版本,以满足我的要求,我添加了一些检查,以检测多个美元订单,并修改和关闭所有美元 订单 ...... 这里有一些屏幕截图,以显示最终版本是如何进行的。


我手动下的订单 ......

所有订单

我的代码修改的USDJPYi订单(注意TP和SL)和关闭,还有票据编号。 也注意到买入和卖出订单的混合。

关闭的美元兑日元订单

其余的订单......。

余下的订单

 

西蒙。

在这种情况下,你不能将票号存储在一个变量中...

RE:所以你在这个例子中采用了 "订单池 "的路线,对吗?

// order pool example

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

保存票号是一个很大的不便...

RE:同意。

把票据信息保存到文件中,最好是把文件复制到第二台电脑上,作为额外的备份......

Re:是的,但是将票据信息保存到文件中,对我目前的情况来说是单独的一组代码块。在基本原理写好之前,我是不会开始编码的。

我编码了我的版本的代码,以满足我的要求...

RE:是的,我可以看到。看起来很好。:)


在我完成这项任务后,我将继续进行第二卷。它不会自己写的;)

谢谢你。

 
WhooDoo22:

西蒙。

在这种情况下,你不能将票号存储在一个变量中...

RE:所以你在这个例子中采用了 "订单池 "路线,对吗?


是否有其他选择?
 

西蒙。

不,据我所知,没有。似乎只有两种选择,这种选择似乎最适合第二卷。而且,它似乎不那么复杂,我一点也不介意。)

那么,回到这个任务,我知道你用订单池的方法来选择usdjpy对 的订单,但你用什么条件来隔离usdjpy的订单?

谢谢你。

原因: