//+------------------------------------------------------------------+ //| EuroBull.mq4 | //| Zonker | //| http://www.greenpeace.org | //+------------------------------------------------------------------+ // //The EuroBull, tends to favour markets that trend in favour of Euro:). //Designed to run on EURUSD. #property copyright "Zonker" #property link "http://www.greenpeace.org" #define MAXLOTSIZE 5 #define MAXPOS 3 #define SLIP 1 #define SL 100 int myMagic = 88888888;//very lucky, yes? //+------------------------------------------------------------------- int init() { return(0); } int deinit() { return(0); } //+------------------------------------------------------------------- int start() { double sma; bool BuyEuros = false; int LotsToBuy,Lots; int i; if(!Happyness()) return(0); sma = iMA(NULL,PERIOD_D1,10,0,MODE_SMA,PRICE_CLOSE,0);//Must respect the sma. if(sma > Ask) //Euros going cheap! BUY! BuyEuros = true; if(sma < Ask) //Momentum in our favour! BUY!! BuyEuros = true; if(sma == Ask) //BuY EUROS NOW!!!, BUY MORE!!! BuyEuros = true; if(OrdersTotal()>0) { //We have Euros! Do we need any more? Lots=0; for(i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); Lots += OrderLots(); } if(AccountEquity() > (Lots*2000 + MathMin(5,(Lots+1)/2)*2000 + 100) && Lots < MAXLOTSIZE*MAXPOS && Lots >= 1.0) CloseOrders(OP_BUY); //Sell up and buy more Euros else return(0); } if(BuyEuros) { //We don't have any Euros?!!? How many Euros should we buy? LotsToBuy = AccountBalance()/2000; if(LotsToBuy == 0 && AccountBalance() > 100) { //Ok, getting desparate.. double tinyLots = NormalizeDouble(AccountBalance()/2000.0-0.1,1); if(tinyLots>0) MyOrderSend(Symbol(),OP_BUY,tinyLots,Ask,SLIP,Ask-SL*Point,Ask+SL*Point,"",myMagic,0,Blue); return(0); } for(i=0;i<MAXPOS;i++) { if(LotsToBuy>MAXLOTSIZE) Lots = MAXLOTSIZE; else Lots = LotsToBuy; MyOrderSend(Symbol(),OP_BUY,Lots,Ask,SLIP,Ask-SL*Point,0,"",myMagic,0,Blue); LotsToBuy -= MAXLOTSIZE; if(LotsToBuy <= 0) break; } } return(0); } //+------------------------------------------------------------------- bool Happyness() //Are we in the right mood to trade? { if(!IsConnected()) { Print("Yo man, we are not connected!"); return(false); } if(!IsExpertEnabled()) { Print("Hey, we are not enabled!"); return(false); } if(AccountEquity() > 98800) //Stop at 888%, lets not be greedy. { if(OrdersTotal() > 0) CloseOrders(OP_BUY); return(false); } if(AccountBalance() < 200) return(false); //Ok, we lost. return(true); } //+------------------------------------------------------------------- int CloseOrders(int cmd) { int i; double price; if(cmd == OP_SELL) price = Ask; else price = Bid; for(i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderType() == cmd) MyOrderClose(OrderTicket(),OrderLots(),price,SLIP,CLR_NONE); } } //+------------------------------------------------------------------- int MyOrderSend(string sym, int cmd, double vol, double price, int slip, double sl, double tp, string comment="", int magic=0, datetime exp=0, color cl=CLR_NONE) { int err; bool isAsk=false; if(price == Ask) isAsk = true; for(int z=0;z<10;z++) { if(OrderSend(sym,cmd,vol,price,slip,sl,tp,comment,magic,exp,cl)<0) { err = GetLastError(); Print("OrderSend failed, Error: ", err); if(err>4000) break; RefreshRates(); if(isAsk) price = Ask; else price = Bid; } else break; } } //+------------------------------------------------------------------+ bool MyOrderClose(int ticket, double lots, double price, int slip, color cl=CLR_NONE) { int err; bool isAsk=false; if(price == Ask) isAsk = true; for(int z=0;z<10;z++) { if(!OrderClose(ticket,lots,price,slip,cl)) { err = GetLastError(); Print("OrderClose failed, Error: ", err); if(err>4000) break; RefreshRates(); if(isAsk) price = Ask; else price = Bid; } else break; } } //+-------------------------------------------------------------------
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
Other Features: