初学者的问题 MQL4 MT4 MetaTrader 4 - 页 30 1...232425262728293031323334353637...261 新评论 Vitaly Muzichenko 2016.12.11 19:20 #291 spoiltboy:问候。我已经问过了,但还没有找到答案。请你用下面的条目告诉我原因如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。系统不断产生错误: OrderDelete函数的无效票据: OrderDelete错误4051根据参考书,它是函数参数的无效值虽然参数似乎是一样的。尽管如果你去掉这个条件,只留下OrderDelete(ticketD)。OrderDelete(ticketUP)。它成功地删除了(但我需要按条件删除)。我做错了什么?这里是整个事情。 因为它必须通过OrderSelect来选择,你的ticketD 值就会丢失,很可能在那里代替ticket,一些yukhnya,尝试打印,并进行比较。总的来说,这种写作风格是无稽之谈。 Andrei Sokolov 2016.12.11 19:44 #292 Vitaly Muzichenko: 因为必须通过OrderSelect来选择,所以你的ticketD 值会丢失,很可能有一些废话来代替ticket,试着打印出来比较一下。是不是因为删除函数是由值丢失的条件触发的?试着这样写。如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。OrderDelete(ticketUP)。对 "ticketD "的未来条件写出同样的错误,而"ticketUP " 的订单在每次打勾 时都被成功删除。 Andrei Sokolov 2016.12.11 19:45 #293 Vitaly Muzichenko: 而一般来说,这种写作风格是无稽之谈。 我才刚刚开始,欢迎评论。 Renat Akhtyamov 2016.12.11 19:52 #294 spoiltboy: 我才刚刚开始,欢迎大家提出意见。 用 "SRC "粘贴代码,这样你就可以看到它了 Andrei Sokolov 2016.12.11 20:09 #295 Renat Akhtyamov: 通过 "SRC "插入代码,以便你可以查看extern int pointsl=100, pointtp=100, MagicB=1111, MagicS=2222, bars=10; extern double lotB=0.1, lotS=0.1;double slB, tpB, slS, tpS; double x=0, z=0;void OnTick() {double maxpr1=-9999; double minpr1=9999;for(int shift1=0; shift1<bars; shift1++){double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);if (i>maxpr1){maxpr1=i;}}for(int shiftA1=0; shiftA1<bars; shiftA1++){double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);if (y<minpr1) {minpr1=y;}} if (BuyLimitCount()==0 && BuyCount()==0){ slB=NormalizeDouble(minpr1-pointsl*Point,5); tpB=NormalizeDouble(minpr1+pointtp*Point,5);int ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}if (SellLimitCount()==0 && SellCount() ==0){ slS=NormalizeDouble(maxpr1+pointsl*Point,5); tpS=NormalizeDouble(maxpr1-pointtp*Point,5);int ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}OrderDelete(ticketUP);double maxpr=-9999; double minpr=9999;for(int shift=0; shift<bars; shift++){double e=iHigh(Symbol(), PERIOD_CURRENT, shift);if (e>maxpr){maxpr=e;}}for(int shiftA=0; shiftA<bars; shiftA++){double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);if (r<minpr) {minpr=r;}} string a;if(bars==1)a="bar: ";else a= IntegerToString(bars,1) + " bar's: ";Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");}int BuyLimitCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicB){if(OrderType()==OP_BUYLIMIT) count++;}}}return(count);}int BuyCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicB){if(OrderType()==OP_BUY) count++;}}}return(count);}int SellLimitCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicS){if(OrderType()==OP_SELLLIMIT) count++;}}}return(count);}int SellCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicS){if(OrderType()==OP_SELL) count++;}}}return(count);} 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Questions from Beginners MQL4 Any questions from newcomers Vitaly Muzichenko 2016.12.11 20:26 #296 spoiltboy:是不是因为删除函数是由值丢失的条件触发的?试着这样写。如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。OrderDelete(ticketUP)。当 "ticketD "的条件出现时,它写下了同样的错误,而"ticketUP " 的订单在每一次打勾 时都被成功删除。 我们应该检查订单是否存在,如果有一张这样的票,我们就删除它;如果没有,我们什么也不做。发生的情况是,订单已经被删除,而你又不断地删除它 Andrei Sokolov 2016.12.11 20:43 #297 Vitaly Muzichenko: 我们应该检查订单是否存在,如果有一个这样的勾,我们将删除它,如果没有,我们将不做任何事情。现在的情况是,订单已经被删除了,而你又一直在删除它。在这个条目中,带有ticketUP 的订单首先被打开,然后在每个tick 上被删除,而tikcetD的订单,如果发生相应的条件,会产生一个删除错误。这是根据该杂志的说法。或者,也许我混淆了什么? Renat Akhtyamov 2016.12.11 20:45 #298 spoiltboy:但这两者的底线是否有可能是多余的?if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}OrderDelete(ticketUP);//лишняя?如果不是多余的,删除的条件在哪里?这是一个变种的代码,试图在每个tick 上删除一个挂单,因为我认为而票据的编号也不清楚。这就是会返回错误的原因。 Renat Akhtyamov 2016.12.11 20:49 #299 spoiltboy:在这个条目中,带有ticketUP 的订单首先被打开,然后在每个tick 上被删除,而tikcetD的订单,如果发生相应的条件,会产生一个删除错误。这是根据该杂志的说法。或者是我对某些事情感到困惑?嗯,正确。那么问题是什么呢? Andrei Sokolov 2016.12.11 21:09 #300 Renat Akhtyamov:嗯,这就对了。那么问题是什么呢?这是针对不同的订单。有条件删除一个,无条件删除另一个的功能。问题是,为什么在我的例子中,删除函数在没有条件的情况下能成功工作,而如果我把它放在一个条件中,当条件出现时就会出现错误。 1...232425262728293031323334353637...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
问候。我已经问过了,但还没有找到答案。请你用下面的条目告诉我原因
如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。
如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。
系统不断产生错误
: OrderDelete函数的无效票据
: OrderDelete错误4051
根据参考书,它是
函数参数的无效值
虽然参数似乎是一样的。
尽管如果你去掉这个条件,只留下
OrderDelete(ticketD)。
OrderDelete(ticketUP)。
它成功地删除了(但我需要按条件删除)。我做错了什么?这里是整个事情。
因为必须通过OrderSelect来选择,所以你的ticketD 值会丢失,很可能有一些废话来代替ticket,试着打印出来比较一下。
是不是因为删除函数是由值丢失的条件触发的?试着这样写。
如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。
OrderDelete(ticketUP)。
对 "ticketD "的未来条件写出同样的错误,而"ticketUP " 的订单在每次打勾 时都被成功删除。
而一般来说,这种写作风格是无稽之谈。
我才刚刚开始,欢迎大家提出意见。
通过 "SRC "插入代码,以便你可以查看
double slB, tpB, slS, tpS; double x=0, z=0;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
OrderDelete(ticketUP);
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}}return(count);}
int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}}return(count);}
int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
是不是因为删除函数是由值丢失的条件触发的?试着这样写。
如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。
OrderDelete(ticketUP)。
当 "ticketD "的条件出现时,它写下了同样的错误,而"ticketUP " 的订单在每一次打勾 时都被成功删除。
我们应该检查订单是否存在,如果有一个这样的勾,我们将删除它,如果没有,我们将不做任何事情。现在的情况是,订单已经被删除了,而你又一直在删除它。
在这个条目中,带有ticketUP 的订单首先被打开,然后在每个tick 上被删除,而tikcetD的订单,如果发生相应的条件,会产生一个删除错误。这是根据该杂志的说法。
或者,也许我混淆了什么?
但这两者的底线是否有可能是多余的?
OrderDelete(ticketUP);//лишняя?
如果不是多余的,删除的条件在哪里?
这是一个变种的代码,试图在每个tick 上删除一个挂单,因为我认为
而票据的编号也不清楚。
这就是会返回错误的原因。
在这个条目中,带有ticketUP 的订单首先被打开,然后在每个tick 上被删除,而tikcetD的订单,如果发生相应的条件,会产生一个删除错误。这是根据该杂志的说法。
或者是我对某些事情感到困惑?
嗯,正确。
那么问题是什么呢?
嗯,这就对了。
那么问题是什么呢?
这是针对不同的订单。有条件删除一个,无条件删除另一个的功能。
问题是,为什么在我的例子中,删除函数在没有条件的情况下能成功工作,而如果我把它放在一个条件中,当条件出现时就会出现错误。