10 points 3_v2

Author: Copyright � 2005, Alejandro Galindo
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
MACD Histogram
0 Views
0 Downloads
0 Favorites

Profitability Reports

GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
10 points 3_v2
//+------------------------------------------------------------------+
//|                                                   10 points 3.mq4 |
//|                              Copyright © 2005, Alejandro Galindo |
//|                                              http://elCactus.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Alejandro Galindo"
#property link      "http://elCactus.com"
//----
extern double TakeProfit = 10;
extern double Lots = 1.2;
extern double InitialStop = 110;
extern double TrailingStop = 10;
//----
extern int MaxTrades = 12;
extern int Pips = 15;
extern int SecureProfit = 10;
extern int AccountProtection = 1;
extern int OrderstoProtect = 6;
extern int ReverseCondition = 261;
extern double EURUSDPipValue = 40;
extern double GBPUSDPipValue = 10;
extern double USDCHFPipValue = 10;
extern double USDJPYPipValue = 9.715;
extern int StartYear = 2005;
extern int StartMonth = 1;
extern int EndYear = 2009;
extern int EndMonth = 12;
extern int EndHour = 22;
extern int EndMinute = 30;
extern int mm = 0;
extern int risk = 12;
extern int AccountisNormal = 0;
//----
int  OpenOrders = 0, cnt = 0;
int  slippage = 5;
double sl = 0, tp = 0;
double BuyPrice = 0, SellPrice = 0;
double lotsi = 0, mylotsi = 0;
int mode = 0, myOrderType = 0;
bool ContinueOpening = True;
double LastPrice = 0;
int  PreviousOpenOrders = 0;
double Profit = 0;
int LastTicket = 0, LastType = 0;
double LastClosePrice = 0, LastLots = 0;
double Pivot = 0;
double PipValue = 0;
string text = "", text2 = "";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---- 
   if(AccountisNormal == 1)
	      if(mm != 0) 
	          lotsi = MathCeil(AccountBalance()*risk / 10000); 
		     else
		         lotsi = Lots; 
   else 
       // then is mini
       if(mm != 0) 
           lotsi = MathCeil(AccountBalance()*risk / 10000) / 10; 
		     else 
		         lotsi = Lots; 
//----
   if(lotsi > 100)
       lotsi = 100; 
   OpenOrders = 0;
//----
   for(cnt = 0; cnt < OrdersTotal(); cnt++)   
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	      if(OrderSymbol() == Symbol())
	  	       OpenOrders++;
     }     
//----
   if(OpenOrders < 1) 
     {
	      if(TimeYear(CurTime()) < StartYear) 
	          return(0);  
	      //----
       if(TimeMonth(CurTime()) < StartMonth) 
	          return(0); 
	      //----
       if(TimeYear(CurTime()) > EndYear) 
	          return(0); 
	      //----
       if(TimeMonth(CurTime()) > EndMonth ) 
	          return(0); 
     }
//----
   if(Symbol() == "EURUSD") 
       PipValue = EURUSDPipValue; 
//----
   if(Symbol() == "GBPUSD") 
       PipValue = GBPUSDPipValue; 
//----
   if(Symbol() == "USDJPY") 
       PipValue = USDJPYPipValue; 
//----
   if(Symbol() == "USDCHF") 
       PipValue = USDCHFPipValue; 
//----
   if(PipValue == 0) 
       PipValue = 5; 
//----
   if(PreviousOpenOrders > OpenOrders) 
     {	  
	      for(cnt=OrdersTotal();cnt>=0;cnt--)
	        {
	          OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	  	       mode = OrderType();
		         //----
           if(OrderSymbol() == Symbol()) 
		           {
			            if(mode == OP_BUY) 
			                OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Blue); 
			            //----
               if(mode == OP_SELL) 
			                OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Red); 
			            return(0);
		           }
	        }
     }
   PreviousOpenOrders = OpenOrders;
//----
   if(OpenOrders >= MaxTrades) 
	      ContinueOpening = False;
   else 
	      ContinueOpening = True;
//----
   if(LastPrice == 0) 
     {
	      for(cnt = 0; cnt < OrdersTotal(); cnt++)
	        {	
	          OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
		         mode = OrderType();	
		         //----
           if(OrderSymbol() == Symbol()) 
		           {
			            LastPrice = OrderOpenPrice();
			            //----
               if(mode == OP_BUY) 
			                myOrderType = 2; 
			            //----
               if(mode == OP_SELL) 
			                myOrderType=1;	
		           }
	        }
     }
//----
   if(OpenOrders < 1) 
     {
	      myOrderType = 3;
	      //----
       if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN,1) > 
	         iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 2)) 
	          myOrderType = 2; 
	      //----
       if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 1) < 
	         iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 2)) 
	          myOrderType=1; 
	      //----
       if(ReverseCondition == 1)
	  	       if(myOrderType == 1) 
	  	           myOrderType = 2; 
		         else 
		             if(myOrderType == 2) 
		                 myOrderType = 1; 
     }
   // if we have opened positions we take care of them
   for(cnt = OrdersTotal(); cnt >= 0; cnt--)
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	      //----
       if(OrderSymbol() == Symbol()) 
	        {	
	  	       if(OrderType() == OP_SELL) 
	  	  	        if(TrailingStop > 0) 
				               if(OrderOpenPrice() - Ask >= (TrailingStop + Pips)*Point) 		
					                  if(OrderStopLoss() > (Ask + Point*TrailingStop))
					                    {			
					                      OrderModify(OrderTicket(), OrderOpenPrice(), 
					                                  Ask + Point*TrailingStop, 
					                            OrderClosePrice() - TakeProfit*Point - TrailingStop*Point, 
					                                  800, Purple);
	  					                   return(0);	  					
	  				                  }
	  	       //----
           if(OrderType() == OP_BUY)
	  		          if(TrailingStop > 0) 
			                if(Bid - OrderOpenPrice() >= (TrailingStop + Pips)*Point) 
					                  if(OrderStopLoss() < (Bid - Point*TrailingStop)) 
					                    {					   
					                      OrderModify(OrderTicket(), OrderOpenPrice(), 
					                                  Bid - Point*TrailingStop, 
					                               OrderClosePrice() + TakeProfit*Point + TrailingStop*Point,
					                                  800, Yellow);
                           return(0);
					                    }
   	     }
     }
   Profit = 0;
   LastTicket = 0;
   LastType = 0;
	  LastClosePrice = 0;
	  LastLots = 0;	
//----
	  for(cnt = 0; cnt < OrdersTotal(); cnt++)
	    {
	      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	      //----
       if(OrderSymbol() == Symbol()) 
	        {			
	  	       LastTicket = OrderTicket();
			        //----
           if(OrderType() == OP_BUY) 
			            LastType = OP_BUY; 
			        //----
           if(OrderType() == OP_SELL) 
			            LastType = OP_SELL; 
			        LastClosePrice = OrderClosePrice();
			        LastLots = OrderLots();
			        //----
           if(LastType == OP_BUY) 
			          {			
				           if(OrderClosePrice() < OrderOpenPrice())
					              Profit = Profit - (OrderOpenPrice() - OrderClosePrice())*OrderLots() / Point;
				           //----
               if(OrderClosePrice() > OrderOpenPrice()) 
					              Profit = Profit + (OrderClosePrice() - OrderOpenPrice())*OrderLots() / Point;
			          }
			        //----
           if(LastType == OP_SELL) 
		           {
			            if(OrderClosePrice() > OrderOpenPrice()) 
				               Profit=Profit - (OrderClosePrice() - OrderOpenPrice())*OrderLots() / Point;
			            //----
               if(OrderClosePrice() < OrderOpenPrice()) 
				               Profit=Profit+(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; 
		           }
	        }
     }
	  Profit = Profit*PipValue;
	  text2 = "Profit: $" + DoubleToStr(Profit, 2) + " +/-";
//----
   if(OpenOrders >= (MaxTrades - OrderstoProtect) && AccountProtection == 1) 
     {	    
	      if(Profit >= SecureProfit) 
	        {
	          OrderClose(LastTicket, LastLots, LastClosePrice, slippage, Yellow);		 
	          ContinueOpening = False;
	          return(0);
	        }
     }
//----
   if(!IsTesting()) 
     {
	      if(myOrderType == 3) 
	          text = "No conditions to open trades"; 
	      else 
	          text="                         "; 
	      Comment("LastPrice=", LastPrice, " Previous open orders=", PreviousOpenOrders, 
	              "\nContinue opening=", ContinueOpening, " OrderType=", myOrderType, "\n", 
	              text2, "\nLots=", lotsi, "\n", text);
     }
//----
   if(myOrderType == 1 && ContinueOpening) 
     {	
	      if((Bid - LastPrice) >= Pips*Point || OpenOrders < 1) 
	        {		
		         SellPrice = Bid;				
		         LastPrice = 0;
		         //----
           if(TakeProfit == 0) 
		             tp = 0; 
		         else 
		             tp = SellPrice - TakeProfit*Point; 
		         //----
           if(InitialStop == 0) 
		             sl=0; 
		         else 
		             sl=SellPrice+InitialStop*Point;  
		         //----
           if(OpenOrders != 0) 
		           {
			            mylotsi=lotsi;			
			            //----
               for(cnt = 1; cnt <= OpenOrders; cnt++)
				               if(MaxTrades > 12) 
				                   mylotsi = NormalizeDouble(mylotsi*1.5, 1); 
				               else 
				                   mylotsi = NormalizeDouble(mylotsi*2, 1); 
		           } 
		         else 
		             mylotsi = lotsi; 
		         //----
           if(mylotsi > 100) 
		             mylotsi = 100; 
		         OrderSend(Symbol(), OP_SELL, mylotsi, SellPrice, slippage, sl, tp, NULL, 0, 0, Red);		    		    
		         return(0);
	        }
     }
//----
   if(myOrderType == 2 && ContinueOpening) 
     {
	      if((LastPrice - Ask) >= Pips*Point || OpenOrders < 1) 
	        {		
		         BuyPrice = Ask;
		         LastPrice = 0;
		         //----
           if(TakeProfit == 0) 
		             tp = 0; 
		         else 
		             tp = BuyPrice + TakeProfit*Point; 
		         //----
           if(InitialStop == 0)  
		             sl = 0; 
		         else 
		             sl = BuyPrice - InitialStop*Point; 
		         //----
           if(OpenOrders != 0) 
		           {
			            mylotsi = lotsi;			
			            //----
               for(cnt = 1; cnt <= OpenOrders; cnt++)
			              {
				               if(MaxTrades > 12) 
				                   mylotsi = NormalizeDouble(mylotsi*1.5, 1); 
				               else 
				                   mylotsi = NormalizeDouble(mylotsi*2, 1);
			              }
		           } 
		         else 
		             mylotsi = lotsi; 
           //----
           if(mylotsi > 100) 
               mylotsi = 100; 
           OrderSend(Symbol(), OP_BUY, mylotsi, BuyPrice, slippage, sl, tp, NULL, 0, 0, Blue);		    
           return(0);
	        }
     }   
//----
   return(0);
  }
//+------------------------------------------------------------------+

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 ---