Elite eFibo Trader v2.6

Author: Copyright � 2009, Elite E Services
Profit factor:
1.10

Here's a breakdown of what this script does, without getting too technical.

This script is designed to automatically trade in the Forex market, meaning it buys and sells different currencies hoping to make a profit. It is an Expert Advisor (EA) designed to work on the MetaTrader platform. Here's the gist of how it operates:

1. Initial Setup and Customization:

  • Settings: The script starts with a bunch of settings that you, the user, can adjust. These settings control things like:
    • Magic Number: A unique identifier to help the script manage its own trades.
    • Slippage: A tolerance for price changes when the script tries to place an order.
    • Moving Averages: Using Moving Averages, the script calculates a simple average of price movements to identify trends.
    • RSI Filter: The script can optionally use the Relative Strength Index (RSI), another indicator that helps judge if an asset is overbought (likely to fall in price) or oversold (likely to rise in price).
    • Trade Direction: Whether the script should look for opportunities to buy, sell, or both.
    • Order Placement: Defines the distance between orders.
    • Stop Loss: Limits losses on trades.
    • Take Profit: The desired profit level to close all trades.
    • Lot Sizes: The amount of currency to buy or sell at each of the order levels.

2. Trading Logic - How the Script Decides to Trade:

  • Moving Average Crossover: If activated, it uses Moving Averages to detect changes in price trends. If a faster-moving average crosses a slower-moving average, it signals a potential buy or sell opportunity.
  • RSI Confirmation: If enabled, the script will only trade if the RSI indicator agrees with the signal from the Moving Averages (or the direction set manually).
  • Order Placement:
    • The script opens an initial trade (either buy or sell) based on the signals.
    • The script opens 14 total orders and places "pending orders" at pre-defined price levels away from the current price. These are like instructions to automatically buy or sell if the price reaches those levels. These pending orders are spaced out at increasing intervals (Level Distance), forming a series of potential trades.
    • Each level trades with increased Lot Sizes depending on level.

3. Trade Management - What Happens After a Trade is Open:

  • Take Profit Target: The script constantly monitors the total profit of all open trades. If the total profit reaches a pre-set target, the script closes all open trades and cancels all pending orders, securing the profit.
  • Trailing Stop: The script can automatically adjust the "stop loss" order (an order to automatically close a trade if it starts losing money) as the price moves in a favorable direction. This helps to lock in profits.
  • Closing Trades Based on Moving Averages: If using moving averages, the script also monitors if the moving averages shift in a negative way, it will close all existing trades, in an effort to cut losses and re-evaluate.
  • Canceling Pending Orders: The script is designed to cancel all pending orders if the total orders go below 1.

4. Information Display:

  • Comments: The script displays information on the chart, such as account details (name, number, leverage), trade data (total trades, buy trades, sell trades), and profit/loss statistics.

In Simple Terms:

Imagine this script as a robot trader that you can customize with different settings. It uses a combination of technical indicators (Moving Averages, RSI) to identify potential trading opportunities. When it sees an opportunity, it places an initial trade and sets up a grid of pending orders around it. The script then manages the trades by trying to lock in profits and limit losses, closing trades when a profit target is reached, or when indicators signal a change in direction.

Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Indicators Used
Moving average indicatorRelative strength index
6 Views
0 Downloads
0 Favorites
Elite eFibo Trader v2.6
//+------------------------------------------------------------------+
//|                                                eFibo EA v2.5.mq4 |
//|                             Copyright © 2009, Elite E Services   |
//|       info@eliteeservices.net           www.eliteeservices.net   |
//|    Programmed by:  Mikhail Veneracion                            |
//| Forum: www.eesfx.com  Google Group: www.forexcoding.com          |
//|For MQL Programming, EA purchase and lease, and managed accounts  |
//|Contact Elite E Services www.startelite.com                       |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Elite E Services "
#property link      "info@eliteeservices.net"

// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377
extern int 
         MagicNumber       = 100,
         Slippage          = 4;
extern bool
         Use_MA_Logic      = true;
extern int
         MA1_Slow          = 65,
         MA2_Fast          = 15, 
         TrailingStop      = 15;
extern bool 
         Use_RSI_Filter    = false;         
extern int
         RSI_Period        = 14,
         RSI_High          = 70,
         RSI_Low           = 30;         
extern bool
         Open_Buy          = false,
         Open_Sell         = true,
         TradeAgainAfterProfit = true;
extern int
         LevelDistance     = 20,
         StopLoss          = 10;
extern double
         MoneyTakeProfit   = 2000;
extern double
         Lots_Level_1        = 1,
         Lots_Level_2        = 1,
         Lots_Level_3        = 2,
         Lots_Level_4        = 3,
         Lots_Level_5        = 5,
         Lots_Level_6        = 8,
         Lots_Level_7        = 13,
         Lots_Level_8        = 21,
         Lots_Level_9        = 34,
         Lots_Level_10       = 55,
         Lots_Level_11       = 89,
         Lots_Level_12       = 144,
         Lots_Level_13       = 233,
         Lots_Level_14       = 377;

bool Trade=True;
datetime FirstTime,TT;                            
double BestBuySL, BestSellSL;
int ticket1,ticket2,ticket3,ticket4,ticket5,ticket6,ticket7,ticket8,ticket9,ticket10,ticket11,ticket12,ticket13,ticket14;

int MyDigits;
double MyPoint;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  if(Digits==5)MyDigits=4;
  else if(Digits==3)MyDigits=2;
  else MyDigits = Digits; 
  if (Point == 0.00001) MyPoint = 0.0001; //6 digits
  else if (Point == 0.001) MyPoint = 0.01; //3 digits (for Yen based pairs)
  else MyPoint = Point; //Normal
  FirstTime = 0;
  Print("Adjusted for 4/5 digit pip differences");

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
      if(TradeAgainAfterProfit)Trade=true;
         ticket1 = 0;
         ticket2 = 0;
         ticket3 = 0;
         ticket4 = 0;
         ticket5 = 0;
         ticket6 = 0;
         ticket7 = 0;
         ticket8 = 0;
         ticket9 = 0;
         ticket10 = 0;
         ticket11 = 0;
         ticket12 = 0;
         ticket13 = 0;
         ticket14 = 0;
      if(Use_MA_Logic)
      {
         Open_Buy          = false;
         Open_Sell         = false;
         
         double MA_Slow = iMA(Symbol(),0,MA1_Slow,0,0,0,1);
         double MA_Fast = iMA(Symbol(),0,MA2_Fast,0,0,0,1);
         double MA_Slow_L = iMA(Symbol(),0,MA1_Slow,0,0,0,2);
         double MA_Fast_L = iMA(Symbol(),0,MA2_Fast,0,0,0,2);
         
         
         if(MA_Slow>MA_Fast&&MA_Slow_L<=MA_Fast_L&&TT!=iTime(Symbol(),0,0))
         {
             Open_Buy          = false;
             Open_Sell         = true;
         }
         if(MA_Slow<MA_Fast&&MA_Slow_L>=MA_Fast_L&&TT!=iTime(Symbol(),0,0))
         {
             Open_Buy          = true;
             Open_Sell         = false;
         }
         //MA CLOSE ORDER PROCESS
         if(subTotalTypeOrders(OP_BUY)>0&&MA_Slow>MA_Fast)
         {
            if(subTotalProfit()>0)
            {
               Print("SELL SIGNAL CLOSE");
               subCloseOrder();
               subCloseAllOrder();
               subCloseAllOrder();
               subCloseAllPending();
               subCloseAllPending();
            }
            if(subTotalProfit()<0)
            {
               subTrailingStop2(-1000000,TrailingStop);
            }
         }
         if(subTotalTypeOrders(OP_SELL)>0&&MA_Slow<MA_Fast)
         {
            if(subTotalProfit()>0)
            {
               Print("BUY SIGNAL CLOSE");
               subCloseOrder();
               subCloseAllOrder();
               subCloseAllOrder();
               subCloseAllPending();
               subCloseAllPending();
            }
            if(subTotalProfit()<0)
            {
               subTrailingStop2(0,TrailingStop);
            }
         }
      }
      string RSI_Sig = "NA";
      if(Use_RSI_Filter)
      {
         RSI_Sig = "none";
         double RSI = iRSI(Symbol(),0,RSI_Period,PRICE_CLOSE,0);
         if(RSI>RSI_High)
         {
            RSI_Sig = "BUY";
         }
         if(RSI<RSI_Low)
         {
            RSI_Sig = "SELL";
         }
      }
      if((subTotalTrade()<1)&&(Trade))
      {
         //OPEN BUY
         if((Open_Buy&&!Open_Sell)&&(RSI_Sig=="NA"||RSI_Sig=="BUY"))
         {
            double OP = Ask;
            if(ticket1==0)ticket1 = subOpenOrder(OP_BUY, Lots_Level_1, StopLoss, 0,MagicNumber);
            if(ticket1>0&&ticket2==0)ticket2 = subOpenPendingOrder(OP_BUYSTOP, OP+(LevelDistance*MyPoint),Lots_Level_2 ,0,StopLoss,MagicNumber);
            if(ticket2>0&&ticket3==0)ticket3 =subOpenPendingOrder(OP_BUYSTOP, OP+(2*LevelDistance*MyPoint),Lots_Level_3 ,0,StopLoss,MagicNumber);
            if(ticket3>0&&ticket4==0)ticket4 =subOpenPendingOrder(OP_BUYSTOP, OP+(3*LevelDistance*MyPoint),Lots_Level_4 ,0,StopLoss,MagicNumber);
            if(ticket4>0&&ticket5==0)ticket5 =subOpenPendingOrder(OP_BUYSTOP, OP+(4*LevelDistance*MyPoint),Lots_Level_5 ,0,StopLoss,MagicNumber);
            if(ticket5>0&&ticket6==0)ticket6 =subOpenPendingOrder(OP_BUYSTOP, OP+(5*LevelDistance*MyPoint),Lots_Level_6 ,0,StopLoss,MagicNumber);
            if(ticket6>0&&ticket7==0)ticket7 =subOpenPendingOrder(OP_BUYSTOP, OP+(6*LevelDistance*MyPoint),Lots_Level_7 ,0,StopLoss,MagicNumber);
            if(ticket7>0&&ticket8==0)ticket8 =subOpenPendingOrder(OP_BUYSTOP, OP+(7*LevelDistance*MyPoint),Lots_Level_8 ,0,StopLoss,MagicNumber);
            if(ticket8>0&&ticket9==0)ticket9 =subOpenPendingOrder(OP_BUYSTOP, OP+(8*LevelDistance*MyPoint),Lots_Level_9 ,0,StopLoss,MagicNumber);
            if(ticket9>0&&ticket10==0)ticket10 =subOpenPendingOrder(OP_BUYSTOP, OP+(9*LevelDistance*MyPoint),Lots_Level_10 ,0,StopLoss,MagicNumber);
            if(ticket10>0&&ticket11==0)ticket11 =subOpenPendingOrder(OP_BUYSTOP, OP+(10*LevelDistance*MyPoint),Lots_Level_11 ,0,StopLoss,MagicNumber);
            if(ticket11>0&&ticket12==0)ticket12 =subOpenPendingOrder(OP_BUYSTOP, OP+(11*LevelDistance*MyPoint),Lots_Level_12 ,0,StopLoss,MagicNumber);
            if(ticket12>0&&ticket13==0)ticket13 =subOpenPendingOrder(OP_BUYSTOP, OP+(12*LevelDistance*MyPoint),Lots_Level_13 ,0,StopLoss,MagicNumber);
            if(ticket13>0&&ticket14==0)ticket14 =subOpenPendingOrder(OP_BUYSTOP, OP+(13*LevelDistance*MyPoint),Lots_Level_14 ,0,StopLoss,MagicNumber);
            
            if(ticket1>0)
            {
               FirstTime = iTime(Symbol(),0,0);
               TT = iTime(Symbol(),0,0);
               return(0);
            }   
         }
              
         if((Open_Sell&&!Open_Buy)&&(RSI_Sig=="NA"||RSI_Sig=="SELL"))
         {
            OP = Bid;
            if(ticket1==0)ticket1 = subOpenOrder(OP_SELL, Lots_Level_1, StopLoss, 0,MagicNumber);
            if(ticket1>0&&ticket2==0)ticket2 = subOpenPendingOrder(OP_SELLSTOP, OP-(LevelDistance*MyPoint),Lots_Level_2 ,0,StopLoss,MagicNumber);
            if(ticket2>0&&ticket3==0)ticket3 = subOpenPendingOrder(OP_SELLSTOP, OP-(2*LevelDistance*MyPoint),Lots_Level_3 ,0,StopLoss,MagicNumber);
            if(ticket3>0&&ticket4==0)ticket4 = subOpenPendingOrder(OP_SELLSTOP, OP-(3*LevelDistance*MyPoint),Lots_Level_4 ,0,StopLoss,MagicNumber);
            if(ticket4>0&&ticket5==0)ticket5 = subOpenPendingOrder(OP_SELLSTOP, OP-(4*LevelDistance*MyPoint),Lots_Level_5 ,0,StopLoss,MagicNumber);
            if(ticket5>0&&ticket6==0)ticket6 = subOpenPendingOrder(OP_SELLSTOP, OP-(5*LevelDistance*MyPoint),Lots_Level_6 ,0,StopLoss,MagicNumber);
            if(ticket6>0&&ticket7==0)ticket7 = subOpenPendingOrder(OP_SELLSTOP, OP-(6*LevelDistance*MyPoint),Lots_Level_7 ,0,StopLoss,MagicNumber);
            if(ticket7>0&&ticket8==0)ticket8 = subOpenPendingOrder(OP_SELLSTOP, OP-(7*LevelDistance*MyPoint),Lots_Level_8 ,0,StopLoss,MagicNumber);
            if(ticket8>0&&ticket9==0)ticket9 = subOpenPendingOrder(OP_SELLSTOP, OP-(8*LevelDistance*MyPoint),Lots_Level_9 ,0,StopLoss,MagicNumber);
            if(ticket9>0&&ticket10==0)ticket10 = subOpenPendingOrder(OP_SELLSTOP, OP-(9*LevelDistance*MyPoint),Lots_Level_10 ,0,StopLoss,MagicNumber);
            if(ticket10>0&&ticket11==0)ticket11 = subOpenPendingOrder(OP_SELLSTOP, OP-(10*LevelDistance*MyPoint),Lots_Level_11 ,0,StopLoss,MagicNumber);
            if(ticket11>0&&ticket12==0)ticket12 = subOpenPendingOrder(OP_SELLSTOP, OP-(11*LevelDistance*MyPoint),Lots_Level_12 ,0,StopLoss,MagicNumber);
            if(ticket12>0&&ticket13==0)ticket13 = subOpenPendingOrder(OP_SELLSTOP, OP-(12*LevelDistance*MyPoint),Lots_Level_13 ,0,StopLoss,MagicNumber);
            if(ticket13>0&&ticket14==0)ticket14 = subOpenPendingOrder(OP_SELLSTOP, OP-(13*LevelDistance*MyPoint),Lots_Level_14 ,0,StopLoss,MagicNumber);
            
            if(ticket1>0)
            {
               FirstTime = iTime(Symbol(),0,0);
               TT = iTime(Symbol(),0,0);
               return(0);
            }
         }  
         FirstTime = iTime(Symbol(),0,0);
      }   
      FirstTime = iTime(Symbol(),0,0);
      
      //---TAKE PROFIT
      if(subTotalProfit()>=MoneyTakeProfit)
      {
         Print("Money Take Profit Reached");
         if(!TradeAgainAfterProfit)Trade=false;
         subCloseOrder();
         subCloseAllOrder();
         subCloseAllOrder();
         subCloseAllPending();
         subCloseAllPending();
      }
      //---ModifySL
      if(subTotalOpen()>0)
      {
          
          BestSellSL = subBestSellSL();
          BestBuySL = subBestBuySL();
          //Print("BestBuySL:"+BestBuySL+"|BestSellSL:"+BestSellSL);
          int total = OrdersTotal();
          for(int cnt=0;cnt<total;cnt++)
          {
             OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

             if(OrderType()<=OP_SELL &&
                OrderSymbol()==Symbol() &&
                OrderMagicNumber()==MagicNumber)
             {
                subTrailingStop(OrderType());
             }
          }
      } 
      //---DELETE ALL PENDING ORDERS   
      if(subTotalOpen()<1)
      {
         subCloseAllPending();
         subCloseAllPending();
         subCloseAllPending();
      }
      double BuyTrades = subTotalTypeOrders(OP_BUY)+subTotalTypeOrders(OP_BUYSTOP);
      double SellTrades = subTotalTypeOrders(OP_SELL)+subTotalTypeOrders(OP_SELLSTOP);
      
      Comment("DRS_Long \xA9 Elite E Services, Inc.",
             "\nACCOUNT INFORMATION",
             "\nAccount Name: ",AccountName(),
             "\nAccount Number: ",AccountNumber(),
             "\nLeverage: ",AccountLeverage(),":1",
             "\nMimimum Lot Size: ",MarketInfo(Symbol(),MODE_MINLOT),
             "\nMaximum Lot Size: ",MarketInfo(Symbol(),MODE_MAXLOT),
             "\nLot Size: $ ",MarketInfo(Symbol(),MODE_LOTSIZE),
             "\nPip Value: $ ",MarketInfo(Symbol(),MODE_TICKVALUE),
             "\nLot Step: ",MarketInfo(Symbol(),MODE_LOTSTEP),
             "\nTRADE DATA",
             "\nTotal trades: ",BuyTrades+SellTrades,
             "\nBuy trades: ",BuyTrades,
             "\nSell trades: ",SellTrades,
             "\nOrder magic: ",MagicNumber,
              "\nPROFIT/LOSS STATS",
             "\nBalance: ",AccountBalance(),
             "\nEquity: ",AccountEquity(),
             "\nAccount Profit: ",AccountProfit(),
             "\n",Symbol()," Profit: ",DoubleToStr(subTotalProfit(),2));
//----
   return(0);
  }
//+------------------------------------------------------------------+
void subCloseAllPending()
{
   int
         NumberOfTries=10,
         cnt, 
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;

   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderSymbol() == Symbol() &&
         OrderMagicNumber()==MagicNumber)
      {
         switch(OrderType())
         {               
            case OP_BUYLIMIT :
            case OP_BUYSTOP  :
            case OP_SELLLIMIT:
            case OP_SELLSTOP :
               OrderDelete(OrderTicket());
         }
      }
   }      
}
int subTotalTrade()
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber)) total++;
   }
   return(total);
}
int subTotalOpen()
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber)) total++;
   }
   return(total);
}
double subTotalProfit()
{
   int
      cnt, 
      total = 0;
   double Profit = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber))Profit = Profit +OrderProfit();
   }
   return(Profit);
}

int subOpenPendingOrder(int type, double OpenPrice,double Lots ,double takeprofit,double stoploss,int MagicNumber)
{
   string TicketComment = "Andrew EA";
   int
         ticket      = 0,
         err         = 0,
         c           = 0;
         
    double         
         aStopLoss   = 0,
         aTakeProfit = 0,
         aOpenPrice  = 0,
         bStopLoss   = 0,
        // OpenPrice  = 0,
         bTakeProfit = 0;
         
   if(takeprofit!=0)
   {
      aTakeProfit = NormalizeDouble(OpenPrice+takeprofit*MyPoint,Digits);
      bTakeProfit = NormalizeDouble(OpenPrice-takeprofit*MyPoint,Digits);
   }
   if(stoploss!=0)
   {
      aStopLoss   = NormalizeDouble(OpenPrice-stoploss*MyPoint,Digits);
      bStopLoss   = NormalizeDouble(OpenPrice+stoploss*MyPoint,Digits);
   }

   if(type==OP_BUYSTOP)
   {
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,OpenPrice,6,aStopLoss,aTakeProfit,TicketComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELLSTOP)
   {   
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,OpenPrice,6,bStopLoss,bTakeProfit,TicketComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_BUYLIMIT)
   {
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,OpenPrice,6,aStopLoss,aTakeProfit,TicketComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELLLIMIT)
   {   
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,OpenPrice,6,bStopLoss,bTakeProfit,TicketComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }  
   return(ticket);  
}
//+------------------------------------------------------------------+
int subOpenOrder(int type, double Lotz, int stoploss, int takeprofit,int MagicNumber)
{
   int NumberOfTries = 10;
   string TicketComment = "Hedge EA";
   int
         ticket      = 0,
         err         = 0,
         c           = 0;
         
   double         
         aStopLoss   = 0,
         aTakeProfit = 0,
         bStopLoss   = 0,
         bTakeProfit = 0;

   if(stoploss!=0)
   {
      aStopLoss   = NormalizeDouble(Ask-stoploss*MyPoint,Digits);
      bStopLoss   = NormalizeDouble(Bid+stoploss*MyPoint,Digits);
   }
   
   if(takeprofit!=0)
   {
      aTakeProfit = NormalizeDouble(Ask+takeprofit*MyPoint,Digits);
      bTakeProfit = NormalizeDouble(Bid-takeprofit*MyPoint,Digits);
   }
   
   if(type==OP_BUY)
   {
      for(c=0;c<NumberOfTries;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lotz,Ask,Slippage,aStopLoss,aTakeProfit,TicketComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELL)
   {   
      for(c=0;c<NumberOfTries;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lotz,Bid,Slippage,bStopLoss,bTakeProfit,TicketComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }  
   return(ticket);
}
double subBestBuySL()
{
   int
      cnt, 
      total = 0;
   double SL = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber))
        {
           if(OrderStopLoss()>SL)
           {
               SL = OrderStopLoss();
           }
        }
   }
   return(SL);
}
double subBestSellSL()
{
   int
      cnt, 
      total = 0;
   double SL = 10000000;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber))
        {   
           if(OrderStopLoss()<SL)
           {
               SL = OrderStopLoss();
           }
        }   
   }
   return(SL);
}
void subTrailingStop(int Type)
{
   if(Type==OP_BUY)   // buy position is opened   
   {
//----------------------- AFTER PROFIT TRAILING STOP      
        
            if(OrderStopLoss()<BestBuySL)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),subBestBuySL(),OrderTakeProfit(),0,Green);
               return(0);
            }
          
   }         
   if(Type==OP_SELL)   // sell position is opened   
   {
//----------------------- AFTER PROFIT TRAILING STOP      
     
            if(OrderStopLoss()>BestSellSL)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),subBestSellSL(),OrderTakeProfit(),0,Red);
               return(0);
            }
            
           
           
        
   }
}
void subCloseAllOrder()
{
   int
         NumberOfTries=10,
         cnt, 
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;

   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderSymbol() == Symbol() &&
         (OrderMagicNumber()==MagicNumber))
      {
         switch(OrderType())
         {
            case OP_BUY      :
               for(c=0;c<NumberOfTries;c++)
               {
                  RefreshRates();
                  ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_SELL     :
               for(c=0;c<NumberOfTries;c++)
               {
                  RefreshRates();
                  ticket=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_BUYLIMIT :
            case OP_BUYSTOP  :
            case OP_SELLLIMIT:
            case OP_SELLSTOP :
               OrderDelete(OrderTicket());
         }
      }
   }      
}
void subCloseOrder()
{
   int
         NumberOfTries=10,
         cnt, 
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;

   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderSymbol() == Symbol() &&
         (OrderMagicNumber()==MagicNumber))
      {
         switch(OrderType())
         {
            case OP_BUY      :
               for(c=0;c<NumberOfTries;c++)
               {
                  RefreshRates();
                  ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_SELL     :
               for(c=0;c<NumberOfTries;c++)
               {
                  RefreshRates();
                  ticket=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
         }
      }
   }      
}
//-------------------------------
//----------------------- TRAILING STOP SECTION
void subTrailingStop2(double TS_MinProfit, int TrailingStop)
{
    int total = OrdersTotal();
    for(int cnt=0;cnt<total;cnt++)
    {
        OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

        if(OrderType()<=OP_SELL &&
             OrderSymbol()==Symbol() &&
             OrderMagicNumber()==MagicNumber)
        {
           if(OrderType()==OP_BUY)   // buy position is opened   
           {
               if(
               OrderStopLoss()<Bid-(MyPoint*TrailingStop))
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(MyPoint*TrailingStop),OrderTakeProfit(),0,Green);
               }
          
           }         
           if(OrderType()==OP_SELL)   // sell position is opened   
           {
                  
               if(true)
               {
                  if(OrderStopLoss()>Ask+(MyPoint*TrailingStop) || OrderStopLoss()==0)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(MyPoint*TrailingStop),OrderTakeProfit(),0,Red);
                     //return(0);
                  }
                }    
           }
        }
     }
}           
// COUNTS THE TOTAL ORDERS DEPENDING ON TYPE
int subTotalTypeOrders(int Type)
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==Type&&OrderSymbol()==Symbol()&&
      OrderMagicNumber()==MagicNumber) total++;
   }
   return(total);
}

Profitability Reports

USD/JPY Jan 2025 - Jul 2025
1.36
Total Trades 109
Won Trades 20
Lost trades 89
Win Rate 18.35 %
Expected payoff 28.93
Gross Profit 12029.19
Gross Loss -8876.01
Total Net Profit 3153.18
-100%
-50%
0%
50%
100%
USD/CHF Jan 2025 - Jul 2025
1.86
Total Trades 114
Won Trades 36
Lost trades 78
Win Rate 31.58 %
Expected payoff 91.92
Gross Profit 22678.31
Gross Loss -12199.45
Total Net Profit 10478.86
-100%
-50%
0%
50%
100%
USD/CAD Jan 2025 - Jul 2025
0.04
Total Trades 72
Won Trades 2
Lost trades 70
Win Rate 2.78 %
Expected payoff -76.21
Gross Profit 200.64
Gross Loss -5687.52
Total Net Profit -5486.88
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
1.13
Total Trades 53
Won Trades 10
Lost trades 43
Win Rate 18.87 %
Expected payoff 13.25
Gross Profit 6002.00
Gross Loss -5300.00
Total Net Profit 702.00
-100%
-50%
0%
50%
100%

Comments