Hans123Trader_v8m1_1_R_v1

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
Indicators Used
Indicator of the average true range
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
51.00 %
Total Trades 200
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -14.33
Gross Profit 3014.00
Gross Loss -5880.00
Total Net Profit -2866.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
33.00 %
Total Trades 202
Won Trades 46
Lost trades 156
Win Rate 0.23 %
Expected payoff -27.27
Gross Profit 2736.00
Gross Loss -8245.00
Total Net Profit -5509.00
-100%
-50%
0%
50%
100%
Hans123Trader_v8m1_1_R_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                    Hans123 Expert Advisor        |
//|                                    Version 8.1                   |
//|                                    v8 Programmed by Fukinagashi  |
//|                                    v8.1 Programmed by AymenSaket |
//+------------------------------------------------------------------+
#include <stdlib.mqh>

extern int                       BeginSession1=          5;
extern int                       LengthSession1=         4;
extern int                       BeginSession2=          9;
extern int                       LengthSession2=         4;

extern double                    Lots =                  1;

extern int                       LocalTimeZone=          1;
extern int                       DestTimeZone=           1;

extern int                       ClsOnlUnprTX=1;                                  
extern int                       ProtectYourInvestments= 1;                       
extern int                       Type_TS_Calc=           1;                                  
extern double                    FactorTSCalculation =   0.5;

datetime                         bartime =               0;
double                           Slippage=               3;
int                              OrderInterval =         10000;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int start()
   {
   int                           cnt, ticket, err, i, j;
   int                           MagicNumber;
   double                        ts, tp, sl, LowestPrice, HighestPrice, Price;
   bool                          Order[5];
   string                        setup;
   datetime                      Validity=0;
   double                        TrailingStop;
   double                        TakeProfit;
   double                        InitialStopLoss;
   int                           PipsForEntry;
   int                           TimeZoneDiff= LocalTimeZone - DestTimeZone;   

	MagicNumber = func_Symbol2Val(Symbol()); 

   setup="H123v8.1_" + Symbol();

   if (Symbol()=="GBPUSD") 
   {
      PipsForEntry= 13;
      TrailingStop = 32;
      TakeProfit = 62;
      InitialStopLoss=52;
   } 
    
    else    if (Symbol()=="EURUSD") 
    {
      PipsForEntry= 13;
      TrailingStop = 30;
      TakeProfit = 52;
      InitialStopLoss=42;
    } 
    
    else    if (Symbol()=="USDCHF") 
    {
      PipsForEntry= 13;
      TrailingStop = 30;
      TakeProfit = 62;
      InitialStopLoss=52;
    } 
    
    else 
    {      
      PipsForEntry= 13;
      TrailingStop = 32;
      TakeProfit = 52;
      InitialStopLoss=42;
    } 

   if (bartime == Time[0]) 
   {
      return(0);
   } 
   
   else 
   {
      bartime = Time[0]; 
   }





/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICATIONS ON OPEN ORDERS   ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


   for(cnt=OrdersTotal();cnt>=0;cnt--)
   {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
      err = GetLastError();
  		if (err>1) { Print("Error selecting order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
      
      if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber()==(MagicNumber+1) || OrderMagicNumber()==(MagicNumber+3))) {
      	if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
            if (ClsOnlUnprTX==1) {
               if(Bid-OrderOpenPrice()<Point*TrailingStop) {
                  OrderClose(OrderTicket(), Lots, Bid, 3, Red);
               }  
            } else {
         		 OrderClose(OrderTicket(), Lots, Bid, 3, Red);
         	}
            err = GetLastError();
      		if (err>1) { Print("Error closing buy order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
			} else if (TrailingStop>0) {
			   if (ProtectYourInvestments==1 && Bid-OrderOpenPrice()>Point*TrailingStop) {
			      ts = OrderOpenPrice();
			   } else {
			      if (Type_TS_Calc==1) {
                  ts = Bid-(Point*TrailingStop);
               } else if (Type_TS_Calc==2) {
                  ts = Low[0] - FactorTSCalculation * iATR(NULL,0,14,0);
               } else if (Type_TS_Calc==3) {
                  ts = Low[0] - (FactorTSCalculation *(High[0]-Low[0]));
               }
				}
				if (OrderStopLoss()<ts && Bid-OrderOpenPrice()>Point*TrailingStop) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
            err = GetLastError();
      		if (err>1) { Print("Error modifying buy order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
			}
      } else if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber()==(MagicNumber+2) || OrderMagicNumber()==(MagicNumber+4))) {
      	if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
            if (ClsOnlUnprTX==1) {
               if((OrderOpenPrice()-Ask)<(Point*TrailingStop)) {
                  OrderClose(OrderTicket(), Lots, Ask, 3, Red);
               }
            } else {
         		 OrderClose(OrderTicket(), Lots, Ask, 3, Red);
         	}
            err = GetLastError();
      		if (err>1) { Print("Error closing Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
			} else if (TrailingStop>0) {	
			   if (ProtectYourInvestments==1 && (OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
			      ts = OrderOpenPrice();
			   } else {
			      if (Type_TS_Calc==1) {
                  ts = Ask+(Point*TrailingStop);
               } else if (Type_TS_Calc==2) {
                  ts = High[0] + FactorTSCalculation * iATR(NULL,0,14,0);
               } else if (Type_TS_Calc==3) {
                  ts = High[0] + (FactorTSCalculation *(High[0]-Low[0]));
               }
				}

				if (OrderStopLoss()>ts && (OrderOpenPrice()-Ask)>(Point*TrailingStop)) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
            err = GetLastError();
      		if (err>1) { Print("Error modifyin sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
			}
		}
		}
	}
			

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// SETTING ORDERS                 ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   if(AccountFreeMargin()<(1000*Lots)) return(0);  
   
	Validity=StrToTime(TimeYear(Time[0]) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + " 23:59")+(TimeZoneDiff*3600);

	
	for(i=1;i<5;i++) { Order[i]=false; } 
	
   for(cnt=OrdersTotal();cnt>=0;cnt--)
   {
      
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
		
		err = GetLastError();
      
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==(MagicNumber+1)) 
      {
      	Order[1]=true;
      } 
      
      else if (OrderSymbol()==Symbol() && OrderMagicNumber()==(MagicNumber+2)) 
      {
      	Order[2]=true;
      } 
      
      else if (OrderSymbol()==Symbol() && OrderMagicNumber()==(MagicNumber+3)) 
      {
      	Order[3]=true;
      } 
      
      else if (OrderSymbol()==Symbol() && OrderMagicNumber()==(MagicNumber+4)) 
      {
      	Order[4]=true;
      }
      
	}      	
	
	
	if (TimeHour(Time[0])==BeginSession1+LengthSession1+TimeZoneDiff && TimeMinute(Time[0])==0) 
	{
		
		LowestPrice=Low[Lowest(NULL, 0, MODE_LOW, LengthSession1*60/Period(), 0)];
		HighestPrice=High[Highest(NULL, 0, MODE_HIGH, LengthSession1*60/Period(), 0)];
		
		Print("Determine Low: " + LowestPrice + " and High: " + HighestPrice + " for timephase " + TimeToStr(Time[240/Period()]) + " - " + TimeToStr(Time[0]));
		
		Price = HighestPrice+PipsForEntry*Point;
		
   	if (TakeProfit>0) 
   	{  
      	tp=Price+TakeProfit*Point;
		} 
		else 
		{
		   tp=0; 
		}
	
	
	
		if (InitialStopLoss>0) 
		{ 	
         if((Price-InitialStopLoss*Point)<LowestPrice-PipsForEntry*Point) 
         { 
            sl = LowestPrice-PipsForEntry*Point;
         } 
         else 
         {                                        
            sl = Price-InitialStopLoss*Point;
         }
		} 
		else 
		{
		      sl=0; 
		}



		if (!Order[1]) ticket=OrderSendExtended(Symbol(),OP_BUYSTOP,Lots,Price,Slippage,sl,tp,setup,(MagicNumber+1),Validity,Green);
      	   
		           
  		Price = LowestPrice-PipsForEntry*Point;

   	if (TakeProfit>0) 
   	{
   	   tp=Price-TakeProfit*Point;
		} 
		else 
		{
		   tp=0; 
		}
		
		
		if (InitialStopLoss>0)
		{ 	
         if((Price+InitialStopLoss*Point)>HighestPrice+PipsForEntry*Point) 
         { 
            sl = HighestPrice+PipsForEntry*Point;
         } 
         else 
         {                                         
            sl = Price+InitialStopLoss*Point;
         }
		} 
		else 
		{
		   sl=0;
		}

      Sleep(OrderInterval);

		if (!Order[2]) ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,sl,tp,setup,(MagicNumber+2),Validity,Green); 
		
		
	}
	
	if (TimeHour(Time[0])==BeginSession2+LengthSession2+TimeZoneDiff && TimeMinute(Time[0])==0) 
	{

		LowestPrice=Low[Lowest(NULL, 0, MODE_LOW, LengthSession2*60/Period(), 0)];
		HighestPrice=High[Highest(NULL, 0, MODE_HIGH, LengthSession2*60/Period(), 0)];
		
		Print("Determine Low: " + LowestPrice + " and High: " + HighestPrice + " for timephase " + TimeToStr(Time[240/Period()]) + " - " + TimeToStr(Time[0]));

		Price = HighestPrice+PipsForEntry*Point;

   	if (TakeProfit>0) 
   	{  
   	tp=Price+TakeProfit*Point;
		} 
		else 
		{
		tp=0; 
		}
	
		if (InitialStopLoss>0) 
		{ 	
         if((Price-InitialStopLoss*Point)<LowestPrice-PipsForEntry*Point) 
         { 
            sl = LowestPrice-PipsForEntry*Point;
         } 
         else 
         {                                        
            sl = Price-InitialStopLoss*Point;
         }
		} 
		else 
		{
		sl=0; 
		}



		if (!Order[3]) ticket=OrderSendExtended(Symbol(),OP_BUYSTOP,Lots,Price,Slippage,sl,tp,setup,(MagicNumber+3),Validity,Green); 

		Price = LowestPrice-PipsForEntry*Point;

   	if (TakeProfit>0) 
   	{  
   	tp=Price-TakeProfit*Point;
		} 
		else 
		{
		tp=0; 
		}
		
		if (InitialStopLoss>0) 
		{ 	
         if((Price+InitialStopLoss*Point)>HighestPrice+PipsForEntry*Point) 
         { 
            sl = HighestPrice+PipsForEntry*Point;
         } 
         else 
         {                                         
            sl = Price+InitialStopLoss*Point;
         }
		} 
		else 
		{
		sl=0; 
		}

      Sleep(OrderInterval);
      
		if (!Order[4]) ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,sl,tp,setup,(MagicNumber+2),Validity,Green); 
		      
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DIVERSE SUBROUTINES   /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int func_Symbol2Val(string symbol) {
	if(symbol=="AUDUSD") {	return(01);

	} else if(symbol=="CHFJPYm") {	return(02);

	} else if(symbol=="EURAUD") {	return(10);
	} else if(symbol=="EURCAD") {	return(11);
	} else if(symbol=="EURCHF") {	return(12);
	} else if(symbol=="EURGBP") {	return(13);
	} else if(symbol=="EURJPY") {	return(14);
	} else if(symbol=="EURUSD") {	return(15);

	} else if(symbol=="GBPCHF") {	return(20);
	} else if(symbol=="GBPJPY") {	return(21);
	} else if(symbol=="GBPUSD") { return(22);


	} else if(symbol=="USDCAD") {	return(40);
	} else if(symbol=="USDCHF") {	return(41);
	} else if(symbol=="USDJPY") {	return(42);


	} else if(symbol=="GOLD") {	return(90);
	} else {	Comment("unexpected Symbol"); return(0);
	}
}

int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
   
   datetime    OldCurTime;
   int         timeout=5;
   int         ticket=0;
   int         err1;
   
   if (!IsTesting()) 
   {
         MathSrand(LocalTime());
         Sleep(MathRand()/6);
   }

   OldCurTime=CurTime();
   
   while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) 
   {
      
         if(OldCurTime+timeout<=CurTime()) 
         {
         Print("Error in OrderSendExtended(): Timeout encountered");
         return(0); 
         }
      
         Sleep(OrderInterval/10);
   }
     
   ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
   Sleep (OrderInterval+5000);
      
   err1 = GetLastError();
   		
	if (err1==130)
	{
         ticket=OrderSend(symbol, cmd, volume, Ask, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
         Sleep (OrderInterval+5000);
   } 
     
   while (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
   {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
         Sleep (OrderInterval+5000);
         
         err1 = GetLastError();

         if (err1==130)
	      {
         ticket=OrderSend(symbol, cmd, volume, Ask, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
         Sleep (OrderInterval+5000);
         } 
  
         if (err1 > 0)
         {
         Print("error(",err1,"): ",ErrorDescription(err1));
         }
        
   }
   
   return(ticket);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---