Глючит советник - страница 2

 
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>

CPositionInfo  a_position;
CTrade        a_trade;
CSymbolInfo   a_symbol;

//+------------------------------------------------------------------+
//|                                                      massivi.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include  <Trade\Trade.mqh>
CTrade  trader;

#define simbols_number 19


string     symbols[simbols_number];
int        indexes[simbols_number];
double     Cprices [simbols_number];
double     Oprices[simbols_number];
double     PointsSL [simbols_number];
double     PointsTP [simbols_number];
int        TPs   [simbols_number];
int        SLs   [simbols_number];
bool      invertor[simbols_number];
bool      history = true;
double    profit[simbols_number];
int       types[simbols_number];



// по текущий момент
int trade; 
bool  started=true;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int v;

string  symbol1  = "EURUSD";
string  symbol2 = "EURCHF";
string  symbol3 = "EURAUD";
string  symbol4 = "EURCAD";
string  symbol5 = "EURGBP";
string  symbol6 = "EURNZD";
string  symbol7 = "AUDUSD";
string  symbol8 = "AUDCAD";
string  symbol9 = "AUDCHF";
string  symbol10= "AUDNZD";
string  symbol11  = "GBPUSD";
string  symbol12 = "GBPCAD";
string  symbol13 = "GBPCHF";
string  symbol14 = "GBPNZD";
string  symbol15 = "GBPAUD";
string  symbol16  = "USDCAD";
string  symbol17  = "USDCHF";
string  symbol18  = "NZDUSD";
string  symbol19 = "CADCHF";

int  TP1;
int  TP2;
int  TP3;
int  TP4;
 int  TP5;
 int  TP6;
 int  TP7;
 int  TP8;
 int  TP9;
 int  TP10;
 int  TP11;
 int  TP12;
 int  TP13;
 int  TP14;
 int  TP15;
 int  TP16;
 int  TP17;
 int  TP18;
 int  TP19;

 int  SL1;
 int  SL2;
 int  SL3;
 int  SL4;
 int  SL5;
 int  SL6;
 int  SL7;
 int  SL8;
 int  SL9;
 int  SL10;
 int  SL11;
 int  SL12;
 int  SL13;
 int  SL14;
 int  SL15;
 int  SL16;
 int  SL17;
 int  SL18;
 int  SL19;
 
 
double  Lot = 0.01;
/*
 int  index1;
 int  index2=2;
 int  index3=3;
 int  index4=4;
 int  index5=5;
 int  index6=6;
 int  index7=7;
 int  index8=8;
 int  index9=9;
 int  index10=10;
 int  index11=11;
 int  index12=12;
 int  index13=13;
 int  index14=10;
 int  index15=10;
 int  index16=10;
 int  index17=10;
 int  index18=10;
 int  index19=10;
*/
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer 
   VI(0,symbol1,TP1,SL1/*,index1*/);
   VI(1,symbol2,TP2,SL2/*,index2*/);
   VI(2,symbol3,TP3,SL3/*,index3*/);
   VI (3,symbol4,TP4,SL4/*,index4*/);
   VI (4,symbol5,TP5,SL5/*,index5*/);
   VI (5,symbol6,TP6,SL6/*,index6*/);
   VI (6,symbol7,TP7,SL7/*,index7*/);
   VI (7,symbol8,TP8,SL8/*,index8*/);
   VI (8,symbol9,TP9,SL9/*,index9*/);
   VI (9,symbol10,TP10,SL10/*,index10*/);
   VI (10,symbol11,TP11,SL11/*,index11*/);
   VI (11,symbol12,TP12,SL12/*,index12*/);
   VI (12,symbol13,TP13,SL13/*,index13*/);
   VI (13,symbol14,TP14,SL14/*,index14*/);
   VI (14,symbol15,TP15,SL15/*,index15*/);
   VI (15,symbol16,TP16,SL16/*,index16*/);
   VI (16,symbol17,TP17,SL17/*,index17*/);
   VI (17,symbol18,TP18,SL18/*,index18*/);
   VI (18,symbol19,TP19,SL19/*,index19*/);
   
   
   if (started)
   {
     datetime to_date=TimeCurrent(); 
     HistorySelect(0,to_date);
     trade=HistoryDealsTotal();
    started=false;
   }
//---

 EventSetTimer(2);
 
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   
  }
  void OnTimer()
  
   {
     if (TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
  {
   
   
   ulong deal_ticket;
   ulong deal_ticket1;
   string symboli;
  datetime from_date=0;          // с самого начала 
  datetime to_date=TimeCurrent(); 
  HistorySelect(from_date,to_date);
  int deals=HistoryDealsTotal();
  
 if (trade!=deals)
   {
     history=true;
     trade=deals;
   
   }
  
   
 if (history)
 {
   for(int i =0;i<=deals;i++)
  
    {
      
      deal_ticket=                HistoryDealGetTicket(i); 
      symboli=                    HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
      
     
   for (int n=0;n<19;n++)
       {
        if(symboli==symbols[n])
        indexes[n]=i;
        
        ;
       }
     
     }  
 
   for (int i=0;i<19;i++)
      {
      deal_ticket1=HistoryDealGetTicket(indexes[i]);
      Oprices[i]=HistoryDealGetDouble(deal_ticket1,DEAL_PRICE);
      types[i]=HistoryDealGetInteger(deal_ticket1,DEAL_TYPE);
   }   
     
      
     history=false;  
      }
    
 
   for (int i=0;i<simbols_number;i++)
   {
     
     if (!PositionSelect(symbols[i])) 
      {
        if (/*invertor[i]==true*/types[i]==DEAL_TYPE_BUY)
          trader.Buy(Lot,symbols[i]);
          
        if (/*invertor[i]==true*/types[i]==DEAL_TYPE_SELL)
         trader.Sell(Lot,symbols[i]);  
          
        
      }
     else 
       {
         profit[i]=PositionGetDouble(POSITION_PROFIT);
         if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY )
         {
            
         
         
            Cprices[i]=SymbolInfoDouble(symbols[i],SYMBOL_BID);
            PointsSL[i]=(Cprices[i]-Oprices[i])/_Point ;
            PointsTP[i]=(Cprices[i]-PositionGetDouble(POSITION_PRICE_OPEN))/_Point;
            
            
            if(PositionGetDouble(POSITION_VOLUME)>=0.01&& PositionGetDouble(POSITION_VOLUME)<=0.04)
            {
            SLs[i]=20;
            TPs[i]=10;
            }
            if(PositionGetDouble(POSITION_VOLUME)>=0.04 && PositionGetDouble(POSITION_VOLUME)<=0.8)
            {
            SLs[i]=30;
            TPs[i]=6;
            Lot=PositionGetDouble(POSITION_VOLUME);
            }
            
            
             if(PointsTP[i]>=TPs[i]&& profit[i]>=1)
              {
                trader.PositionClose(symbols[i]);
                invertor[i]=false;
                history=true;
              
              
              }
             
             if (PointsSL[i]<=-SLs[i] )
              {
                trader.Buy(Lot,symbols[i]);
                 
              }
         }
         if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL )
         {
            Cprices[i]=SymbolInfoDouble(symbols[i],SYMBOL_ASK);
            PointsSL[i]=(Oprices[i]-Cprices[i])/_Point ;
            PointsTP[i]=(PositionGetDouble(POSITION_PRICE_OPEN)-Cprices[i])/_Point;
            
            
            
            if(PositionGetDouble(POSITION_VOLUME)>=0.01&& PositionGetDouble(POSITION_VOLUME)<=0.04)
            {
            SLs[i]=20;
            TPs[i]=10;
            }
            if(PositionGetDouble(POSITION_VOLUME)>=0.04 && PositionGetDouble(POSITION_VOLUME)<=0.8)
            {
            SLs[i]=30;
            TPs[i]=6;
            Lot=PositionGetDouble(POSITION_VOLUME);
            }
            
           
           
            if(PointsTP[i]>=TPs[i] && profit[i]>=1)
              {
                trader.PositionClose(symbols[i]);
                invertor[i]=true;
                history=true;
               
              
              }
            
            
            
             
             if (PointsSL[i]<=-SLs[i] )
              {
                trader.Sell(Lot,symbols[i]);
                 
              }
         
              }
           }
          Print(symbols[i],SLs[i]);
        }
        
     
  
 
   
    
 
  }   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+
void VI(int _num,string _symbol,int _TP,int _SL/*,int _index*/)
     {
      symbols[_num] = _symbol;
      indexes[_num] =NULL;
      Cprices [_num] =NULL;
      Oprices[_num] =NULL;
      PointsSL [_num] =NULL;
      PointsTP [_num]=NULL;
      TPs  [_num]  =_TP*10;
      SLs  [_num]  =_SL*10;
      invertor[_num]=true;
      profit[_num]=NULL;
      types[_num]=NULL;
      
     }


	          
 
вот и моя мартишка))))если сможате помагите исправить.спасибо добрие люди