//Try comparing the Print-Out values bool ExistPositions(string Name_Expert) { int count=0; for (int j=0; j<OrdersTotal(); j++) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)){ Print("==================================="); Print("Name_Expert=",Name_Expert); Print("OrderComment()=",OrderComment()); Print("OrderSymbol()=",OrderSymbol()); Print("Symbol()=",Symbol()); if (OrderSymbol() == Symbol() && OrderComment()==Name_Expert) return (TRUE); } } return (FALSE); }
It prints out as expected and the logic has worked soundly for years pre-build 600.
In my order open logic i use the following:
if(!ExistPositions("strategyName")){OrderSend...
For some reason, even though Order already exists and the comment is written correctly, the Ordersend is firing.
Could this be weirdness with the ordercomment string now being unicode? Something else?
B.T.W.
WHRoeder: Said
Not a good idea, brokers can change comments, including complete replacement. Instead I'd use a range of magic numbers.
It prints out as expected and the logic has worked soundly for years pre-build 600.
In my order open logic i use the following:
For some reason, even though Order already exists and the comment is written correctly, the Ordersend is firing.
Could this be weirdness with the ordercomment string now being unicode? Something else?
Thats what I'm trying to find out. I'm starting with the simple cases and working my way up.
I'll try creating a simple case EA and see if I can duplicate the error. Your code is too incomplete for that.
B.T.W.
Again, this has worked reliably with my broker for years, pre-b600. I'm trying to figure out why its not working all of the sudden.
I can see the comments haven't been changed by my broker or anyone else. However, multiple orders are now being opened with the same ordercomment.
I cannot re-create the duplication of orders. Are you sure it isn't something else within your code?
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void start(){ if(ExistPositions("TestingA")) return; int iTicket=OrderSend( Symbol(), //string symbol, // symbol OP_SELL, //int cmd, // operation 0.1, //double volume, // volume Bid, //double price, // price 0, //int slippage, // slippage 0, //double stoploss, // stop loss 0, //double takeprofit, // take profit "TestingA", //string comment=NULL, // comment 7, //int magic=0, // magic number 0, //datetime expiration=0, // pending order expiration clrRed //color arrow_color=clrNONE // color ); if(iTicket<=0) Print("OrderSend_Failed***"); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bool ExistPositions(string Name_Expert) { int count=0; for (int j=0; j<OrdersTotal(); j++) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)){ Print("==================================="); Print("Name_Expert=",Name_Expert); Print("OrderComment()=",OrderComment()); Print("OrderSymbol()=",OrderSymbol()); Print("Symbol()=",Symbol()); if (OrderSymbol() == Symbol() && OrderComment()==Name_Expert) return (TRUE); } } return (FALSE); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I appreciate the detailed response and investigation. It is possible that some conditional OR logic is evaluated differently now. I do notice that there are several warnings that appear when i compile with the new build that I never saw pre-b600.
I'm going to revert back to a demo account, clean up all the warnings, and forward test a few months before going live again. After I identify root cause I'll circle back.
I appreciate the detailed response and investigation. It is possible that some conditional OR logic is evaluated differently now.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Code that used to work just fine now no longer works as expected.
For example, the following function no longer works:
I run multiple strategies in a single EA and use the ordercomments to distinguish between which strategy is being executed.
The code above used to check if an order already existed based on ordercomments. It no longer works correctly with build 600 which is resulting in multiple orders flooding into my account.
Why does this no longer work?