[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 461 1...454455456457458459460461462463464465466467468...652 新评论 asasusa 2011.12.28 06:26 #4601 你能告诉我为什么在我的案例中,当所有条件都满足时,OrderSended 变量没有被设置为false? int start() { //---- int i; int i2; double MACD; double MACD2 = iCustom(Symbol(),0,"MACD",5,21,1,0,0); double MACD3 = iCustom(Symbol(),0,"MACD",5,21,1,0,1); double MyNull = 0.0; int bar1; int bar2; static bool OrderSended = false; if(MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0) // Вот эти условия { OrderSended = false; } Print("MACD2 = ",MACD2,"MACD3 = ",MACD3,"OrderSended = ",OrderSended); if(MACD2 < 0 && MACD3 > 0 && OrderSended == false) { if(OrderSend(Symbol(),OP_SELL,Lot,Ask,Slippage,Ask + StopLoss * Point,0,OrdersComment,MagicNumber,0,Red) > 0) { OrderSended = true; } } //---- return(0); } 它在日志中说MACD2和MACD3都大于零,但OrderSended仍然是真的,尽管当两个变量都大于零时它应该变成假的。 ilunga 2011.12.28 06:38 #4602 sss2019: 你能告诉我为什么在我的案例中,当所有条件都满足时,OrderSended变量没有被设置为false? 它在日志中说MACD2和MACD3都大于零,但OrderSended仍然是真的,尽管当两个变量都大于零时它应该变成假的。 if(MACD2 < 0 && MACD3 > 0 而在代码中,一个是大于零的,另一个是小于零的 asasusa 2011.12.28 06:41 #4603 ilunga:而在代码中,1大于0,1小于0。 所以它只是一个开仓 的信号,这就是条件大于零的地方。 if(MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0) // Вот эти условия { OrderSended = false; } ilunga 2011.12.28 07:01 #4604 sss2019: 所以它只是一个开仓的信号,这就是条件大于零的地方。 但在这里加括号还是个好主意,因为99%的条件都不是按照你希望的顺序计算的。 if((MACD2 > 0 && MACD3 > 0) || (MACD2 < 0 && MACD3 < 0)) // Вот эти условия asasusa 2011.12.28 07:19 #4605 告诉我这个设计是否可行 if(OrdersTotal(MagicNumber)) 也就是说,如果有特定魔法数字的权证,那么... ilunga 2011.12.28 07:30 #4606 sss2019: 告诉我这个设计是否可行 也就是说,如果有特定魔法数字的权证,那么... 只有当你自己写函数的时候 int OrdersTotal(int magic) asasusa 2011.12.28 08:16 #4607 告诉我,在执行一个函数后,例如for,这个函数是返回一个单一的值还是所有的值?例如,在一个循环中,一个值被分配 给了两个变量,循环将返回两个变量的值,还是只返回最后一个变量? DOCTORGAD 2011.12.28 08:56 #4608 因此,我对分形做了自己的事情--我写了自己的指标...嗯,对我来说,这更容易。问题是这样的--我有一个问题。 如何将箭头向后移动3条?:( 一小段代码... SetIndexStyle(0, DRAW_ARROW,0,1); SetIndexArrow(0,217); SetIndexBuffer(0, ExtMapBuffer1); SetIndexEmptyValue(0, 0.0); SetIndexStyle(1, DRAW_ARROW,0,1); SetIndexArrow(1, 218); SetIndexBuffer(1, ExtMapBuffer2); SetIndexEmptyValue(1, 0.0); IndicatorShortName("My_iFractals"); SetIndexLabel(0, "iFractalsUp"); SetIndexLabel(1, "iFractalsDn"); UPD Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ- SetIndexShift(0,-3); [ARCHIVE] Any rookie question, 请教老师解答.学生在这里先谢谢了. 求大神忙EMA144,169 288,338,带箭头金叉死叉。完善代码 ilunga 2011.12.28 09:02 #4609 sss2019: 但请告诉我,在一个函数被执行后,例如for,这个函数是返回一个单一的值还是所有的?例如,在一个循环中,一个值被分配给两个变量,循环将返回两个变量的值,还是只返回最后一个变量? 真是一团糟... 1) for不是一个函数,它是一个循环操作符 2) 函数只返回它被告知要返回的东西,并返回 3) 变量与循环有松散的关系。你可以在一个循环中改变多达10个。 [删除] 2011.12.28 09:28 #4610 伙计们,我搞不清楚是什么问题,不清楚订单关闭是怎么回事。 当它是这样的时候,它工作得很好。 double PriceBid = Bid; double PriceAsk = Ask; PrevPriceBid = PriceBid; PrevPriceAsk = PriceAsk; double be = GetWeightedBELevel(); if(be != -1) { double BuyLots = GetBuyLotsSum(); double SellLots = GetSellLotsSum(); double Swap = GetSwap(); //string str = be + " "; if(Swap < 0) { double diff = BuyLots - SellLots; //str = str + MarketInfo(Symbol(), MODE_TICKVALUE) * diff + " " + (-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point) + " "; be += ND(-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point + diff / MathAbs(diff) * 1 * Point); } //str = str + Swap + " " + be; //Comment(str); if((BuyLots > SellLots && ND(PrevPriceBid) < ND(be + (TakeProfitBuy) * Point) && ND(PriceBid) >= ND(be + (TakeProfitBuy) * Point)) || (BuyLots < SellLots && ND(PrevPriceAsk) > ND(be - (TakeProfitSell) * Point) && ND(PriceAsk) <= ND(be - (TakeProfitSell) * Point))) { CloseAllBuy(); CloseAllSell(); } } ObjectDelete("ZeroBuy"); if(BuyLots > SellLots) {double ZeroBuy = ND(be + TakeProfitBuy * Point); ObjectCreate("ZeroBuy",OBJ_ARROW,0,Time[0],ZeroBuy,0,0,0,0); ObjectSet ("ZeroBuy",OBJPROP_ARROWCODE,6); ObjectSet ("ZeroBuy",OBJPROP_COLOR, Olive);} ObjectDelete("ZeroSell"); if(BuyLots < SellLots) {double ZeroSell = ND(be - TakeProfitSell * Point); ObjectCreate("ZeroSell",OBJ_ARROW,0,Time[0],ZeroSell,0,0,0,0); ObjectSet ("ZeroSell",OBJPROP_ARROWCODE,6); ObjectSet ("ZeroSell",OBJPROP_COLOR, Olive);} //--------------------- 我把这段代码加在上面那段代码的下面。 //+X================================================================X+X+ int b,s; double price,price_b,price_s,lot,lot_s,lot_b,SLb,SLs,SLbTwo,SLsTwo; // for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderSymbol()==Symbol()) { price = OrderOpenPrice(); lot = OrderLots(); if (OrderType()==OP_BUY ) {price_b = price_b+price*lot; b++; lot_b=lot_b+lot;} if (OrderType()==OP_SELL) {price_s = price_s+price*lot; s++; lot_s=lot_s+lot;} } } } ObjectDelete("SLb"); if (b!=0) { SLb = (price_b/lot_b)+TakeProfitBuy * Point; ObjectCreate("SLb",OBJ_ARROW,0,Time[0],SLb,0,0,0,0); ObjectSet ("SLb",OBJPROP_ARROWCODE,6); ObjectSet ("SLb",OBJPROP_COLOR, Navy); } ObjectDelete("SLbTwo"); if (b!=0) { SLbTwo = (price_b/lot_b)+TakeProfitBuyTwo * Point; ObjectCreate("SLbTwo",OBJ_ARROW,0,Time[0],SLbTwo,0,0,0,0); ObjectSet ("SLbTwo",OBJPROP_ARROWCODE,6); ObjectSet ("SLbTwo",OBJPROP_COLOR, Navy); } ObjectDelete("SLs"); if (s!=0) { SLs = (price_s/lot_s)-TakeProfitSell * Point; ObjectCreate("SLs",OBJ_ARROW,0,Time[0],SLs,0,0,0,0); ObjectSet ("SLs",OBJPROP_ARROWCODE,6); ObjectSet ("SLs",OBJPROP_COLOR, Maroon); } ObjectDelete("SLsTwo"); if (s!=0) { SLsTwo = (price_s/lot_s)-TakeProfitSellTwo * Point; ObjectCreate("SLsTwo",OBJ_ARROW,0,Time[0],SLsTwo,0,0,0,0); ObjectSet ("SLsTwo",OBJPROP_ARROWCODE,6); ObjectSet ("SLsTwo",OBJPROP_COLOR, Maroon); } if ((totalBuy > 1) && (SLb > Ask) && (SLbTwo < Ask) && (DnM15 > Bid)) // { CloseAllBuy(); } if ((totalSell > 1) && (SLs < Bid) && (SLsTwo > Bid) && (UpM15 < Ask)) // { CloseAllSell(); } //--------------------------------- 后,第一个函数不起作用,不能关闭订单。我在日志中没有看到任何错误。我在那里犯了一个错误,为什么? 我已经把所有的 "对象 "移到了这两个功能区,它正在工作。 1...454455456457458459460461462463464465466467468...652 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能告诉我为什么在我的案例中,当所有条件都满足时,OrderSended 变量没有被设置为false?
它在日志中说MACD2和MACD3都大于零,但OrderSended仍然是真的,尽管当两个变量都大于零时它应该变成假的。
你能告诉我为什么在我的案例中,当所有条件都满足时,OrderSended变量没有被设置为false?
它在日志中说MACD2和MACD3都大于零,但OrderSended仍然是真的,尽管当两个变量都大于零时它应该变成假的。
而在代码中,一个是大于零的,另一个是小于零的
而在代码中,1大于0,1小于0。
所以它只是一个开仓 的信号,这就是条件大于零的地方。
所以它只是一个开仓的信号,这就是条件大于零的地方。
但在这里加括号还是个好主意,因为99%的条件都不是按照你希望的顺序计算的。
告诉我这个设计是否可行
也就是说,如果有特定魔法数字的权证,那么...
告诉我这个设计是否可行
也就是说,如果有特定魔法数字的权证,那么...
int OrdersTotal(int magic)
因此,我对分形做了自己的事情--我写了自己的指标...嗯,对我来说,这更容易。问题是这样的--我有一个问题。
如何将箭头向后移动3条?:(
一小段代码...
SetIndexStyle(0, DRAW_ARROW,0,1);
SetIndexArrow(0,217);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW,0,1);
SetIndexArrow(1, 218);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexEmptyValue(1, 0.0);
IndicatorShortName("My_iFractals");
SetIndexLabel(0, "iFractalsUp");
SetIndexLabel(1, "iFractalsDn");
UPD
Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ- SetIndexShift(0,-3);
但请告诉我,在一个函数被执行后,例如for,这个函数是返回一个单一的值还是所有的?例如,在一个循环中,一个值被分配给两个变量,循环将返回两个变量的值,还是只返回最后一个变量?
真是一团糟...
1) for不是一个函数,它是一个循环操作符
2) 函数只返回它被告知要返回的东西,并返回
3) 变量与循环有松散的关系。你可以在一个循环中改变多达10个。
伙计们,我搞不清楚是什么问题,不清楚订单关闭是怎么回事。
当它是这样的时候,它工作得很好。
我把这段代码加在上面那段代码的下面。
后,第一个函数不起作用,不能关闭订单。我在日志中没有看到任何错误。我在那里犯了一个错误,为什么?
我已经把所有的 "对象 "移到了这两个功能区,它正在工作。