Mighty_mGRIDrepair





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


#property copyright "Copyright 2006, mightyhitter"
#property link      ""


extern double TakeProfit = 20;
extern double StopLoss = 20;
extern double Lots = 0.1;
extern double MaxLots = 1000.00;
extern int MagicNumber = 8030097;
extern bool Debug=false;

//global vars
double NewBar=0;
bool IsNewBar=true;
double MyLots;

//array
int gl_OrderTicket[100];
int gl_OrderType[100];
double gl_OrderPips[100];
double gl_OrderLots[100];

int start(){
   int cnt, ticket;
   if(Bars<300){
      Print("bars less than 100");
      return(0);
   }
   if(Bars>NewBar)
   {
      IsNewBar=true;
      NewBar=Bars;
   }else{IsNewBar=false;}

   CheckOrders();
   if(Debug){
      PrintVars();
   }

}

int EnterOrder(int bs)
{
int ticket;
   
   //check margin
   if(AccountFreeMargin()<(1000*Lots)){
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);
   }
   //buy
   if (bs==1)
   {
            ticket=OrderSend(Symbol(),OP_BUY,MyLots,Ask,3,0,0, "mmatingale Long",MagicNumber,0,Green);
            if(ticket>0){
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {Print("BUY order opened : ",OrderOpenPrice());}
            }
            else Print("Error opening BUY order : ",GetLastError());
            return(ticket);
   }
   //sell
   if (bs==2)
   {
            ticket=OrderSend(Symbol(),OP_SELL,MyLots,Bid,3,0,0, "mmatingale Short",MagicNumber,0,Red);
            if(ticket>0) {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {Print("SELL order opened : ",OrderOpenPrice());}
            }
            else Print("Error opening SELL order : ",GetLastError());
            return(ticket);   
   }
   
}



void CheckOrders()
{
   int cnt,ticket;
   int total=OrdersTotal();

   ArrayInitialize(gl_OrderTicket,0);
   ArrayInitialize(gl_OrderType,0);
   ArrayInitialize(gl_OrderPips,0);
   ArrayInitialize(gl_OrderLots,0);
      
   int mc=0;  

   for(cnt=0;cnt<total;cnt++) {//3
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) {//2 
         if((OrderType()==OP_SELL||OrderType()==OP_BUY)&&OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol())
         {
         gl_OrderTicket[mc]=OrderTicket();
         if(OrderType()==OP_SELL)
            {
            gl_OrderType[mc]=2;
            gl_OrderPips[mc]=(OrderOpenPrice()-Ask)/Point;
            }
         if(OrderType()==OP_BUY)
            {
            gl_OrderType[mc]=1;
            gl_OrderPips[mc]=(Bid-OrderOpenPrice())/Point;
            }
         gl_OrderLots[mc]=OrderLots();
         mc++;
         }
      }//2
   
   }//3
   int LastValue=GetLastValue();
   //Print(LastValue);
   if(LastValue==0)
   {  
      UpdateVars();
      EnterOrder(2);
   }
   else
   {
      if(gl_OrderPips[LastValue-1]>=TakeProfit)CloseOrdersAll();
      if(gl_OrderPips[LastValue-1]<=(0-StopLoss)&&gl_OrderType[LastValue-1]==1){UpdateVars();EnterOrder(2);}
      if(gl_OrderPips[LastValue-1]<=(0-StopLoss)&&gl_OrderType[LastValue-1]==2){UpdateVars();EnterOrder(1);}
   }
}


int TotalOrders(int BSType)
 {
   int cnt,bs1=0,bs2=0;
   for(cnt=0;cnt<OrdersTotal();cnt++) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); 
      if(OrderType()==OP_BUY && BSType==1 && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())bs1++;
      if(OrderType()==OP_SELL && BSType==2 && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())bs2++;
   }
   if(BSType==1)return(bs1);
   if(BSType==2)return(bs2);
   return(-1);
 }
 
 
void UpdateVars()
 {
   int cnt; 
   int LastValue=GetLastValue();
   if(LastValue==0)MyLots=Lots;
   if(LastValue==1)MyLots=gl_OrderLots[LastValue-1]*3;
   if(LastValue>1)MyLots=gl_OrderLots[LastValue-1]*2+gl_OrderLots[LastValue-2];
 } 
 
 
void CloseOrdersAll()
{
  PrintVars();
  int total = OrdersTotal();
  for(int cnt=total-1;cnt>=0;cnt--)
  {
    OrderSelect(cnt, SELECT_BY_POS);
    if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
    {
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
                          
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      Sleep(3000);
    } 
    } 
  }
  if(TotalOrders(1)>0||TotalOrders(2)>0)CloseOrdersAll();
  
}

void PrintVars()
{
      string msg="";
      string otype="";
      double WLots=0,LLots=0;
      int LastValue=GetLastValue();
      if(LastValue>0){
      for(int j=0;j<LastValue;j++)
      {
      if(gl_OrderType[j]==1)otype="BUY";
      if(gl_OrderType[j]==2)otype="SELL";
      msg=msg+"["+gl_OrderTicket[j]+","+otype+","+DoubleToStr(gl_OrderPips[j],0)+","+DoubleToStr(gl_OrderLots[j],2)+"] ";
      if(gl_OrderPips[j]>0)WLots=WLots+gl_OrderPips[j]*gl_OrderLots[j];
      if(gl_OrderPips[j]<0)LLots=LLots+gl_OrderPips[j]*gl_OrderLots[j];
      }
      msg=msg+"(H/L: "+DoubleToStr(gl_OrderPips[ArrayMaximum(gl_OrderPips)],0)+"/"+DoubleToStr(gl_OrderPips[ArrayMinimum(gl_OrderPips)],0)+") ";
      msg=msg+"(W/L: "+DoubleToStr(WLots,0)+"/"+DoubleToStr(LLots,0)+") ";
      Print(msg);}
}

int GetLastValue()
{
   int cnt,LastValue=0;
   for(cnt=ArraySize(gl_OrderTicket)-1;cnt>=0;cnt--)
   {
      if(gl_OrderTicket[cnt]!=0)
      {
         LastValue=cnt+1;
         cnt=-1;   
      }
   }
   return(LastValue);
}



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached
Checks for the total of open orders
It Closes Orders by itself

Other Features:


BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.91 Total Net Profit:-9426.01

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.58 Total Net Profit:-11957.75

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.58 Total Net Profit:-9856.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.69 Total Net Profit:-9022.39

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.78 Total Net Profit:-9548.39

Request Backtest for Mighty_mGRIDrepair


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: