<br / translate="no"> there is a limit to the number of charts - 99. so there is also a limit to the number of experts
Well, no. Not my case. Firstly, I have less than 99 Expert Advisors. Secondly, I'm not planning to work for a long time - restart and alert within an hour.
And hot on the heels of that. Another expert. What kind of indicator it is, doesn't matter. The important thing is that I found two trades opened by it in the same currency. The Expert Advisor logic does not allow for this. Logically (if you look at the charts), the previous trade should have closed. And it did not. There is nothing in the logs. The same symptom?
The Expert Advisor I gave above is a better idea. Everything is simpler there in terms of code. And there are no indicators.
What can I say? Try my Expert Advisor, the one I cited first. It gives one trade per hour. Usually the second trade leads to an error message. If there is no error in 24 hours, I don't even know...
Hung up, should do something in 10 minutes apparently. I hope he doesn't break my other EAs. Yo000, he has already opened an order, you promised every hour and it hasn't been a minute.
Hung up, should do something in 10 minutes apparently. I hope he doesn't break my other EAs. Yo000, he has already opened an order, you promised every hour and it hasn't been a minute.
The first time it opens an order at once (see check for conditions at the beginning of a bar). Then, if you don't touch it, at the beginning of the next hour.
Well, the circus continues. Hung up Alert on the second expert. At the beginning of the hour two curves were expected to cross and he honestly tried to open an order. Instead it got error number 6. Gentlemen developers?
Rosh, listen, thanks for your help, of course. But I was wondering, my EA tracks "its" trades by magic number. If your approach is the same (each EA has its own opinion), then I'd like to make sure that it does not close other people's orders. If your approach is the same (each EA has its own mn), then you have to make sure that this EA's mn does not overlap with yours.
I'm writing floods because reading these kinds of posts makes me very sad and need to say something, especially since I've already had a couple of drinks...
Very much I hope that Quark in his expert screwed up. Can't check it myself yet, writing from a PDA away from the computer. But if it's MT, then f..., however, hussars silence!
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
Well, no. Not my case. Firstly, I have less than 99 Expert Advisors. Secondly, I'm not planning to work for a long time - restart and alert within an hour.
So, can you take a look at the expert?
The Expert Advisor I gave above is a better idea. Everything is simpler there in terms of code. And there are no indicators.
Quark.
// MT4 tested #include "mylib.mq4" extern double dBuyLevel; extern double dSellLevel; extern double dStopLoss; extern double dTrailingStop; extern double dTakeProfit; extern int nNocInterval; extern double dNocRange; extern int nNocMa; // ------ datetime timePrev = 0; int nSlip = 5; double dTp = 0; double dProfit = 0; double dInitAmount = 1000; double dLotSize = 0.1; int nNumOfExperts = 5; int nMagic = 0; bool bReportDone = false; bool bUseMm = false; ////////////////// int init () { if(Symbol() == "EURUSD" && Period() == 60) { if(!IsTesting()) { // (0.21,0.94,240,40,0.02,3,240), (0.19,0.82,200,30,0.025,5,200) dBuyLevel = 0.19; // (0.21,0.83,160,27,0.026,4,260), (), () dSellLevel = 0.82; dStopLoss = 230 * Point; dTrailingStop = dStopLoss; dTakeProfit = 0; nNocInterval = 28; dNocRange = 0.024; nNocMa = 6; // Max: 0.19,0.82,230,230,0,28,0.024,6; dd: 653, balance: 6900 } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/dStopLoss; } // bBuy = false; // bSell = false; nMagic = 10; } else if(Symbol() == "EURJPY" && Period() == 60) { if(!IsTesting()) { // (0.17,0.96,120,40,0.01,13) dBuyLevel = 0.17; // balance: 3650, dd: 539 dSellLevel = 0.96; dStopLoss = 120 * Point; dTrailingStop = dStopLoss; dTakeProfit = 0; nNocInterval = 40; dNocRange = 0.01; nNocMa = 13; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss; } // bBuy = false; // bSell = false; nMagic = 11; } else if(Symbol() == "USDCHF" && Period() == 60) { if(!IsTesting()) { // (0.19,0.82,200,35,0.01,5) dBuyLevel = 0.05; // balance: 6200, dd: 763 dSellLevel = 0.92; // (0.05,092,250,30,0.025,3) dStopLoss = 250 * Point; // balance: 3600, dd: 500 dTrailingStop = dStopLoss; dTakeProfit = 0; // (0.07,0.92, 250,40,0.025,9) // balance: 3500, dd: 362 nNocInterval = 30; dNocRange = 0.025; nNocMa = 3; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss; } // bBuy = false; // bSell = false; nMagic = 12; } else if(Symbol() == "GBPUSD" && Period() == 60) { if(!IsTesting()) { // (0.21,0.84,250,30,0.01,11) // BUY ONLY: retest!!! dBuyLevel = 0.15; // balance: 6588, dd: 1169 dSellLevel = 0.84; // (0.15,0.86,250,20,0.025,9) // BUY ONLY: retest!!! dStopLoss = 200 * Point; // balance: 3337, dd: 552 dTrailingStop = dStopLoss; dTakeProfit = 0; // (0.15,0.84,200,20,0.025,7) // buy and sell // balance: 4171, dd: 850 nNocInterval = 20; dNocRange = 0.025; // (0.15,0.88,200,20,0.025,9) // buy only? retest nNocMa = 9; // balance: 2895, dd: 424 } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss; } // bBuy = false; // bSell = false; nMagic = 13; } else if(Symbol() == "GBPCHF" && Period() == 60) { if(!IsTesting()) { // (0.11,0.86,280,20,0.025,7) dBuyLevel = 0.11; // balance: 5564, dd: 777 dSellLevel = 0.86; // (0.15,0.84,280,25,0.025,11) dStopLoss = 280 * Point; // balance: 4275, dd: 685 dTrailingStop = dStopLoss; dTakeProfit = 0; // (0.11,0.86,280,25,0.025,9) // balance: 4159, dd: 456 nNocInterval = 25; dNocRange = 0.025; nNocMa = 9; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss; } // bBuy = false; // bSell = false; nMagic = 14; } else if(Symbol() == "USDJPY" && Period() == 60) { if(!IsTesting()) { // (0.07,0.82,280,25,0.025,3) dBuyLevel = 0.07; // balance: 3764, dd: 527 dSellLevel = 0.82; // (0.07,0.8,160,30,0.025,3) dStopLoss = 280 * Point; // balance: 3297, dd: 491 dTrailingStop = dStopLoss; dTakeProfit = 0; // (0.09, 0.94,280,15,0.025,3) // balance: 2703, dd: 541 nNocInterval = 25; dNocRange = 0.025; nNocMa = 3; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss; } // bBuy = false; // bSell = false; nMagic = 15; } else if(Symbol() == "AUDUSD" && Period() == 60) { if(!IsTesting()) { // (0.14,0.9,280,40,0.015,11) dBuyLevel = 0.14; // balance: 3834, dd: 468 dSellLevel = 0.9; // (0.13,0.92,240,35,0.01,13) dStopLoss = 280 * Point; // balance: 3463, dd: 303 dTrailingStop = dStopLoss; dTakeProfit = 0; nNocInterval = 40; dNocRange = 0.015; nNocMa = 11; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss; } // bBuy = false; // bSell = false; nMagic = 16; } else if(Symbol() == "EURGBP" && Period() == 60) { if(!IsTesting()) { // (0.09,0.84,200,35,0.01,3) dBuyLevel = 0.21; // balance: 2517, dd: 486 dSellLevel = 0.82; // (0.21,0.82,280,40,0.015,3) dStopLoss = 280 * Point; // balance: 2726, dd: 324 dTrailingStop = dStopLoss; dTakeProfit = 0; // (0.21,0.84,160,15,0.01,3) // balance: 2255, dd: 314 nNocInterval = 40; dNocRange = 0.015; nNocMa = 3; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = dStopLoss; } // bBuy = false; // bSell = false; nMagic = 17; } else if(Symbol() == "USDCAD" && Period() == 60) { if(!IsTesting()) { // (0.05,0.88,280,25,0.015,7) dBuyLevel = 0.07; // balance: 3536, dd: 235 dSellLevel = 0.86; // (0.07,0.86,280,15,0.015,3) dStopLoss = 280 * Point; // balance: 3414, dd: 380 dTrailingStop = dStopLoss; dTakeProfit = 0; nNocInterval = 15; dNocRange = 0.015; nNocMa = 3; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = dStopLoss; } // bBuy = false; // bSell = false; nMagic = 18; } else if(Symbol() == "EURCHF" && Period() == 60) { if(!IsTesting()) { // (0.17,0.84,280,15,0.01,5) dBuyLevel = 0.17; // balance: 1471, dd: 221 dSellLevel = 0.84; // (0.17,0.88,200,15,0.01,5) dStopLoss = 200 * Point; // balance: 1433, dd: 135 dTrailingStop = dStopLoss; dTakeProfit = 0; nNocInterval = 15; dNocRange = 0.01; nNocMa = 5; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = dStopLoss; } // bBuy = false; // bSell = false; nMagic = 19; } else if(Symbol() == "EURAUD" && Period() == 60) { if(!IsTesting()) { // (0.05,0.8,240,30,0.025,9) dBuyLevel = 0.05; // balance: , dd: dSellLevel = 0.8; // () dStopLoss = 240 * Point; // balance: , dd: dTrailingStop = dStopLoss; dTakeProfit = 0; nNocInterval = 30; dNocRange = 0.025; nNocMa = 9; } else { dStopLoss = dStopLoss * Point; if(dTakeProfit == 700) dTakeProfit = 0; dTakeProfit = dTakeProfit * Point; dTrailingStop = dStopLoss; } // bBuy = false; // bSell = false; nMagic = 20; } return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < nNocInterval + nNocMa) return(0); Report("Noc_1", nMagic, bReportDone); // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0]) bIsBarEnd = true; timePrev = Time[0]; if(!bIsBarEnd) return(0); // ------ double dNoc = iCustom(NULL, 0, "_Noc_Ind", nNocInterval, dNocRange, nNocMa, 0, 1); double dNocPrev = iCustom(NULL, 0, "_Noc_Ind", nNocInterval, dNocRange, nNocMa, 0, 2); int nNumOfOpenedOrders = 0; for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(OrderType() <= OP_SELL) nNumOfOpenedOrders++; } } if(bUseMm == true) { dProfit = 0; for(nCnt = 0; nCnt < HistoryTotal(); nCnt++) { OrderSelect(nCnt, SELECT_BY_POS, MODE_HISTORY); if(OrderMagicNumber() == nMagic && OrderType() <= OP_SELL) { dProfit += OrderProfit(); } } } if(nNumOfOpenedOrders == 0) { if(dNocPrev <= dBuyLevel && dNoc >= dBuyLevel) Buy(); else if(dNocPrev >= dSellLevel && dNoc <= dSellLevel) Sell(); return(0); } else { for(nCnt = 0; nCnt < OrdersTotal(); nCnt++) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(OrderType() == OP_BUY) { if(dNocPrev >= dSellLevel && dNoc <= dSellLevel) { OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); Sell(); return(0); } } else if(OrderType() == OP_SELL) { if(dNocPrev <= dBuyLevel && dNoc >= dBuyLevel) { OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); Buy(); return(0); } } } } } // ------ for(nCnt = 0; nCnt < OrdersTotal(); nCnt++) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic && OrderSymbol() == Symbol()) { if(OrderType() == OP_BUY)// && Bid - OrderOpenPrice() > dStopLoss) { if(OrderStopLoss() < Bid - dTrailingStop - 5 * Point) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - dTrailingStop, OrderTakeProfit(), 0, Aqua); return(0); } } if(OrderType() == OP_SELL)// && OrderOpenPrice() - Ask > dStopLoss) { if(OrderStopLoss() > Ask + dTrailingStop + 5 * Point)// || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + dTrailingStop, OrderTakeProfit(), 0, OrangeRed); return(0); } } } } return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); if(dTakeProfit == 0) dTp = 0; else dTp = Bid - dTakeProfit; OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, dTp, "Noc_1", nMagic, 0, OrangeRed); } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); if(dTakeProfit == 0) dTp = 0; else dTp = Ask + dTakeProfit; OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, dTp, "Noc_1", nMagic, 0, Aqua); } // ------ double GetLotSize() { double dLot = 0.1; if(bUseMm) { dLot = (0.1 * dInitAmount + 0.2 * dProfit) / 1000; if(dLot * 2 * dInitAmount > AccountFreeMargin() / nNumOfExperts) dLot = AccountFreeMargin() / (2 * dInitAmount * nNumOfExperts); dLot = MathFloor(dLot * 10) / 10; if(dLot < 0.1) dLot = 0.1; } return(dLot); } // ------ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point, "sell",ExpertMagicNumber,0,Red); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); }Logs are clean, orders are placed.
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point, "sell",ExpertMagicNumber,0,Red); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); }Logs are clean, orders are placed.
What can I say? Try my Expert Advisor, the one I cited first. It gives one trade per hour. Usually the second trade leads to an error message. If there is no error in 24 hours, I don't even know...
The first time it opens an order at once (see check for conditions at the beginning of a bar). Then, if you don't touch it, at the beginning of the next hour.
Very much I hope that Quark in his expert screwed up. Can't check it myself yet, writing from a PDA away from the computer. But if it's MT, then f..., however, hussars silence!