EA代码2(SL经理)的问题 - 页 2 1234 新评论 Simon Gniadkowski 2011.09.27 10:11 #11 Funky: 嗨,猛禽,再次感谢。 1. 上述代码的唯一问题是什么?我认为最坏的情况是,PendingOrderTicket_1不会被修改,会在其SL处关闭。 2. 2.我使用OrderSelect函数的方式可以吗? 我想我遇到的最大问题是,当OrderTicket_1超过第一个Gap_Level1时,它仍然会在满足这个标准时修改订单。 3. 情况是这样吗? 如果是这样,下面的代码能解决这个问题吗? 再次感谢;) 1. 这只是一些让我眼前一亮的东西,会破坏你的代码。 2. 你的OrderSelect是错误的(https://docs.mql4.com/trading/OrderSelect),如果你要用票号来选择,你必须使用SELECT_BY_TICKET 而不是SELECT_BY_POS。 3. 我不这么认为,你所做的,我想,只是意味着那个函数只被调用一次 ......当你有下一个需要修改的订单时会发生什么? 如果你有两个订单同时打开会发生什么? 我不是百分之百了解你在做什么,我没有时间详细查看你的代码,但我有一个问题。 你不能看一下订单的OrderOpenPrice(), OrderStopLoss()和OrderTakeProfit(),并确定它是否已经 被修改为1级2级或3级? Funky 2011.09.27 11:00 #12 RaptorUK: 1. 这只是一些跳出来的东西,会破坏你的代码。 2. 你的OrderSelect是错误的(https://docs.mql4.com/trading/OrderSelect),如果你要用票号来选择,你必须使用SELECT_BY_TICKET 而不是SELECT_BY_POS。 3. 我不这么认为,你所做的,我想,只是意味着那个函数只被调用一次 ......当你有下一个需要修改的订单时会发生什么? 如果你有两个订单同时打开会发生什么? 我不是百分之百了解你在做什么,我没有时间详细查看你的代码,但我有一个问题。 你不能看一下订单的OrderOpenPrice(),OrderStopLoss()和OrderTakeProfit(),并确定它是否已经 被修改为1、2或3级? 谢谢你,Raptor,你的洞察力对我很有帮助...... 我也完全理解时间的限制,你的时间和建议非常值得赞赏....。我并不是想让别人帮我写,所以我没有说得很详细......这就出现了一个问题,没有很多细节,就很难提供帮助,所以请原谅.....。 在这个例子中,我更关心的是学习时的代码,你的提示对我很有帮助。 1.我一直在破釜沉舟地把它放在一起测试,所以可能会在以后更有经验的时候解决断电的问题。 2.我将改成SELECT_BY_TICKET,而不是POS,非常感谢你。 3. 我确实希望GAP_Level1只被调用一次,所以也许我把它串起来的方式是正确的....。 为了回答你的问题,我正试图查看最新的挂单票据,看看它是否超过了我的TradeUp标记。 当这种情况发生时,我希望它能把我以前的所有订单都拖上去(这次是通过选择神奇的数字来获得它们)......在这个阶段,我有另一个待定订单,当它到达Gap_Level2时,我将有一个BuyModify_Level2块,同样的代码....。 这是否合理? 我希望我写的是我的逻辑,这次我真的像你建议的那样,坐下来用纸把它写出来......;) Simon Gniadkowski 2011.09.27 11:20 #13 Funky: 3. 我确实希望GAP_Level1只被调用一次,所以也许我把它串起来的方式是正确的....。 为了回答你的问题,我正试图查看最新的挂单票据,看看它是否超过了我的TradeUp标记。 当这种情况发生时,我希望它能把我以前的所有订单都拖上去(这次是通过选择神奇的数字来获得它们)......在这个阶段,我有另一个待定订单,当它到达Gap_Level2时,我将有一个BuyModify_Level2块,同样的代码....。 可行吗? 你将如何(或在你的代码中)设置HasBeenExecuted = false;以便 IfGap_Level_1() 在第二组交易中被执行? Funky 2011.09.28 00:33 #14 RaptorUK: 你将如何(或在你的代码中哪里)设置HasBeenExecuted = false;以便 IfGap_Level_1() 在第二组交易中被执行? 好问题,伙计。 我打算在我导出的内部变量下面,在内部变量的开头,把这个变量变成ool。 我打算做一个GAP_Level_1, GAP_Level_2,GAP_Level_3, GAP_Level_4, GAP_Level_5等。 因此,一旦它达到GAP_Level_1,它就可以忘记这第一个缺口级别。 你的观点确实让我思考,非常感谢。 我现在确实看到了一个问题。 我意识到,当一个交易达到SL,并重新开始时,我确实想让第一个交易再次寻找Gap_Level_1并轮流进行。 而该死的是,这将导致一个问题,因为我打算将PendingOrder_1与GAP_Level_1,PendingOrderLevel_Level_2与GAP_Level2联系起来。 我想我还是可以做到的,但我不会想到这一点,除非你提到.....。 我可以想到三个变通办法...... 第一个更适合我的脑力,哈哈;) 1.如果我选择IF LAST TRADE IS LOSS,那么删除所有挂单,并在交易达到SL时重新启动它们。 因此,挂单1进入Gap Level_1,它将阻止Pending_Order5成为下一笔进入GAP_Level5的交易。 在SL被击中后,我所有的未平仓交易都将被关闭,因为它们都共享同一个SL,所以关闭我的挂单并重新启动逻辑可能是可以的。 2.我能想到的另一个选择(感谢你几周前对我另一个代码问题的提示),是在第一笔交易完成后插入一个布尔变量,称为NEWTRADE,然后有一个块IFNEWTRADE==1,然后去GAP_Level1。 这让我想到,我想我可以在挂单1区块中输入IFNEWTRADE1,在挂单2区块中输入IFNEWTRADE2,以此类推...然后IFNEWTRADE2==1进入GAP_Level2。 编辑(喝了杯咖啡后):3.我刚刚想到,如果我按时间对订单进行排序(现在我知道可以用很多方式对多个订单进行排序),并根据时间分配一个名为ORD_SELECT_NUMBER的互斥变量,会怎么样? 然后在ORD_SELECT_NUMBER == 1之后,转到GAP_Level1,然后使用ORDER_SELECT_NUMBER ++命令查看下一个ORD_SELECT_NUMBER。 我可以根据信号等编写单笔订单的EA,只是这种多笔订单的东西真的让我很难受...... 我的EA实际上是按原样工作的,而且得到了很好的结果,只是使用起来很疯狂,因为它在每一个TICK上都进行修改,而且目前只是使用我最小的Gap_Level,因为我正在研究如何将上面所有的东西结合起来...... 哇,但再次感谢Raptor,除了编码知识,我也看到了良好的逻辑是多么重要,谢谢你让我思考。 Simon Gniadkowski 2011.09.28 07:45 #15 Funky: 哇,但再次感谢Raptor,除了编码知识外,我看到良好的逻辑性也很重要,谢谢你让我思考。 你搞错了......所有的软件,无论用什么语言编码,C++、Perl、Pascal、Fortran、Assembler等等,都是为了解决问题。 如果你的解决方案背后的逻辑是有缺陷的,那么你是一个多么好的编码者也就不重要了 ......解决方案是第一位的,代码是后来的。 Funky 2011.09.30 02:01 #16 RaptorUK: 你搞错了......所有的软件,无论用什么语言编码,C++、Perl、Pascal、Fortran、Assembler等等,都只是为了解决问题。如果你的解决方案背后的逻辑是有缺陷的,那么不管你是一个多么好的编码者, ......解决方案是第一位的,代码是后来的。 我明白你的意思...一个没有建筑计划的建筑商是走不远的,即使他是世界上最好的建筑商。最初的计划几乎更重要,我明白你的意思。 你对我的帮助很大,猛禽,想再次表示感谢。 我选择了上面的懒人方案1。 这已经是几个小时的编程了,我的EA在85K左右(因此只贴了一个片段),所以我还没有汇报这个恐龙完成后的情况。我现在的运气相当好,订单选择正确。我正在研究,因为这与我习惯于写的单笔订单的EA相去甚远。我在这个项目中跳进了独立水域,学习如何游泳。我将公布我的进展情况。 再次感谢Raptor :) blackmore 2011.09.30 02:55 #17 Funky:我明白你的意思...一个没有建筑计划的建筑商是走不远的,即使他是世界上最好的建筑商。最初的计划几乎更重要,我明白你的意思。你对我的帮助很大,猛禽,我想再次表示感谢。我选择了上面的懒人方案1。这已经是几个小时的编程了,我的EA在85K左右(因此只贴了一个片段),所以我还没有汇报这个恐龙完成后的情况。我现在的运气相当好,订单选择正确。我正在研究,因为这与我习惯于写的单笔订单的EA相去甚远。我在这个项目中跳进了独立水域,学习如何游泳。我将公布我的进展情况。再次感谢Raptor :)一旦你看到自己的代码资源在扩大,并且有一些功能 可以成为未来任何EA使用的通用功能,请考虑使用库/包括等。 一旦它成长为暴龙,你的代码就会迷失在他们自己的Juraissic公园里,特别是当你需要他们再次用于任何未来的使用。 Funky 2011.09.30 05:35 #18 diostar:一旦你看到自己的代码资源在扩大,并且有一些功能可以为任何未来的EA所使用,请考虑使用库/包括等。一旦它成长为暴龙,你的代码就会迷失在他们自己的Juraissic公园里,特别是当你需要他们在未来使用时。 哈哈,伙计,这让我感到好笑。我知道这怎么可能发生。 说实话,我找到了一个名为 "OrderSendReliable.mqh "的插入库。我打算先完成这个EA,然后再把我如何使用这个库插入物和其他EA代码的帖子发回去,因为我相信它可能会解决热市的问题。 我笑了笑,因为我现在可以看到,随着经验的积累,在EA的顶部会有各种各样的#includes,哈哈,而且你为每个EA携带了1mb的缓存文件。 你知道你的评论让 我思考,它只是去点击。当我得到一个我喜欢的{section}时,我就在我的EA之间剪切和粘贴代码,并把它们绑在一起(例如,那个{section}。我在之前提到的另一篇文章中遇到了麻烦)。我甚至没有想过要把它作为一个库的插入,只是参考它......。我离这种事情还有很长的路要走......我正准备在这个EA之后开始我的第一个库包括那个,看看它们是如何工作的....,可能性是如此之大。这个MQL相当令人上瘾。 哦,对了,我的代码也都上了轨道,它完美地实现了它的目的,我突然回来给一个很大的感谢:).. 我真的很感谢你们的支持,我希望我可以用语言来描述我的感受;) blackmore 2011.09.30 06:25 #19 你可以有自己的几套 "核心 "库函数,我强烈建议你早点考虑,而不是以后。 我也是从我的第一个EA开始的,同样的事情,复制、粘贴、复制粘贴....。 转折点是当我为我已经退休的老兵做这个EA时。这改变了一切,我第一次开始使用图书馆。 直到今天,我仍然保留着那个图书馆。如果它能为你提供想法,帮助你继续......这里是它的标题,伙计。 #define PI 3.1415629 #define GOLDEN_RATIO 1.618 #import "command.ex4" bool isInit(); bool isFractional(string ins); bool isOrderLimit(int cap); bool isRiskLimit(double risk); int ioSession(int h); string ioWkday(datetime d); double ioOrderPriceLvl(string ins, int type, double oPrice); double ioPriceLvl(string ins,double dPrice); bool ioTrailStop(string ins, int tkt, int type, double oPrice,int lvl, double stop=0); int ioTotalOrd(int magic); int opClose(string ins,int ticket,int cmd,double lLot,bool Activate.NO_BREAK_ONE=false); int opOpen(string ins, int cmd, double lLot, double lPrice, double lLoss, double lProfit, string comment,int EA.Id, int lSlip=0, bool Activate.NO_BREAK_ONE=false); int opModify(string ins, int ticket,int cmd,double lPrice,double lLoss,double lProfit,bool Activate.NO_BREAK_ONE=false); double opStopLvl(string ins,double p); double opNorm(string ins,double price); double opNormL(string ins,double d); double opPoint(string ins); double intelLot(string market, double risk,double stop); double intelCorrel(string s1,string s2, int f, int type); int intelPriceMove(string ins, int p, int L); int intelTrend(string ins, int p, int q); #import 希望这对你有帮助.... Funky 2011.10.01 05:05 #20 diostar: 你可以有自己的一套 "核心 "库函数,我强烈建议你早点考虑,而不是晚点。 我也是从我的第一个EA开始的,同样的事情,复制、粘贴、复制粘贴....。 转折点是当我为我已经退休的老兵做这个EA时。 这改变了一切,我第一次开始使用库。 直到今天,我仍然保留着那个图书馆。 如果它能为你提供思路,帮助你上路......这里是它的标题,伙计。 希望这对你有帮助.... 嗨,Diostar,这真的很酷,谢谢你分享这些信息,我还没有阅读过图书馆。 这似乎是一个很好的方法,可以随身携带变量,并为以后预定义它们。 我将考虑一下这个问题。 我喜欢你说的 "早而不晚",我喜欢这样的提示,谢谢伙计。 这让我想起了学习吉他,当20年后我想我希望我从一开始就做 "这样那样 "的事情,这将使过去的20年更容易,笑。 我将认真研究这个问题,谢谢你。 就在我以为自己已经火力全开的时候,我又遇到了一个难题,我想不出该如何解决。 我在选择这两个连接部分的正确顺序方面遇到了麻烦。 我可能会展示我的两个例子,并展示其效果,但我的大脑就是不愿意去点击这个例子...... 例子1: 准确地按照我的要求滚动以前的订单,但是它在每一次点击时都会修改它们。 (原来的戏剧性的顺序选择Raptor帮助我停止了水平的冲突,所以SL也是由于这个原因而滑动的。 我觉得这最后一部分很容易解决,但已经处理了好几天了,我觉得要阻止它每一次 的发生...) void IfGap_SELLLevel_00() { if (OrderSelect(FirstRunSell_ticket_00,SELECT_BY_TICKET,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01) { if ((Gap_Level_00 < 0 && (OrderType() == OP_SELL && OrderOpenPrice() - Bid < Gap_Level_00*PipValue*Point)) || (Gap_Level_00 > 0 && (OrderType() == OP_SELL && OrderOpenPrice() - Bid > Gap_Level_00*PipValue*Point))) { IfGap_SELLLevel_00AlreadyExe = false; } if (IfGap_SELLLevel_00AlreadyExe == false) { IfGap_SELLLevel_00AlreadyExe = true; SellOrderModifyLevel_00(); } } } } void SellOrderModifyLevel_00() { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01) { double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point; if (Stoploss_Level_00 == 0) Level_00_SL = 0; double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point; if (Takeprofit_Level_00 == 0) Level_00_TP = 0; bool ret00 = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour); if (ret00 == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } } 例子2: 这个例子不是我想要的...我试着用这个选项来阻止它在每个tick上修改发送......但是它没有滚动浏览订单,只是在每个tick上修改一个正确的票据(它修改了第一个订单,我猜是索引缓存中的最后一个订单)。 void IfGap_SELLLevel_00() { if (OrderSelect(FirstRunSell_ticket_00,SELECT_BY_TICKET,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01) { if ((Gap_Level_00 < 0 && (OrderType() == OP_SELL && OrderOpenPrice() - Bid < Gap_Level_00*PipValue*Point)) || (Gap_Level_00 > 0 && (OrderType() == OP_SELL && OrderOpenPrice() - Bid > Gap_Level_00*PipValue*Point))) { SellOrderModifyLevel_00(); } } } } void SellOrderModifyLevel_00() { bool IfGap_SELLLevel_00AlreadyExe = FALSE; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01 && !IfGap_SELLLevel_00AlreadyExe) { double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point; if (Stoploss_Level_00 == 0) Level_00_SL = 0; double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point; if (Takeprofit_Level_00 == 0) Level_00_TP = 0; bool ret00 = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour); IfGap_SELLLevel_00AlreadyExe = TRUE; if (ret00 == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } } 我又做了50次尝试,首先尝试了一个小的IF EXECUTED 00部分,如果之前没有执行,就把它传递给IFGAP......然而我没有什么运气,在hand..... 之前插入一个开关。 我可能就把这个例子贴出来,以显示这个选项.... 例3: 有了开关......它的效果仍然和例1一样。 它能正确地滚动订单,但仍然在每一次点击时进行修改...... 我可以看到,这个开关一直得到的问题是假的,所以只是再次运行......然而其他的尝试根本不会让它通过......我应该坚持这个选项,并尝试在其他地方声明IfGap_SELLLevel_00AlreadyExe = true,如果是这样,在哪里? void IfGap_SELLLevel_00AlreadyBlock() { if (OrderSelect(FirstRunSell_ticket_00,SELECT_BY_TICKET,MODE_TRADES)) { IfGap_SELLLevel_00AlreadyExe = false; } if (IfGap_SELLLevel_00AlreadyExe == false) { IfGap_SELLLevel_00AlreadyExe = true; IfGap_SELLLevel_00(); } } void IfGap_SELLLevel_00() { if (OrderSelect(FirstRunSell_ticket_00,SELECT_BY_TICKET,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01) { if ((Gap_Level_00 < 0 && (OrderType() == OP_SELL && OrderOpenPrice() - Bid < Gap_Level_00*PipValue*Point)) || (Gap_Level_00 > 0 && (OrderType() == OP_SELL && OrderOpenPrice() - Bid > Gap_Level_00*PipValue*Point))) { SellOrderModifyLevel_00(); } } } } void SellOrderModifyLevel_00() { for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01) { double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point; if (Stoploss_Level_00 == 0) Level_00_SL = 0; double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point; if (Takeprofit_Level_00 == 0) Level_00_TP = 0; bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour); if (ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } } 所以是的,在再次打扰你们之前,我真的试过了,....,好几个小时......。 我又迷失了... 任何帮助或指点都会被感激;) 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗨,猛禽,再次感谢。
1. 上述代码的唯一问题是什么?我认为最坏的情况是,PendingOrderTicket_1不会被修改,会在其SL处关闭。
2. 2.我使用OrderSelect函数的方式可以吗?
我想我遇到的最大问题是,当OrderTicket_1超过第一个Gap_Level1时,它仍然会在满足这个标准时修改订单。
3. 情况是这样吗? 如果是这样,下面的代码能解决这个问题吗?
再次感谢;)
1. 这只是一些让我眼前一亮的东西,会破坏你的代码。
2. 你的OrderSelect是错误的(https://docs.mql4.com/trading/OrderSelect),如果你要用票号来选择,你必须使用SELECT_BY_TICKET 而不是SELECT_BY_POS。
3. 我不这么认为,你所做的,我想,只是意味着那个函数只被调用一次 ......当你有下一个需要修改的订单时会发生什么? 如果你有两个订单同时打开会发生什么?
我不是百分之百了解你在做什么,我没有时间详细查看你的代码,但我有一个问题。
你不能看一下订单的OrderOpenPrice(), OrderStopLoss()和OrderTakeProfit(),并确定它是否已经 被修改为1级2级或3级?
1. 这只是一些跳出来的东西,会破坏你的代码。
2. 你的OrderSelect是错误的(https://docs.mql4.com/trading/OrderSelect),如果你要用票号来选择,你必须使用SELECT_BY_TICKET 而不是SELECT_BY_POS。
3. 我不这么认为,你所做的,我想,只是意味着那个函数只被调用一次 ......当你有下一个需要修改的订单时会发生什么? 如果你有两个订单同时打开会发生什么?
我不是百分之百了解你在做什么,我没有时间详细查看你的代码,但我有一个问题。
你不能看一下订单的OrderOpenPrice(),OrderStopLoss()和OrderTakeProfit(),并确定它是否已经 被修改为1、2或3级?
谢谢你,Raptor,你的洞察力对我很有帮助......
我也完全理解时间的限制,你的时间和建议非常值得赞赏....。我并不是想让别人帮我写,所以我没有说得很详细......这就出现了一个问题,没有很多细节,就很难提供帮助,所以请原谅.....。 在这个例子中,我更关心的是学习时的代码,你的提示对我很有帮助。
1.我一直在破釜沉舟地把它放在一起测试,所以可能会在以后更有经验的时候解决断电的问题。
2.我将改成SELECT_BY_TICKET,而不是POS,非常感谢你。
3. 我确实希望GAP_Level1只被调用一次,所以也许我把它串起来的方式是正确的....。 为了回答你的问题,我正试图查看最新的挂单票据,看看它是否超过了我的TradeUp标记。 当这种情况发生时,我希望它能把我以前的所有订单都拖上去(这次是通过选择神奇的数字来获得它们)......在这个阶段,我有另一个待定订单,当它到达Gap_Level2时,我将有一个BuyModify_Level2块,同样的代码....。 这是否合理?
我希望我写的是我的逻辑,这次我真的像你建议的那样,坐下来用纸把它写出来......;)
3. 我确实希望GAP_Level1只被调用一次,所以也许我把它串起来的方式是正确的....。 为了回答你的问题,我正试图查看最新的挂单票据,看看它是否超过了我的TradeUp标记。 当这种情况发生时,我希望它能把我以前的所有订单都拖上去(这次是通过选择神奇的数字来获得它们)......在这个阶段,我有另一个待定订单,当它到达Gap_Level2时,我将有一个BuyModify_Level2块,同样的代码....。 可行吗?
你将如何(或在你的代码中哪里)设置HasBeenExecuted = false;以便 IfGap_Level_1() 在第二组交易中被执行?
好问题,伙计。
我打算在我导出的内部变量下面,在内部变量的开头,把这个变量变成ool。 我打算做一个GAP_Level_1, GAP_Level_2,GAP_Level_3, GAP_Level_4, GAP_Level_5等。 因此,一旦它达到GAP_Level_1,它就可以忘记这第一个缺口级别。
你的观点确实让我思考,非常感谢。 我现在确实看到了一个问题。
我意识到,当一个交易达到SL,并重新开始时,我确实想让第一个交易再次寻找Gap_Level_1并轮流进行。 而该死的是,这将导致一个问题,因为我打算将PendingOrder_1与GAP_Level_1,PendingOrderLevel_Level_2与GAP_Level2联系起来。
我想我还是可以做到的,但我不会想到这一点,除非你提到.....。
我可以想到三个变通办法...... 第一个更适合我的脑力,哈哈;)
1.如果我选择IF LAST TRADE IS LOSS,那么删除所有挂单,并在交易达到SL时重新启动它们。 因此,挂单1进入Gap Level_1,它将阻止Pending_Order5成为下一笔进入GAP_Level5的交易。 在SL被击中后,我所有的未平仓交易都将被关闭,因为它们都共享同一个SL,所以关闭我的挂单并重新启动逻辑可能是可以的。
2.我能想到的另一个选择(感谢你几周前对我另一个代码问题的提示),是在第一笔交易完成后插入一个布尔变量,称为NEWTRADE,然后有一个块IFNEWTRADE==1,然后去GAP_Level1。 这让我想到,我想我可以在挂单1区块中输入IFNEWTRADE1,在挂单2区块中输入IFNEWTRADE2,以此类推...然后IFNEWTRADE2==1进入GAP_Level2。
编辑(喝了杯咖啡后):3.我刚刚想到,如果我按时间对订单进行排序(现在我知道可以用很多方式对多个订单进行排序),并根据时间分配一个名为ORD_SELECT_NUMBER的互斥变量,会怎么样? 然后在ORD_SELECT_NUMBER == 1之后,转到GAP_Level1,然后使用ORDER_SELECT_NUMBER ++命令查看下一个ORD_SELECT_NUMBER。
我可以根据信号等编写单笔订单的EA,只是这种多笔订单的东西真的让我很难受...... 我的EA实际上是按原样工作的,而且得到了很好的结果,只是使用起来很疯狂,因为它在每一个TICK上都进行修改,而且目前只是使用我最小的Gap_Level,因为我正在研究如何将上面所有的东西结合起来......
哇,但再次感谢Raptor,除了编码知识,我也看到了良好的逻辑是多么重要,谢谢你让我思考。
哇,但再次感谢Raptor,除了编码知识外,我看到良好的逻辑性也很重要,谢谢你让我思考。
你搞错了......所有的软件,无论用什么语言编码,C++、Perl、Pascal、Fortran、Assembler等等,都只是为了解决问题。如果你的解决方案背后的逻辑是有缺陷的,那么不管你是一个多么好的编码者, ......解决方案是第一位的,代码是后来的。
我明白你的意思...一个没有建筑计划的建筑商是走不远的,即使他是世界上最好的建筑商。最初的计划几乎更重要,我明白你的意思。
你对我的帮助很大,猛禽,想再次表示感谢。
我选择了上面的懒人方案1。
这已经是几个小时的编程了,我的EA在85K左右(因此只贴了一个片段),所以我还没有汇报这个恐龙完成后的情况。我现在的运气相当好,订单选择正确。我正在研究,因为这与我习惯于写的单笔订单的EA相去甚远。我在这个项目中跳进了独立水域,学习如何游泳。我将公布我的进展情况。
再次感谢Raptor :)
我明白你的意思...一个没有建筑计划的建筑商是走不远的,即使他是世界上最好的建筑商。最初的计划几乎更重要,我明白你的意思。
你对我的帮助很大,猛禽,我想再次表示感谢。
我选择了上面的懒人方案1。
这已经是几个小时的编程了,我的EA在85K左右(因此只贴了一个片段),所以我还没有汇报这个恐龙完成后的情况。我现在的运气相当好,订单选择正确。我正在研究,因为这与我习惯于写的单笔订单的EA相去甚远。我在这个项目中跳进了独立水域,学习如何游泳。我将公布我的进展情况。
再次感谢Raptor :)
一旦你看到自己的代码资源在扩大,并且有一些功能 可以成为未来任何EA使用的通用功能,请考虑使用库/包括等。
一旦它成长为暴龙,你的代码就会迷失在他们自己的Juraissic公园里,特别是当你需要他们再次用于任何未来的使用。
一旦你看到自己的代码资源在扩大,并且有一些功能可以为任何未来的EA所使用,请考虑使用库/包括等。
一旦它成长为暴龙,你的代码就会迷失在他们自己的Juraissic公园里,特别是当你需要他们在未来使用时。
哈哈,伙计,这让我感到好笑。我知道这怎么可能发生。
说实话,我找到了一个名为 "OrderSendReliable.mqh "的插入库。我打算先完成这个EA,然后再把我如何使用这个库插入物和其他EA代码的帖子发回去,因为我相信它可能会解决热市的问题。
我笑了笑,因为我现在可以看到,随着经验的积累,在EA的顶部会有各种各样的#includes,哈哈,而且你为每个EA携带了1mb的缓存文件。
你知道你的评论让 我思考,它只是去点击。当我得到一个我喜欢的{section}时,我就在我的EA之间剪切和粘贴代码,并把它们绑在一起(例如,那个{section}。我在之前提到的另一篇文章中遇到了麻烦)。我甚至没有想过要把它作为一个库的插入,只是参考它......。我离这种事情还有很长的路要走......我正准备在这个EA之后开始我的第一个库包括那个,看看它们是如何工作的....,可能性是如此之大。这个MQL相当令人上瘾。
哦,对了,我的代码也都上了轨道,它完美地实现了它的目的,我突然回来给一个很大的感谢:)..
我真的很感谢你们的支持,我希望我可以用语言来描述我的感受;)
你可以有自己的几套 "核心 "库函数,我强烈建议你早点考虑,而不是以后。
我也是从我的第一个EA开始的,同样的事情,复制、粘贴、复制粘贴....。
转折点是当我为我已经退休的老兵做这个EA时。这改变了一切,我第一次开始使用图书馆。
直到今天,我仍然保留着那个图书馆。如果它能为你提供想法,帮助你继续......这里是它的标题,伙计。
希望这对你有帮助....
你可以有自己的一套 "核心 "库函数,我强烈建议你早点考虑,而不是晚点。
我也是从我的第一个EA开始的,同样的事情,复制、粘贴、复制粘贴....。
转折点是当我为我已经退休的老兵做这个EA时。 这改变了一切,我第一次开始使用库。
直到今天,我仍然保留着那个图书馆。 如果它能为你提供思路,帮助你上路......这里是它的标题,伙计。
希望这对你有帮助....
嗨,Diostar,这真的很酷,谢谢你分享这些信息,我还没有阅读过图书馆。 这似乎是一个很好的方法,可以随身携带变量,并为以后预定义它们。 我将考虑一下这个问题。 我喜欢你说的 "早而不晚",我喜欢这样的提示,谢谢伙计。 这让我想起了学习吉他,当20年后我想我希望我从一开始就做 "这样那样 "的事情,这将使过去的20年更容易,笑。 我将认真研究这个问题,谢谢你。
就在我以为自己已经火力全开的时候,我又遇到了一个难题,我想不出该如何解决。 我在选择这两个连接部分的正确顺序方面遇到了麻烦。
我可能会展示我的两个例子,并展示其效果,但我的大脑就是不愿意去点击这个例子......
例子1:
准确地按照我的要求滚动以前的订单,但是它在每一次点击时都会修改它们。
(原来的戏剧性的顺序选择Raptor帮助我停止了水平的冲突,所以SL也是由于这个原因而滑动的。 我觉得这最后一部分很容易解决,但已经处理了好几天了,我觉得要阻止它每一次 的发生...)
例子2:
这个例子不是我想要的...我试着用这个选项来阻止它在每个tick上修改发送......但是它没有滚动浏览订单,只是在每个tick上修改一个正确的票据(它修改了第一个订单,我猜是索引缓存中的最后一个订单)。
我又做了50次尝试,首先尝试了一个小的IF EXECUTED 00部分,如果之前没有执行,就把它传递给IFGAP......然而我没有什么运气,在hand..... 之前插入一个开关。 我可能就把这个例子贴出来,以显示这个选项....
例3:
有了开关......它的效果仍然和例1一样。 它能正确地滚动订单,但仍然在每一次点击时进行修改......
我可以看到,这个开关一直得到的问题是假的,所以只是再次运行......然而其他的尝试根本不会让它通过......我应该坚持这个选项,并尝试在其他地方声明IfGap_SELLLevel_00AlreadyExe = true,如果是这样,在哪里?
所以是的,在再次打扰你们之前,我真的试过了,....,好几个小时......。 我又迷失了...
任何帮助或指点都会被感激;)