Zs1_www.forex-instruments.info





//+------------------------------------------------------------------+
//|                                                   Gen4sp         |
//|                 Copyright © 2000-2007, MetaQuotes Software Corp. |
//|                                         http://www.metaquotes.ru |
//+------------------------------------------------------------------+
#property copyright "Gen4sp"
#property link      ""
//---- input parameters --- trade system for usdchf
extern int Orders_Space=50;
extern int pk=10;
extern double Lots=0.1;
//----
double LastProfit=0;
double StopLoss;
double LastPrice;
double FirstPrice;
double q;
double step;
//----
 int LastOrder=-1;
 int FirstOrder=-1;
 int orders;
 int zone=0;
 int LastZone=0;
 int count=0;
 int firstflag=0;
 int BOrders[];
 int SOrders[];
 int tunelots[20];
 bool GlobalPizdec=false;
 bool flag=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   StopLoss=Orders_Space*140;
   //
   tunelots[0]=1;
   tunelots[1]=3;
   tunelots[2]=6;
   tunelots[3]=12;
   tunelots[4]=24;
   tunelots[5]=48;
   tunelots[6]=96;
   tunelots[7]=192;
   tunelots[8]=384;
   tunelots[9]=768;
   tunelots[10]=1536;
   tunelots[11]=3072;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   orders=OrdersTotal();
   //
   if(firstflag!=0){ CheckZone();}
   if(firstflag==0){ OpenFirst();}
     if(flag==true)
     {
      if(firstflag==1){ZoneF1();}
        if(firstflag==2)
        {
           if(FirstOrder==0)
           {
              switch(zone)
              {
                  case -2: Zone_2();break;
                  case -1: Zone_1();break;
                  case 0: Zone0();break;
                  case 1: Zone1();break;
                  case 2: Zone1();break;
              }
          }
                    if(FirstOrder==1)
                    {
                       switch(zone)
                       {
                           case 2: Zone_2();break;
                           case 1: Zone_1();break;
                           case 0: Zone0();break;
                           case -1: Zone1();break;
                           case -2: Zone1();break;
                          }
                       }
                          }
                             }
                                   if ((getTotalProfit()>=0)&&(OrdersTotal()>=3))
                                   {
                                    CloseAllOrders();
                                   }
/*
if ((OrdersTotal()>=12))
{
CloseAllOrders();
}*/
                                 return(0);
                                }                                 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void ZoneF1()
                                      {
                                       flag=false;
                                       CloseFirstOrders();
                                      }                                                                      
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void Zone_2()
                                      {
                                       flag=false;
                                       if(getTotalProfit()>0)
                                       {
                                       CloseAllOrders();
                                       }
                                       else
                                       {OpenAnother();
                                       }
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void Zone_1()
                                      {
                                       flag=false;
                                       if(FirstOrder==0){OpenSellOrder();}
                                       if(FirstOrder==1){OpenBuyOrder();}
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void Zone0()
                                      {
                                       flag=false;
                                       if(FirstOrder==1){OpenSellOrder();}
                                       if(FirstOrder==0){OpenBuyOrder();}
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void Zone1()
                                      {
                                       flag=false;
                                       if(getTotalProfit()>0){CloseAllOrders();}else{OpenAnother();}
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      bool OpenFirst()
                                      {
                                       if (OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lots,1),Ask,3,Ask-StopLoss*Point,0,zone+":",0,0,Blue)==-1) return(false);
                                       if (OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lots,1),Bid,3,Bid+StopLoss*Point,0,zone+":",0,0,Yellow)==-1) return(false);
                                       FirstPrice=Close[0];
                                       firstflag=1;
                                       flag=false;
                                       return(true);
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      bool OpenBuyOrder()
                                      {
                                       if (OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lots*Lots(),1),Ask,3,Ask-StopLoss*Point,0,zone+":",0,0,Blue)==-1) return(false);
                                       LastOrder=0;
                                       LastPrice=Ask;
                                       return(true);
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      bool OpenSellOrder()
                                      {
                                       if (OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lots*Lots(),1),Bid,3,Bid+StopLoss*Point,0,zone+":",0,0,Yellow)==-1) return(false);
                                       LastOrder=1;
                                       LastPrice=Bid;
                                       return(true);
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      bool OpenAnother()
                                      {
                                       if(LastOrder==0){OpenSellOrder();}
                                       if(LastOrder==1){OpenBuyOrder();}
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void CloseAllOrders()
                                      {
                                       LastProfit=getTotalProfit();
                                         while(OrdersTotal()>0)
                                         {
                                          OrderSelect(0,SELECT_BY_POS);
                                          if (OrderType()==OP_BUY)
                                          {
                                                 OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,Orange);
                                          }
                                          else if (OrderType()==OP_SELL)
                                          {
                                                 OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,Red);
                                          }
                                         }
                                       zone=0;
                                       GlobalPizdec=false;
                                       LastZone=0;
                                       LastOrder=(-1);
                                       FirstPrice=0;
                                       FirstOrder=-1;
                                       firstflag=0;
                                       flag=false;
                                       return(0);
                                      }                                   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      void CloseFirstOrders()
                                      {
                                         for(int j=0;j<=1;j++)
                                         {
                                          OrderSelect(j,SELECT_BY_POS);
                                            if (OrderType()==OP_BUY && OrderProfit()>0)
                                            {
                                             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,Orange);
                                             //OpenSellOrder();
                                            firstflag=2;flag=false;FirstOrder=1;LastOrder=1;return(0);
                                            }
                                          if (OrderType()==OP_SELL && OrderProfit()>0)
                                          { 
                                             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,Red);firstflag=2;flag=false;FirstOrder=0;LastOrder=0;return(0);
                                          }
                                         }
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                    double getTotalProfit(){return(AccountEquity()-AccountBalance());
                                    }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      bool CheckZone()
                                      {
                                       if(FirstPrice==0)
                                       {
                                          return(0);
                                       }
                                         if(LastOrder==1)
                                         {
                                          double bid=Bid+Point*pk;
                                          if(bid>=FirstPrice+(Orders_Space*Point*(zone+1))){LastZone=zone;zone++;flag=true;return(0);}
                                          if(bid<=FirstPrice+(Orders_Space*Point*(zone-1))){LastZone=zone;zone--;flag=true;return(0);}
                                         }
                                         if(LastOrder==0)
                                         {
                                          double ask=Ask-Point*pk;
                                          if(ask>=FirstPrice+(Orders_Space*Point*(zone+1))){LastZone=zone;zone++;flag=true;return(0);}
                                          if(ask<=FirstPrice+(Orders_Space*Point*(zone-1))){LastZone=zone;zone--;flag=true;return(0);}
                                         }
                                         if(LastOrder==(-1))
                                         {
                                          if(Close[0]>=FirstPrice+(Orders_Space*Point*(zone+1))){LastZone=zone;zone++;flag=true;return(0);}
                                          if(Close[0]<=FirstPrice+(Orders_Space*Point*(zone-1))){LastZone=zone;zone--;flag=true;return(0);}
                                         }
                                       return(0);
                                      }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
                                      double Lots()
                                      {
                                       int k=1;
                                         if((zone==0 || zone==(-1)) && orders>=1 && FirstOrder==0)
                                         {
                                          k=tunelots[OrdersTotal()];
                                         }
                                         if((zone==0 || zone==1) && orders>=1 && FirstOrder==1)
                                         {
                                          k=tunelots[OrdersTotal()];
                                         }
                                       if(k>0){return(k);}else{return(1);
                                       }
                                      }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

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

It Closes Orders by itself

Other Features: