bool CountHedge() { bool Hedge=true; bool BuyLoop=true; bool SellLoop=true; for(int p=OrdersTotal()-1;p>=0;p--) { if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY||OrderType()==OP_SELL) Hedge=false; } } return(Hedge); }
Please dont it like this:
bool CountHedge() { bool BuyLoop=true; bool SellLoop=true; for(int p=OrdersTotal()-1;p>=0;p--) { if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY||OrderType()==OP_SELL) return(false); } } return (true); } //------------------------------------------------ if(CountHedge()==false){ // then do this..... }
I want to loop through hedge orders but with this function it's not the correct way. If you know the correct way to loop or how to assemble hedge/hedging again and again please assist.
I'm not sure about the this function:
bool CountHedge() { bool BuyLoop=true; bool SellLoop=true; for(int p=OrdersTotal()-1;p>=0;p--) { if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY||OrderType()==OP_SELL) return(false); } } return (true); } //------------------------------------------------ if(CountHedge()==false){ // then do this..... }
I've changed it but it doesn't loop my hedge orders
bool CountHedge() { for(int p=OrdersTotal()-1;p>=0;p--) { if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY||OrderType()==OP_SELL) return(false); } } return(true); }
I've added these no looping my hedge orders at all.
void BuyHedge() { for(int c=OrdersTotal()-1;c>=0;c--) { if(OrderSelect(BuyTrade,SELECT_BY_TICKET)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(CountHedge()==false&&OrderOpenPrice()-Bid>4*Pips()) { int HedgeOpenSell=OrderSend(Symbol(),OP_SELL,0.02,Bid,3,0,0,"2023",MagicNumber,0,clrSkyBlue); } } } } void SellHedge() { for(int e=OrdersTotal()-1;e>=0;e--) { if(OrderSelect(SellTrade,SELECT_BY_TICKET)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(CountHedge()==false&&Ask-OrderOpenPrice()>4*Pips()) { int HedgeOpenBuy=OrderSend(Symbol(),OP_BUY,0.02,Ask,3,0,0,"2023",MagicNumber,0,clrMaroon); } } } }
I removed the bool function and I used the count trades function to count the hedge trades, the hedge trades don't loop.
void BuyHedge() { if(OrderSelect(BuyTrade,SELECT_BY_TICKET)) { if(OrderType()==OP_BUY) { if(OrderOpenPrice()-Bid>4*Pips()) { HedgeOpenSell=OrderSend(Symbol(),OP_SELL,0.02,Bid,3,0,0,"2023",MagicNumber,0,clrSkyBlue); } } } } void SellHedge() { if(OrderSelect(SellTrade,SELECT_BY_TICKET)) { if(OrderType()==OP_SELL) { if(Ask-OrderOpenPrice()>4*Pips()) { HedgeOpenBuy=OrderSend(Symbol(),OP_BUY,0.02,Ask,3,0,0,"2023",MagicNumber,0,clrMaroon); } } } }
int total = OrdersTotal() - 1; for(int i = total; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_TICKET)) switch(OrderType()) { case OP_BUY : ResetLastError(); if(OrderOpenPrice() - Bid > 4 * Pips()) if(!OrderSend(Symbol(), OP_SELL, 0.02, Bid, 3, 0, 0, "2023", MagicNumber, 0, clrSkyBlue)) Print(_LastError); break; case OP_SELL : ResetLastError(); if(OrderOpenPrice() - Bid > 4 * Pips()) if(!OrderSend(Symbol(), OP_SELL, 0.02, Bid, 3, 0, 0, "2023", MagicNumber, 0, clrSkyBlue)) Print(_LastError); break; default: break; } }
When selecting the loop it doesn't open my hedge and still no looping through my hedge orders. Ill Post the full code:
#property strict int MagicNumber=834856; double Filter=0; int BuyTrade=0; int SellTrade=0; int HedgeOpenSell=0; int HedgeOpenBuy=0; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int CountSymbol(string Pair) { int NoSymbol=0; for(int a=OrdersTotal()-1;a>=0;a--) { if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Pair) NoSymbol++; } return(NoSymbol); } int CountTrades() { int Count=0; for(int b=OrdersTotal()-1;b>=0;b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_BUY||OrderType()==OP_SELL) Count++; } return(Count); } double Pips() { double PipPoint=0; double Digit=MarketInfo(Symbol(),MODE_DIGITS); if(Digit==1||Digit==3||Digit==5){PipPoint=Point*10;} return(PipPoint); } void Buy() { double open=iOpen(Symbol(),0,0); double Range=MathAbs(open-Bid); datetime Expire=TimeCurrent()+(60*15); int TimeFrame=Period(); switch(TimeFrame) { case PERIOD_M1:Filter=7*Pips();break;//5//10 case PERIOD_M5:Filter=8*Pips();break;//10 case PERIOD_M15:Filter=10*Pips();break;//8 case PERIOD_M30:Filter=10*Pips();break;//15 case PERIOD_H1:Filter=15*Pips();break;//20//25 } double MAClose=iMA(Symbol(),0,7,0,MODE_LWMA,PRICE_CLOSE,0); if(Range>Filter&&Open[0]>MAClose&&Bid>MAClose) { BuyTrade=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"2023",MagicNumber,0,clrBlue); } } void BuyHedge() { for(int v=OrdersTotal()-1;v>=0;v--) { if(OrderSelect(v,SELECT_BY_TICKET)) { if(OrderType()==OP_BUY) { if(OrderOpenPrice()-Bid>4*Pips()) { HedgeOpenSell=OrderSend(Symbol(),OP_SELL,0.02,Bid,3,0,0,"2023",MagicNumber,0,clrSkyBlue); } } } } } void Sell() { double open=iOpen(Symbol(),0,0); double Range=MathAbs(open-Bid); datetime Expire=TimeCurrent()+(60*15); int TimeFrame=Period(); switch(TimeFrame) { case PERIOD_M1:Filter=7*Pips();break;//5//10 case PERIOD_M5:Filter=8*Pips();break;//10 case PERIOD_M15:Filter=10*Pips();break;//8 case PERIOD_M30:Filter=10*Pips();break;//15 case PERIOD_H1:Filter=15*Pips();break;//20//25 } double MAClose=iMA(Symbol(),0,7,0,MODE_LWMA,PRICE_CLOSE,0); if(Range>Filter&&Open[0]<MAClose&&Bid<MAClose) { SellTrade=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"2023",MagicNumber,0,clrRed); } } void SellHedge() { for(int v=OrdersTotal()-1;v>=0;v--) { if(OrderSelect(v,SELECT_BY_TICKET)) { if(OrderType()==OP_SELL) { if(Ask-OrderOpenPrice()>4*Pips()) { HedgeOpenBuy=OrderSend(Symbol(),OP_BUY,0.02,Ask,3,0,0,"2023",MagicNumber,0,clrMaroon); } } } } } void OnTick() { if(CountSymbol(Symbol())<2) { if(CountTrades()<1){Buy();} else if(CountTrades()<2){BuyHedge();} if(CountTrades()<1){Sell();} else if(CountTrades()<2){SellHedge();} } }
When selecting the loop it doesn't open my hedge and still no looping through my hedge orders. Ill Post the full code:
My code was just an example how to loop through orders. I don't check your logic or if parameters are correct. You should implement error handling in your code, debug and find what specific error / problem you have and then somebody will be able to help you.
I used the following function to loop the hedges orders but there are so many "infinite", if only I could Avoid opening so many and only 1 at a time.
int CountTrades2() { int Count=0; bool BuyNow=true; bool SellNow=true; bool Now=false; for(int b=OrdersTotal()-1;b>=0;b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY||OrderType()==OP_SELL)Now=false; } } return(Count); }
I had to add a few functions and integer for the trades:
int Direction=0;//Buy int Direction2=0;//Sell bool CountHedge() { bool Hedge=true; bool BuyLoop=true; bool SellLoop=true; for(int p=OrdersTotal()-1;p>=0;p--) { if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY||OrderType()==OP_SELL) Hedge=false; } } return(Hedge); }
if(Range>Filter&&Open[0]>MAClose&&Bid>MAClose) { if(Direction!=1) { Direction=1; BuyTrade=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"2023",MagicNumber,0,clrBlue); } } for(int c=OrdersTotal()-1;c>=0;c--) { if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderOpenPrice()-Bid>4*Pips()) { if(Direction2!=-1) { Direction2=-1; int HedgeOpenSell=OrderSend(Symbol(),OP_SELL,0.02,Bid,3,0,0,"2023",MagicNumber,0,clrSkyBlue); } } } } void OnTick() { if(CountTrades()<1){Buy();} else if(CountHedge()<2){BuyHedge();} }
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I want to loop through hedge orders but with this function it's not the correct way. If you know the correct way to loop or how to assemble hedge/hedging again and again please assist.
I'm not sure about the this function: