TradersPowerExpert_v1.2_gbpusd

Author: Copyright � 2006, Forex-TSD.com
Profit factor:
3056.03

This script is designed to automatically trade on the Forex market based on specific rules and calculations. Here's how it works:

1. Initial Setup:

  • Input Parameters: The script starts by defining several adjustable settings that the user can change, such as the size of trades ("Lots"), whether to use a trailing stop, and the specific days of the week to trade.
  • Data Collection: It gathers information about the current market, including the current price of the currency pair, and historical price data from the last few days.
  • Money Management: It can calculate the trade size dynamically based on account balance and risk parameters, or use a fixed lot size

2. Daily Trading Logic:

  • Time Check: The script is designed to primarily act within a certain time window each day defined by the user's time zone, and start time which is 00:00 by default.
  • Order Management: At the start of a new trading day (within its defined time window) it deletes any pending orders set from the day(s) before, it also closes any trades older than TradePeriod number of days.
  • Trading Decision:
    • The script calculates the average price movement ("range") of the currency pair over a user defined number of past days.
    • Using these averages, it calculates potential buy and sell prices based on percentages set by the user.
  • Order Placement:
    • Based on the calculated buy and sell prices, the script attempts to place "Buy Stop" and "Sell Stop" orders. These are orders to automatically buy or sell the currency if the price reaches a certain level.
    • The script also sets initial stop-loss levels for these orders, which are designed to limit potential losses.
  • Trade Day Control: Script will only try to open BuyStop and SellStop orders if the Day Of Week corresponds to the days chosen by the user.

3. Ongoing Trade Management:

  • Order Monitoring: Throughout the trading day, the script monitors any open orders.
  • Extra Order Deletion: If there are open buy orders when a sell stop order triggers, the script deletes the extra sell order to avoid conflict and vice-versa.
  • Break-Even Stop: As a trade becomes profitable, the script can move the stop-loss order to the "break-even" point (the price at which the trade was opened), plus a small buffer. This protects the initial investment.
  • Trailing Stop: If enabled, the script continuously adjusts the stop-loss order as the price moves in a favorable direction. This helps to lock in profits while still allowing the trade to potentially gain more.
  • Closing Trades by Time: The script will also close trades older than a user defined number of days (TradePeriod).

In Summary:

The script is an automated trading system that attempts to profit from short-term price fluctuations in the Forex market. It places pending orders based on historical price ranges, manages risk through stop-loss orders, and aims to maximize profits through break-even and trailing stop mechanisms. It also gives the user a great level of control by defining what days of the week it must trade.

Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
7 Views
0 Downloads
0 Favorites
TradersPowerExpert_v1.2_gbpusd
//+------------------------------------------------------------------+
//|                                        TradersPowerExpert_v1.mq4 |
//|                                  Copyright © 2006, Forex-TSD.com |
//|                         Written by IgorAD,igorad2003@yahoo.co.uk |   
//|            http://finance.groups.yahoo.com/group/TrendLaboratory |                                      
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link      "http://www.forex-tsd.com/"

#include <stdlib.mqh>
//#include <Tracert.mqh>

//---- input parameters
extern string     Expert_Name = "---- TradersPowerExpert_v1 ----";

extern int        Magic=1007;
extern int        Slippage=6;

extern bool       Trace = false;           // Trace Switch

extern string     Main_Parameters = " Trade Volume & Trade Method";
extern double     Lots = 1;
extern bool       TrailingStop   = false;     // Trailing Stop Switch   
extern bool       InitialStop    = true;      // Initial Stop Switch
extern int        TimeZone       = 0;   

extern string     Data = " Input Data ";
extern int        TradersPeriod  = 4; 
extern double     BuyPercent     = 120;      // Percent from Daily Range for BUY 	
extern double     SellPercent    = 220;      // Percent from Daily Range for SELL
extern double     StopPercent    = 260;      // Percent from Daily Range for StopLoss
extern int        TradePeriod    = 5;       // Max days in trade 
extern double     BreakEven      = 85;       // BreakEven Level in pips
extern double     BreakEvenGap   = 8;       // Pips when BreakEven will be reached

extern string     Trade   =  " Trade Days of Week";
extern int        Monday         = 1;      // Day of the Week for Trade
extern int        Tuesday        = 1;
extern int        Wednesday      = 1;
extern int        Thursday       = 1;
extern int        Friday         = 1;

extern string     MM_Parameters = " MoneyManagement by L.Williams ";
extern bool       MM=false;                 // ÌÌ Switch
extern double     MMRisk=0.1;              // Risk Factor
extern double     LossMax=1466;             // Maximum Loss by 1 Lot


int      i,k,cnt=0, ticket, mode=0, digit=0, wenum=0, OrderOpenDay, Kz;
double   high,low, close[], open, range, Bulls,Bears,
         AvgBulls,AvgBears, SumBulls,SumBears,TodayOpen,spread=0, Profit=0;
double   smin=0, smax=0, BuyStop=0, SellStop=0, Lotsi=0, rates_h1[][6];
bool     BuyInTrade=false, SellInTrade=false;
datetime StartTime, prevwe=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 

//----
   return(0);
  }
// ---- Money Management
double MoneyManagement ( bool flag, double Lots, double risk, double maxloss)
{
   double Lotsi=Lots;
	    
   if ( flag ) Lotsi=NormalizeDouble(Lots*AccountFreeMargin()*risk/maxloss,1);   
     
   if (Lotsi<0.1) Lotsi=0.1;  
   return(Lotsi);
}   

// Closing of Pending Orders      
void PendOrdDel()
{
    int total=OrdersTotal();
    for (int cnt=total-1;cnt>=0;cnt--)
    { 
      OrderSelect(cnt, SELECT_BY_POS,MODE_TRADES);   
      
        if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic  )     
        {
        int mode=OrderType();
        
        bool result = false;
          switch(mode)
          {
            
            case OP_BUYSTOP   : {result = OrderDelete( OrderTicket() ); Print(" PendBUY"); }
          
            case OP_SELLSTOP  : {result = OrderDelete( OrderTicket() ); Print(" PendSELL"); }
          if(!result)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
          //Print(" cnt=",cnt, " total=",total," MODE = ",mode," Ticket=",OrderTicket()  );                       
          }
         }
      } 
  return;
  }    

// 

void CloseOrdbyTime()
{
     int total=OrdersTotal();
     
     for (cnt=0;cnt<total;cnt++)
     { 
        OrderSelect(cnt, SELECT_BY_POS);   
        mode=OrderType();
        if ( mode <= OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        { 
          datetime OpenTime=StrToTime(TimeToStr(OrderOpenTime(),TIME_DATE));
          datetime CurnTime=StrToTime(TimeToStr(CurTime(),TIME_DATE)); 
          int weekday=TimeDayOfWeek(OrderOpenTime());
          if (weekday <=5 && DayOfWeek()==1 && CurnTime > prevwe && CurnTime > OpenTime) {wenum =wenum + 1; prevwe = CurnTime;}      
          //if (OrderOpenDay <= 5 && DayOfWeek()>0) 
          int CalcBars=TradePeriod+2*wenum; 
          //else CalcBars=TradePeriod;
         
            if ((CurTime()-OpenTime)>=PERIOD_D1*CalcBars*60 || OrderProfit()>0)
            {
              if (mode==OP_BUY )
			     OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
			     if (mode==OP_SELL)
			     OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
            }
        }
    }

}       
 
// ---- 
void TrailStops()
{        
    int total=OrdersTotal();
    for (cnt=0;cnt<total;cnt++)
    { 
     OrderSelect(cnt, SELECT_BY_POS);   
     mode=OrderType();    
        if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ) 
        {
            if ( mode==OP_BUY && smin > OrderStopLoss() )
            {
            Profit=0;
			   OrderModify(OrderTicket(),OrderOpenPrice(),smin,Profit,0,LightGreen);
			   return(0);
            }
           if ( mode==OP_SELL && smax < OrderStopLoss())
            {
            Profit=0;
   		   OrderModify(OrderTicket(),OrderOpenPrice(),smax,Profit,0,Yellow);	    
            return(0);
            }    
        }
    }   
} 

void SellOrdOpen()
{		     

		  double SellPrice=TodayOpen - AvgBears * SellPercent/100.0 - spread;
		  
		  if (InitialStop) SellStop=SellPrice + StopPercent*AvgBears/100.0; else SellStop=0;
        Profit=0;
	       
		  ticket = OrderSend(Symbol(),OP_SELLSTOP,Lotsi,
		                     NormalizeDouble(SellPrice,digit),
		                     Slippage,
		                     NormalizeDouble(SellStop,digit),
		                     Profit,"SELL",Magic,0,Red);
    

        OrderOpenDay  = DayOfWeek();   
        
        SellInTrade=false;            
        Kz=1;     
            if(ticket<0)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
}

void BuyOrdOpen()
{		     

		  double BuyPrice =TodayOpen + AvgBulls*BuyPercent/100.0  + spread;
		  if (InitialStop) BuyStop = BuyPrice - StopPercent*AvgBulls/100.0; else BuyStop=0;
        Profit=0;
		 
		  ticket = OrderSend(Symbol(),OP_BUYSTOP ,Lotsi,
		                     NormalizeDouble(BuyPrice ,digit),
		                     Slippage,
		                     NormalizeDouble(BuyStop ,digit),
		                     Profit,"BUY",Magic,0,Blue);
                
        
        OrderOpenDay  = DayOfWeek();
        BuyInTrade=false;            
        Kz=1;    
            if(ticket<0)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
}      

void ExtraOrdDel()
{
    int total = OrdersTotal();
    for (cnt=0;cnt<total;cnt++)
    { 
      OrderSelect(cnt, SELECT_BY_POS);   
      mode=OrderType();
        if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )     
        {
            if (mode==OP_BUY  && !BuyInTrade ) BuyInTrade =true;
            if (mode==OP_SELL && !SellInTrade) SellInTrade=true;
            
            if (mode == OP_SELLSTOP && BuyInTrade )
            { OrderDelete(OrderTicket()); SellInTrade=false; Print(" ExtraSell"); }
            if (mode == OP_BUYSTOP && SellInTrade )
            { OrderDelete(OrderTicket()); BuyInTrade=false; Print(" ExtraBuy"); }
    
	     }
	 }        
}

// ---- Scan Trades
int ScanTrades()
{   
   int total = OrdersTotal();
   int numords = 0;
      
   for(cnt=0; cnt<total; cnt++) 
   {        
   OrderSelect(cnt, SELECT_BY_POS);            
   if(OrderSymbol() == Symbol() && OrderType()>=OP_BUY && OrderMagicNumber() == Magic) 
   numords++;
   }
   return(numords);
}

datetime OrderOpenDate()
{
   int total = OrdersTotal();
   datetime date;
   for(cnt=0; cnt<total; cnt++) 
   {        
   OrderSelect(cnt, SELECT_BY_POS);            
   if(OrderSymbol() == Symbol() && OrderType()>=OP_BUY && OrderMagicNumber() == Magic) 
   date = StrToTime(TimeToStr(OrderOpenTime(),TIME_DATE));
   }
   return(date);
}  

void BreakEvenStop()
{        
   
    for (cnt=0;cnt<OrdersTotal();cnt++)
    { 
     OrderSelect(cnt, SELECT_BY_POS);   
     int mode=OrderType();    
        if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) 
        {
            if ( mode==OP_BUY )
            {
               if ( Bid-OrderOpenPrice() > 0 ) 
               {Kz = MathFloor((Bid-OrderOpenPrice())/(BreakEven*Point));
                if (Kz < 1) Kz=1;} 
			         else Kz = 1;
			       // Print(" Buy Kz=",Kz); 
               //BuyStop = OrderStopLoss();
			         if (Bid-OrderOpenPrice() > Kz*BreakEven*Point) 
			            {
			            BuyStop=OrderOpenPrice()+((Kz-1)*BreakEven+BreakEvenGap)*Point;
			            
			            OrderModify(OrderTicket(),OrderOpenPrice(),
			                        NormalizeDouble(BuyStop, digit),
			                        OrderTakeProfit(),0,LightBlue);
			            
			            //Kz=Kz+1;
			            return(0);
			            }
			      
			   }
            if ( mode==OP_SELL )
            {
               if ( OrderOpenPrice()-Ask > 0 ) 
               {Kz = MathFloor((OrderOpenPrice()-Ask)/(BreakEven*Point));
                if (Kz < 1) Kz=1;}  
			         else Kz = 1;
			        // Print(" Sell Kz=",Kz);
               //SellStop = OrderStopLoss();
                  if (OrderOpenPrice()-Ask > Kz*BreakEven*Point) 
			            {
			            SellStop=OrderOpenPrice()-((Kz-1)*BreakEven+BreakEvenGap)*Point;
			            
			            OrderModify(OrderTicket(),OrderOpenPrice(),
			                        NormalizeDouble(SellStop, digit),
			                        OrderTakeProfit(),0,Orange);
			            
			            //DrawStops("SellStop",SellStop,Orange);
			            //Kz=Kz+1;
			            return(0);
			            }
               
            }
        }   
    } 
}	                    
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(Bars < 1) {Print("Not enough bars for this strategy"); return(0);}
  
   //if ( Trace ) SetTrace();
  
   string   TimeTrade = "00:00";
   StartTime  = StrToTime(TimeTrade) + TimeZone*3600;
  
   if(Hour() >= TimeZone && Hour() <= TimeZone+1)
   {
     if ( OrderOpenDate() < StrToTime(TimeToStr( StartTime,TIME_DATE))) 
     { PendOrdDel(); if( TradePeriod > 0 )CloseOrdbyTime(); }
        if(ScanTrades()<1)
        {
      
         spread= MarketInfo(Symbol(),MODE_SPREAD)*Point;
         digit  = MarketInfo(Symbol(),MODE_DIGITS);
         Lotsi = MoneyManagement ( MM, Lots, MMRisk, LossMax);
         if (TrailingStop) InitialStop=true; 
   
         ArrayCopyRates(rates_h1, Symbol(), PERIOD_H1);
         TodayOpen = rates_h1[0][1];
         SumBulls=0;SumBears=0;
            for (k=TradersPeriod;k>=1;k--)
            {
            open = rates_h1[k*24][1];
            high=0; low=10000000;
               for (i=24;i>=1;i--)
               {
               high = MathMax( high, rates_h1[i+(k-1)*24][3]);
               low  = MathMin( low , rates_h1[i+(k-1)*24][2]);      
               
               }   
               
            range =(high-low); 
            Bulls = high - open;
            Bears = open - low;
            SumBulls += Bulls;
            SumBears += Bears; 
            //Print(" Bulls=",high,"Bears=",low);
            }
      
         AvgBulls = SumBulls/TradersPeriod;
         AvgBears = SumBears/TradersPeriod;
         //Print(" high=",AvgBulls,"low=",AvgBears);
         smin = Bid - StopPercent*AvgBears/100.0;
         smax = Ask + StopPercent*AvgBulls/100.0;
      
   
         if ( Monday   == 1 ) if(DayOfWeek()==1){BuyOrdOpen(); SellOrdOpen();}
         if ( Tuesday  == 1 ) if(DayOfWeek()==2){BuyOrdOpen(); SellOrdOpen();}
         if ( Wednesday== 1 ) if(DayOfWeek()==3){BuyOrdOpen(); SellOrdOpen();} 
         if ( Thursday == 1 ) if(DayOfWeek()==4){BuyOrdOpen(); SellOrdOpen();} 
         if ( Friday   == 1 ) if(DayOfWeek()==5){BuyOrdOpen(); SellOrdOpen();}
        }
      
    }
   ExtraOrdDel();
   if (BreakEven > 0) BreakEvenStop(); 
   if (TrailingStop) TrailStops(); 
 return(0);
}//int start
//+------------------------------------------------------------------+





Profitability Reports

GBP/USD Jul 2025 - Sep 2025
1.37
Total Trades 27
Won Trades 24
Lost trades 3
Win Rate 88.89 %
Expected payoff 27.56
Gross Profit 2743.00
Gross Loss -1999.00
Total Net Profit 744.00
-100%
-50%
0%
50%
100%
GBP/CAD Jul 2025 - Sep 2025
0.71
Total Trades 24
Won Trades 20
Lost trades 4
Win Rate 83.33 %
Expected payoff -16.36
Gross Profit 951.52
Gross Loss -1344.11
Total Net Profit -392.59
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
1.13
Total Trades 31
Won Trades 29
Lost trades 2
Win Rate 93.55 %
Expected payoff 5.52
Gross Profit 1471.28
Gross Loss -1300.19
Total Net Profit 171.09
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.75
Total Trades 20
Won Trades 15
Lost trades 5
Win Rate 75.00 %
Expected payoff -28.90
Gross Profit 1758.00
Gross Loss -2336.00
Total Net Profit -578.00
-100%
-50%
0%
50%
100%
USD/JPY Jan 2025 - Jul 2025
1.02
Total Trades 70
Won Trades 68
Lost trades 2
Win Rate 97.14 %
Expected payoff 0.45
Gross Profit 1906.00
Gross Loss -1874.49
Total Net Profit 31.51
-100%
-50%
0%
50%
100%
USD/CHF Jan 2025 - Jul 2025
0.47
Total Trades 60
Won Trades 49
Lost trades 11
Win Rate 81.67 %
Expected payoff -59.27
Gross Profit 3135.10
Gross Loss -6691.51
Total Net Profit -3556.41
-100%
-50%
0%
50%
100%
USD/CAD Jan 2025 - Jul 2025
1.92
Total Trades 60
Won Trades 55
Lost trades 5
Win Rate 91.67 %
Expected payoff 26.85
Gross Profit 3370.03
Gross Loss -1758.79
Total Net Profit 1611.24
-100%
-50%
0%
50%
100%
GBP/CAD Jan 2025 - Jul 2025
0.17
Total Trades 53
Won Trades 44
Lost trades 9
Win Rate 83.02 %
Expected payoff -130.56
Gross Profit 1388.97
Gross Loss -8308.73
Total Net Profit -6919.76
-100%
-50%
0%
50%
100%
GBP/AUD Jan 2025 - Jul 2025
3.67
Total Trades 56
Won Trades 53
Lost trades 3
Win Rate 94.64 %
Expected payoff 59.42
Gross Profit 4573.00
Gross Loss -1245.42
Total Net Profit 3327.58
-100%
-50%
0%
50%
100%
EUR/USD Jan 2025 - Jul 2025
39564.59
Total Trades 248
Won Trades 242
Lost trades 6
Win Rate 97.58 %
Expected payoff 738786.19
Gross Profit 183223601.00
Gross Loss -4631.00
Total Net Profit 183218970.00
-100%
-50%
0%
50%
100%

Comments