初学者的问题 MQL4 MT4 MetaTrader 4 - 页 116 1...109110111112113114115116117118119120121122123...261 新评论 novichok2018 2018.02.09 13:36 #1151 novichok2018:谢谢你。休息似乎有帮助。让我们看看接下来会发生什么。不,它并没有真正的帮助。只有在开出一种仓位的情况下才有效。例如,如果一个卖出头寸被打开但尚未关闭,同时一个买入头寸被打开并关闭,那么卖出头寸就不能看到自己的关闭条件,直到另一个卖出头寸打开并关闭(根据自己的条件)。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。我试图用I.Kim的函数ExistPositions()来确定关闭BAY后是否存在未结头寸,但我不明白在哪里插入,在哪里放置Print来控制执行。任何线索。 novichok2018 2018.02.09 18:09 #1152 novichok2018:不,它并没有真正的帮助。只有在开出相同类型的头寸时才有效。例如,如果首先打开一个卖出头寸,但尚未关闭,同时打开并关闭一个买入头寸,那么卖出头寸不会看到其关闭条件,直到另一个卖出头寸打开并关闭(根据其条件)。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。我试图用I.Kim的函数ExistPositions()来确定关闭BAY后是否存在未结头寸,但我不明白在哪里插入,在哪里放置Print来控制执行。你能给我一个提示吗?难道没有人知道解决办法吗?我不知道。 Konstantin Erin 2018.02.10 06:46 #1153 novichok2018: 难道没有人知道解决办法吗?我不知道。我登录了论坛--我看到你在自言自语......。你的谈话在哪里开始,它是关于什么的--很难理解。要调试一个程序,使用Alert 而不是Print要方便得多--它一次就能显示在屏幕上。这些警报是在检查if条件之前放置的。另一种用铅笔调试的方法--按照程序应该执行的样子去看,并写下变量的值。当它发生变化时--划掉旧值并写上新值。这就是以前的做法。现在,MetaEditor有一个调试器,可以监控变量的值。最简单的结构应该通过编写脚本来单独检查 Igor Makanu 2018.02.10 10:27 #1154 novichok2018:难道没有人知道解决办法吗?我不知道。这样试试吧。 //+------------------------------------------------------------------+ void OnTick() { int total=OrdersTotal(); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(TimeCurrent()>OrderOpenTime()+100) { switch(OrderType()) { //_______________________________________________________________________ case OP_BUY: { if(OrderMagicNumber()==101 && MathAbs(WPR1)<5) { ClosePosBySelect(slippage,Yellow); break; } if(OrderMagicNumber()==111 && MathAbs(WPR1)<20) { ClosePosBySelect(slippage,Yellow); break; } break; } //_______________________________________________________________________ case OP_SELL: { if(OrderMagicNumber()==222 && MathAbs(WPR1)>97.55) { ClosePosBySelect(slippage,Yellow); break; } if(OrderMagicNumber()==201 && MathAbs(WPR1)>96) { ClosePosBySelect(slippage,Yellow); break; } break; } } } } } } //_______________________________________________________________________ void ClosePosBySelect(int slip,color col) { RefreshRates(); if(OrderType()==OP_BUY) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), slip, col); if(OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), slip, col); } //_______________________________________________________________________ Mickey Moose 2018.02.10 10:41 #1155 iCustom的数据是从哪里来的? novichok2018 2018.02.10 10:52 #1156 Igor Makanu:这样试试吧。 谢谢,试过了--即使经过一些调整,也没有关闭任何位置,所以编译器并没有发誓。 novichok2018 2018.02.10 11:01 #1157 STARIJ:我登录了论坛--我看到你在自言自语......。很难理解你从哪里开始,你在说什么。对于程序调试来说,使用Alert 而不是Print更方便--它可以在屏幕上一次性显示出来。这些Alert被放置在if条件被检查之前。另一种用铅笔调试的方法--按照程序应该执行的样子去看,并写下变量的值。当它发生变化时--划掉旧值并写上新值。这就是以前的做法。现在,MetaEditor有一个调试器,可以监控变量的值。最简单的结构必须通过编写脚本来单独检查谢谢你的建议,但对于我的情况来说,这些建议并不十分正确。只是为了澄清,下面是一个自定义关闭函数的代码 它不能正常工作--平仓 是在第一个开仓的条件下发生的。也就是说,如果先用条件1开了一个买入或卖出头寸,然后用条件2开了第二个头寸,那么平仓条件就会被忽略,第二个头寸也会用条件1平仓,尽管魔法数字不同。我在订单关闭后申请了中断,但解决方案一直是半信半疑:只有在同一类型的一个仓位被打开的情况下。例如,如果一个BOY头寸先被打开,还没有被关闭,而一个BAY头寸正在被打开和关闭,只要另一个BAY头寸打开和关闭(按照其条件),BAY头寸就不会看到任何关闭的条件。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。那么该怎么做呢? void ClosePoz() { RefreshRates(); double WPR0 = iWPR(NULL,0,bars,0); double WPR1 = iWPR(NULL,0,bars,1); bool rez = false; int total=OrdersTotal(); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(TimeCurrent()>OrderOpenTime()+300) { if(OrderMagicNumber==101 || OrderMagicNumber==102 || OrderMagicNumber==103 || OrderMagicNumber==104) { if(MathAbs(WPR1)<5) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); break; } if(OrderMagicNumber==111) { if(MathAbs(WPR1)<17) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); break; } if(OrderMagicNumber==222) { if(MathAbs(WPR1)>96) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); break; } if(OrderMagicNumber==201) { if(MathAbs(WPR1)>97) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); break; } if(OrderMagicNumber==202) { if(MathAbs(WPR1)>96) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); break; } } } break; } } Igor Makanu 2018.02.10 12:32 #1158 Mickey Moose: iCustom的数据是从哪里来的?从自定义指标的 缓冲区,实践中,例如在MA novichok2018。我在关闭订单后应用了断裂法,但解决方案是半途而废:只有在同一类型的一个头寸被打开的情况下。例如,如果一个BOY头寸被打开,还没有被关闭,而一个BAY头寸正在被打开和关闭,BAY头寸看不到任何关闭的条件,直到另一个BAY头寸被打开和关闭(在它自己的条件下)。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。那么该怎么做呢? 试着用 "继续 "代替 "中断"。 很奇怪,我的代码例子没有关闭任何东西,也许是关于价格规范化的问题。 novichok2018 2018.02.10 12:48 #1159 Igor Makanu: 试着用 "继续 "代替 "中断"。 被替换。受诅咒的错误138(重新报价)。然后我又给打破了,又是138。很奇怪,也许我以前没有注意到这一点。 Mickey Moose 2018.02.10 13:12 #1160 Igor Makanu:从自定义指标的 缓冲区,用MA进行练习,例如这是来自终端数据窗口中出现的字段吗? 1...109110111112113114115116117118119120121122123...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你。休息似乎有帮助。让我们看看接下来会发生什么。
不,它并没有真正的帮助。只有在开出一种仓位的情况下才有效。例如,如果一个卖出头寸被打开但尚未关闭,同时一个买入头寸被打开并关闭,那么卖出头寸就不能看到自己的关闭条件,直到另一个卖出头寸打开并关闭(根据自己的条件)。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。我试图用I.Kim的函数ExistPositions()来确定关闭BAY后是否存在未结头寸,但我不明白在哪里插入,在哪里放置Print来控制执行。任何线索。
不,它并没有真正的帮助。只有在开出相同类型的头寸时才有效。例如,如果首先打开一个卖出头寸,但尚未关闭,同时打开并关闭一个买入头寸,那么卖出头寸不会看到其关闭条件,直到另一个卖出头寸打开并关闭(根据其条件)。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。我试图用I.Kim的函数ExistPositions()来确定关闭BAY后是否存在未结头寸,但我不明白在哪里插入,在哪里放置Print来控制执行。你能给我一个提示吗?
难道没有人知道解决办法吗?我不知道。
我登录了论坛--我看到你在自言自语......。你的谈话在哪里开始,它是关于什么的--很难理解。要调试一个程序,使用Alert 而不是Print要方便得多--它一次就能显示在屏幕上。这些警报是在检查if条件之前放置的。另一种用铅笔调试的方法--按照程序应该执行的样子去看,并写下变量的值。当它发生变化时--划掉旧值并写上新值。这就是以前的做法。现在,MetaEditor有一个调试器,可以监控变量的值。最简单的结构应该通过编写脚本来单独检查
难道没有人知道解决办法吗?我不知道。
这样试试吧。
这样试试吧。
谢谢,试过了--即使经过一些调整,也没有关闭任何位置,所以编译器并没有发誓。
我登录了论坛--我看到你在自言自语......。很难理解你从哪里开始,你在说什么。对于程序调试来说,使用Alert 而不是Print更方便--它可以在屏幕上一次性显示出来。这些Alert被放置在if条件被检查之前。另一种用铅笔调试的方法--按照程序应该执行的样子去看,并写下变量的值。当它发生变化时--划掉旧值并写上新值。这就是以前的做法。现在,MetaEditor有一个调试器,可以监控变量的值。最简单的结构必须通过编写脚本来单独检查
谢谢你的建议,但对于我的情况来说,这些建议并不十分正确。只是为了澄清,下面是一个自定义关闭函数的代码
它不能正常工作--平仓 是在第一个开仓的条件下发生的。也就是说,如果先用条件1开了一个买入或卖出头寸,然后用条件2开了第二个头寸,那么平仓条件就会被忽略,第二个头寸也会用条件1平仓,尽管魔法数字不同。
我在订单关闭后申请了中断,但解决方案一直是半信半疑:只有在同一类型的一个仓位被打开的情况下。例如,如果一个BOY头寸先被打开,还没有被关闭,而一个BAY头寸正在被打开和关闭,只要另一个BAY头寸打开和关闭(按照其条件),BAY头寸就不会看到任何关闭的条件。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。那么该怎么做呢?
iCustom的数据是从哪里来的?
从自定义指标的 缓冲区,实践中,例如在MA
我在关闭订单后应用了断裂法,但解决方案是半途而废:只有在同一类型的一个头寸被打开的情况下。例如,如果一个BOY头寸被打开,还没有被关闭,而一个BAY头寸正在被打开和关闭,BAY头寸看不到任何关闭的条件,直到另一个BAY头寸被打开和关闭(在它自己的条件下)。而如果BAY再次开盘和收盘,它又一次错过了收盘条件。那么该怎么做呢?
试着用 "继续 "代替 "中断"。
很奇怪,我的代码例子没有关闭任何东西,也许是关于价格规范化的问题。
试着用 "继续 "代替 "中断"。
被替换。受诅咒的错误138(重新报价)。然后我又给打破了,又是138。很奇怪,也许我以前没有注意到这一点。
从自定义指标的 缓冲区,用MA进行练习,例如