//+------------------------------------------------------------------+ //| Multi_EA.mq4 | //| hellkkas | //| mailto:helderkastro@gmail.com | //+------------------------------------------------------------------+ // Version 0.0.1 // Last Modified Date: Apr. 29th, 2007 #property copyright "hellkkas" #property link "mailto:hellkkas@gmail.com" #define MAGICMA 162429 //---- input parameters extern int UsePct=0; extern int MaxLots=100; extern int Slippage=2; extern double Lots=1; extern double MaximumRisk=0.05; extern double DecreaseFactor=6; extern double MinLot=0.1; extern double TrailingStop=30; double StartBalance,StartEquity; extern bool UseHourTrade = false; extern int FromHourTrade = 6; extern int ToHourTrade = 18; extern int SignalCandle = 1; //---- global variables int bsi=0; int dir=0; int vTrig=0; int openorders=0; int cnt; string pair; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { 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() || 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<0.1) lot=0.1; return(lot); } //+-------------------End Calculate optimal lot size-----------------+ //+------------------------------------------------------------------+ //| Close Open Position | //+------------------------------------------------------------------+ int CloseTrade() { for(int i=0;i0) OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slippage,0,0,NULL,MAGICMA,0,Green); if (bsi<0) OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slippage,0,0,NULL,MAGICMA,0,Red); } //+----------------------End Open Trade Position---------------------+ //+------------------------------------------------------------------+ //| Buy/Sell Indicator | //+------------------------------------------------------------------+ int CalcBSI() { double GBPUSD, EURUSD, USDCHF; //---- calc current indicators int GU_Trig=1,EU_Trig=1,UC_Trig=1,UJ_Trig=1; GBPUSD =iCustom("GBPUSD",0,"RSX",3,0,SignalCandle); EURUSD = iCustom("EURUSD",0,"RSX",3,0,SignalCandle); USDCHF = iCustom("USDCHF",0,"RSX",3,0,SignalCandle); // Print ("GBPUSD : ", GBPUSD, " EURUSD : ", EURUSD, " USDCHF : ", USDCHF); if (GBPUSD<50)GU_Trig=-1; if (EURUSD<50)EU_Trig=-1; if (USDCHF<50)UC_Trig=-1; vTrig=GU_Trig+EU_Trig-UC_Trig; bsi=0; if (vTrig>2) bsi=1; if (vTrig<-2) bsi=-1; if (pair>"USD") bsi=bsi*(-1); } //+-----------------------End Buy/Sell Indicator---------------------+ //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { for(cnt=0;cnt0) { 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(), "\nDir: ",dir,"\nBSI: ",bsi,"\nTrig: ",vTrig); //---- exit trades if (openorders!=0) { if ((bsi>0) && (dir<0)) CloseTrade(); if ((bsi<0) && (dir>0)) CloseTrade(); } //---- open trades else { if (bsi!=0) OpenTrade(); } } //+---------------------End Expert Start Function--------------------+