Navigation:Home > Content >

CCI_MA_v1.5_(1).mq4

Time: 2013-07-19 | Download file:CCI_MA_v1.5_(1).mq4

//+------------------------------------------------------------------+
//|                                                       RSI_MA.mq4 |
//|                   Copyright © 2008,  AEliseev k800elik@gmail.com |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008,  Andrey E. k800elik@gmail.com"
#property link      "http://www.metaquotes.net"

//---- input parameters
extern int       CCI_Per=14;
extern int       MA_Per=9;
extern int       CCI_close_Per=14;
extern double    TakeProfit=50;
extern double    StopLoss=40;
extern double    Lots=0.1;
extern int       Deposit=1000;
extern bool      MM=false;  
extern int       _MagicNumber = 13131313; 
extern int       _Sleep=5000;     

int LotA=1, Err=0;
int j=0, var2,var1;
int counter=0;
int ticket;
     bool var3;

bool order=false;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   Comment("CCI_MA v1.5 © 2008,  Andrey E. k800elik@gmail.com");
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
/*  int i, a1, a2;
//----
  if (OrdersTotal()>0)
      {
       for (i=0; i==OrdersTotal(); i++) 
         {
          OrderSelect(i,SELECT_BY_POS);
          if (OrderMagicNumber()==131313)
             { 
              a1=OrderClose(LotA*Lots,Ask,5,Red);
              //a2=OrderClose(var1,LotA*Lots,Ask,5,Red);
             }
         }
      } */
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if (isNewBar()) EveryBar(); 
   EveryTick();
 //----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Проверка на появление нового бара                                           |
//+------------------------------------------------------------------+
bool isNewBar()
   {  static datetime TimeBar=0;
      bool flag=false;
      if(TimeBar!=Time[0])
         {
          TimeBar=Time[0];
          flag=true;
         } 
      return (flag);
   }
   
//+------------------------------------------------------------------+
//| Выполняем действия при появлении нового бара                                            |
//+------------------------------------------------------------------+
void EveryBar()
   {
    //  Print("Пришел НОВЫЙ БАР!");
      double MA[100], CCI[100], CCIclose[100], StandDevi[100];
      int    i,limit=ArraySize(CCI);
      double SL, TP;
 
     Sleep(_Sleep);
     
      SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
      TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
      
     
     for(i=0; i100) && (CCIclose[1]<=100)) || (CCI[1]=MA[limit-MA_Per-2]))
            {
                //---- закрываем позицию
                if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 10, Green ) )
                {
                    _GetLastError = GetLastError();
                    Print( "Ошибка OrderClose № ", _GetLastError );
                    Err=1;
                    return(-1);
                }
            }
// если сигнал не изменился, выходим - пока рано открывать 
// новую позицию
            else
            { return(0); }
        }
        //---- если открыта СЕЛЛ-позиция,
        if ( OrderType() == OP_SELL )
        {
            //---- если ССI пересекает линию -100 вверх,
            if (((CCIclose[2]<-100) && (CCIclose[1]>=-100)) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<=MA[limit-MA_Per-2])))
            {
                //---- закрываем позицию
                if(!OrderClose( OrderTicket(), OrderLots(), Ask, 10, Red ) )
                {
                    _GetLastError = GetLastError(); 
                    Print( "Ошибка OrderClose № ", _GetLastError );
                    Err=2;
                    return(-1);
                }
            }
// если сигнал не изменился, выходим - пока рано открывать 
// новую позицию
            else return(0);
        }
    }
 
//+------------------------------------------------------------------+
//| если выполнение дошло до этого места, значит открытой позиции нет|
//| проверяем, есть ли возможность открыть позицию                   |
//+------------------------------------------------------------------+
 
 Sleep(_Sleep);
 
    //---- если ССI пересёк MACD снизу вверх ,
   SL = NormalizeDouble(Bid - StopLoss*Point, Digits);
   TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);
   if ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]MA[limit-MA_Per-2]))
    {
        //---- открываем СЕЛЛ позицию
        if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 5, SL, TP, "CCI_test_close", _MagicNumber, 0, Red ) < 0 )
        {
            _GetLastError = GetLastError();
            Print( "Ошибка OrderSend OP_SELL № ", _GetLastError );
            Err=4;
            return(-1);
        }
        return(0);
    }
 }  
//+------------------------------------------------------------------+
//| Выполняем вычисления при каждом изменении цены                                           |
//+------------------------------------------------------------------+   
void EveryTick()
     {
      int i;
      if (MM==true)
         {
            if (AccountBalance()>(2*Deposit)) LotA=2; 
            if (AccountBalance()>(3*Deposit)) LotA=3; 
            if (AccountBalance()>(4*Deposit)) LotA=4; 
            if (AccountBalance()>(5*Deposit)) LotA=5; 
            if (AccountBalance()>(6*Deposit)) LotA=6; 
            if (AccountBalance()>(7*Deposit)) LotA=7; 
            if (AccountBalance()>(8*Deposit)) LotA=8; 
            if (AccountBalance()>(9*Deposit)) LotA=9; 
            if (AccountBalance()>(10*Deposit)) LotA=10; 
            if (AccountBalance()>(11*Deposit)) LotA=11; 
            if (AccountBalance()>(12*Deposit)) LotA=12; 
            if (AccountBalance()>(13*Deposit)) LotA=13; 
            if (AccountBalance()>(14*Deposit)) LotA=14; 
            if (AccountBalance()>(15*Deposit)) LotA=15; 
            if (AccountBalance()>(16*Deposit)) LotA=16; 
            if (AccountBalance()>(17*Deposit)) LotA=17; 
            if (AccountBalance()>(18*Deposit)) LotA=18; 
            if (AccountBalance()>(19*Deposit)) LotA=19;
            if (AccountBalance()>(20*Deposit)) LotA=20;
          }  
          
   int _GetLastError = 0, _OrdersTotal = OrdersTotal();
   int z;
   double SL, TP;
   double MA[100], CCI[100], CCIclose[100], StandDevi[100];
   int    limit=ArraySize(CCI);
   for(i=0; i= 0; z -- )
         {
          if ( !OrderSelect( z, SELECT_BY_POS ) )
            {
             _GetLastError = GetLastError();
             Print( "OrderSelect( " ,z, ", SELECT_BY_POS ) - Error #", _GetLastError);
             continue;
            }
         if ( OrderSymbol() != Symbol() ) continue;
         if ( OrderMagicNumber() != _MagicNumber ) continue;
         if ( OrderType() == OP_BUY )
            {
             if (((CCIclose[2]>100) && (CCIclose[1]<=100)) || (CCI[1]=MA[limit-MA_Per-2]))
               {
                if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )
                  {
                   _GetLastError = GetLastError();
                   Print( "Ошибка CASE OrderClose № ", _GetLastError );
                   Err=1;
                   return(-1);
                  }
                else Err=0; 
               } 
            }
         }   
      break;
 //=============================================================================     
    case 2:
      for ( z=_OrdersTotal - 1; z >= 0; z -- )
         {
          if ( !OrderSelect( z, SELECT_BY_POS ) )
             {
              _GetLastError = GetLastError();
              Print( "OrderSelect( " ,z, ", SELECT_BY_POS ) - Error #", _GetLastError);
              continue;
             }
         if ( OrderSymbol() != Symbol() ) continue;
         if ( OrderMagicNumber() != _MagicNumber ) continue;
         if ( OrderType() == OP_SELL )
            {
             if (((CCIclose[2]<-100) && (CCIclose[1]>=-100)) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<=MA[limit-MA_Per-2])))           
               {
                if(!OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red ) )
                  {
                   _GetLastError = GetLastError(); 
                   Print( "Ошибка CASE OrderClose № ", _GetLastError );
                   Err=2;
                   return(-1);
                  }
                else Err=0;   
               }
            }
         }  
      break; 
  //==============================================================================        
    case 3:
      SL = NormalizeDouble(Bid - StopLoss*Point, Digits);
      TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);
      if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 7, SL, TP, "AI_test_buy", _MagicNumber, 0, Green ) < 0 )
        {
         _GetLastError = GetLastError();
         Print( "Ошибка CASE OrderSend OP_BUY № ", _GetLastError );
         Err=3;
         return(-1);
        }
      else Err=0;  
      break;
 //===================================================================================     
    case 4:
      SL = NormalizeDouble(Ask + StopLoss*Point, Digits);
      TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);
      if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 7, SL, TP, "AI_test_close", _MagicNumber, 0, Red ) < 0 )
        {
         _GetLastError = GetLastError();
         Print( "Ошибка CASE OrderSend OP_SELL № ", _GetLastError );
         Err=4;
         return(-1);
        }
      else Err=0;  
      break;
   }         
 
      
   }

Recommend