Thanks GumRai !
I created here some code, its correct like this ? It looks for right magic number and if iBarShift for Orderopentime not zero is.
bool InHistory(int magic) { int i,hstTotal=OrdersHistoryTotal(); for(i=0;i<hstTotal;i++) { OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); if(OrderMagicNumber() == magic && iBarShift(0,0,OrderCloseTime()) !=0) { return(TRUE); // if shift not "0" than is true } } return(FALSE) }
and function call is like this
total=OrdersTotal(); if(total<1 && InHistory(int magic)==TRUE) { ..buy.. ..sell.. }
im not sure if syntax is ok
bool InHistory(int magic) { int i,hstTotal=OrdersHistoryTotal(); for(i=0;i<hstTotal;i++) { OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); if(OrderMagicNumber() == magic && iBarShift(0,0,OrderCloseTime()) !=0) { return(TRUE); // if shift not "0" than is true } } return(FALSE) }
- That won't work, it returns true if any order was closed an a previous bar, not if all orders were. The first argument to iBarShift must be a string (or NULL). Zero is wrong. No need to iBarShift, Just compare OCT to Time[0];
- InHistory is a bad name, you are checking if any orders closed this bar, not if any orders exist (in history.) Code becomes self documenting when you use meaningful variable names, like bool isLongEnabled. Long_Entry sounds like a trigger price or a ticket number and "if long entry" is an incomplete sentence.
- Alternative is a new bar approach.
static datetime time0OpenOrder=0; for(int iPos = OrdersTotal(); iPos >0;){ --iPos; if(OrderSelect(iPos, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic && OrderSymbol() == _Symbol && ... ){ Time0OpenOrder = Time[0]; // Remember open order this bar. // Trail(); } } bool wasTradeThisBar = Time0OpenOrder == Time[0]; :
Thx !
I trade current symbol and timeframe.
I think is better to check orderClosedTime for current bar, if order opened i cant open new because of this
total=OrdersTotal(); if(total<1) { ..... }
and I dont understand this part of your code:
&& ... ){ Time0OpenOrder = Time[0]; // Remember open order this bar. // Trail(); }
how it works together with the loop ? because no order was chosen
L0rd1:
I think is better to check orderClosedTime for current bar, if order opened i cant open new because of this
and I dont understand this part of your code: how it works together with the loop ? because no order was chosen
total=OrdersTotal(); if(total<1)
Not filtering by magic number makes EA incompatible with all others (including itself on other TFs,) and manual trading Symbol Doesn't equal Ordersymbol when another currency is added to another seperate chart . - MQL4 forum- Look again
static datetime time0OpenOrder=0; for(int iPos = OrdersTotal(); iPos >0;){ --iPos; if(OrderSelect(iPos, SELECT_BY_POS, MODE_TRADES) :
WHRoeder I dont understad logic in your new bar approach. What should be here in Trail() ?
// Trail();
Here is my firs version modyfied. But Im allways "true" also there is something wrong. I added
if (hstTotal !=0)
it helps to get true if I have no history at very begining.
bool WasTradeThisBar() { int i,hstTotal=OrdersHistoryTotal(); if (hstTotal !=0) { for(i=0;i<hstTotal;i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderCloseTime() < Time[0]) { return(TRUE); } } return(FALSE); } else { return(TRUE); } }
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello,
just for your information first : my Expert can have only one open position at the same time by this:
And if my algo enables to open position on current candle, than it can happen, that after reaching TakeProfit or StopLoss, the position will be opened again(because as I wrote before: algo enables).
Or with other words: expert should not open position, if on current candle, was some position closed before.
So please help me how can I check if on current candle, was some position closed before ?
Thanks !