Profit factor:
0.55
Price Data Components
Series array that contains open prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicatorMomentum indicator
1 Views
0 Downloads
0 Favorites
TEST-EA
//---- Trades limits
extern   double    Lots = 1;
extern   double    TakeProfit = 300;
extern   double    TrailingStop = 100; 
extern   double    StopLoss = 50;
extern   int       Slippage = 5;
extern   double    MaximumRisk        = 0.3;
extern   bool      UseMM=false;

//--- Global variables
extern int      MagicNumber = 34567;
string   ExpertComment = "TEST EA";
int      NumberOfTries = 5;

//+------------------------------------------------------------------
int init()
{
   return(0);
}

int deinit() 
{
   return(0);
}
//+------------------------------------------------------------------

bool isNewSymbol(string current_symbol)
  {
   //loop through all the opened order and compare the symbols
   int total  = OrdersTotal();
   for(int cnt = 0 ; cnt < total ; cnt++)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      string selected_symbol = OrderSymbol();
      if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)
      return (False);
    }
    return (True);
}

//+------------------------------------------------------------------+
int start()
  {

   
   int cnt, ticket, total,n,trend,signal;
   bool BuyCondition , SellCondition,CloseBuyCondition ,CloseSellCondition  ; 
   bool up1, up2, down1, down2;
   if(Bars<50) {Print("bars less than 50"); return(0);}

   //Symbo settings:
   RefreshRates();
   Slippage = MarketInfo(Symbol(),MODE_SPREAD);
       
      double O=iOpen(NULL,PERIOD_D1,0);
      
      double pricenow=iMA(NULL,0,2,0,MODE_EMA,PRICE_OPEN,1);

      double tsvbear=iCustom(NULL,0,"T.S.V._Bullish & Bearish",3,3000,1,1);
      double tsvbull=iCustom(NULL,0,"T.S.V._Bullish & Bearish",3,3000,2,1);
      
      double mom=iMomentum(NULL,0,24,PRICE_CLOSE,1);

      if (signal==1) BuyCondition=false;
      if (signal==-1) SellCondition=false;
      
      if ((pricenow>O && mom>100 && tsvbull>0) && signal!=1) 
      {signal=1; BuyCondition=true; CloseSellCondition=true;}
      
      if ((pricenow<O && mom<100 && tsvbear>0) && signal!=-1) 
      {signal=-1;  SellCondition=true; CloseBuyCondition=true;} 
                
      
   
   total  = OrdersTotal();
   
   if (UseMM)
   Lots=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
   
      
   if(total < 1 || isNewSymbol(Symbol())) 
     {
       if(BuyCondition) //<-- BUY condition
         {
           ticket = OpenOrder(OP_BUY); //<-- Open BUY order
            return(0);
         }
         if(SellCondition) //<-- SELL condition
         {
            ticket = OpenOrder(OP_SELL); //<-- Open SELL order
            return(0);
         }
         return(0);
     }
     
      for(cnt=0;cnt<total;cnt++) 
      {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

         if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
         {
            if(OrderType()==OP_BUY)   //<-- Long position is opened
            {
                  if(CloseBuyCondition) //<-- Close the order and exit! 
                  {
                     CloseOrder(OrderType()); 
                  } 
               
               TrailOrder(OrderType()); //<-- Trailling the order
            }
            if(OrderType()==OP_SELL) //<-- Go to short position
            {
                 if(CloseSellCondition) //<-- Close the order and exit! 
                  {
                     CloseOrder(OP_SELL);
                  } 
               TrailOrder(OrderType()); //<-- Trailling the order
            }
         }
      }

   return(0);
  }
//+------------------------------------------------------------------+

int OpenOrder(int type)
{
   int ticket=0;
   int err=0;
   int c = 0;
   
   if(type==OP_BUY)
   {
      for(c = 0 ; c < NumberOfTries ; c++)
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,ExpertComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
         { 
            break;
         }
         else
         {
            if(err==4 || err==137 ||err==146 || err==136) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               break;
            }  
         }
      }   
   }
   if(type==OP_SELL)
   {   
      for(c = 0 ; c < NumberOfTries ; c++)
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,ExpertComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
         { 
            break;
         }
         else
         {
            if(err==4 || err==137 ||err==146 || err==136) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               break;
            }  
         }
      }   
   }  
   return(ticket);
}

bool CloseOrder(int type)
{
   if(OrderMagicNumber() == MagicNumber)
   {
      if(type==OP_BUY)
         return (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet));
      if(type==OP_SELL)   
         return (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet));
   }
}
void TrailOrder(int type)
{
   if(TrailingStop>0)
   {
      if(OrderMagicNumber() == MagicNumber)
      {
         if(type==OP_BUY)
         {
            if(Bid-OrderOpenPrice()>Point*TrailingStop)
            {
               if(OrderStopLoss()<Bid-Point*TrailingStop)
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
               }
            }
         }
         if(type==OP_SELL)
         {
            if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
            {
               if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
               }
            }
         }
      }
   }
}


Profitability Reports

NZD/USD Oct 2024 - Jan 2025
0.49
Total Trades 480
Won Trades 103
Lost trades 377
Win Rate 21.46 %
Expected payoff -20.00
Gross Profit 9221.00
Gross Loss -18822.00
Total Net Profit -9601.00
-100%
-50%
0%
50%
100%
AUD/USD Oct 2024 - Jan 2025
0.60
Total Trades 635
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -15.04
Gross Profit 14343.00
Gross Loss -23894.00
Total Net Profit -9551.00
-100%
-50%
0%
50%
100%

Comments