//+------------------------------------------------------------------+ //| NoLossEA.mq4 | //| Hartono Setiono | //| mailto:hartono@mitrakom.com | //+------------------------------------------------------------------+ // Version 1.0 - May 27th, 2007 // The first and final version of No Loss EA // This EA was designed for GBP/USD only on 1 hour chart // It needs historical data for GBP/JPY and USD/JPY to be exist // otherwise it won't work // This EA a long with NoLoss indicator is created just for ***FUN*** // DON'T EVER use this EA to trade Live !!!! #property copyright "HS" #property link "" //---- input parameters extern bool AccountIsIBFXmini=false; extern double Lots=0.1; extern double MaximumRisk=0.03; extern double DecreaseFactor=300; extern double MinLot=0.01; extern int Slippage=3; extern double TrailingStop=30; double StartBalance,StartEquity; extern bool UseHourTrade = false; extern int FromHourTrade = 6; extern int ToHourTrade = 18; //---- global variables int dir=0; int openorders=0; int cnt; string pair; int MagicNumber; int bsflag=0; int bstarget=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD") { MagicNumber = 427101; } if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY") { MagicNumber = 427102; } if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD") { MagicNumber = 427103; } if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD") { MagicNumber = 427104; } if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY") { MagicNumber = 427105; } if (Symbol() == "EURAUDm" || Symbol() == "EURAUD") { MagicNumber = 427106; } if (Symbol() == "EURCADm" || Symbol() == "EURCAD") { MagicNumber = 427107; } if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") { MagicNumber = 427108; } if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") { MagicNumber = 427109; } if (Symbol() == "EURJPYm" || Symbol() == "EURJPY") { MagicNumber = 427110; } if (Symbol() == "EURUSDm" || Symbol() == "EURUSD") { MagicNumber = 427111; } if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") { MagicNumber = 427112; } if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY") { MagicNumber = 427113; } if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD") { MagicNumber = 427114; } if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY") { MagicNumber = 427115; } if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD") { MagicNumber = 427116; } if (Symbol() == "USDCHFm" || Symbol() == "USDCHF") { MagicNumber = 427117; } if (Symbol() == "USDJPYm" || Symbol() == "USDJPY") { MagicNumber = 427118; } if (Symbol() == "USDCADm" || Symbol() == "USDCAD") { MagicNumber = 427119; } if (MagicNumber == 0) { MagicNumber = 427199; } pair = Symbol(); return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int GetCurrentOrders() { //---- calc open OrderSelect openorders=0; dir=0; for(int i=0;i0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- return lot size if(lot>999) lot=999; if(lotnval2) { bsflag=2; bstarget=(nval1-nval2)*10000; } else if(nval10) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } //+--------------------End TrailingStop & BreakEven------------------+ if (UseHourTrade) { if (!((Hour() >= FromHourTrade) && (Hour() <= ToHourTrade))) { Comment("Non-Trading Hours!"); return(0); } } GetCurrentOrders(); CalcBSI(); Comment("\nStart Balance= ",StartBalance,",","Start Equity= ",StartEquity, "\nBalance: ",AccountBalance(),","," Equity: ",AccountEquity(),","," TotalProfit: ",AccountProfit(), "\nBSFlag: ",bsflag,"\nbstarget: ",bstarget); //---- exit trades if (openorders!=0) { if ((bsflag==1) && (dir<0)) CloseTrade(); if ((bsflag==2) && (dir>0)) CloseTrade(); } //---- open trades else { if (bsflag != 0 && bstarget>20) OpenTrade(); } } //+---------------------End Expert Start Function--------------------+ double xDiv(double a, double b) { if(b==0) return(b); else return(a/b); }