почему не видит глобальные переменные в функции?

 
//+------------------------------------------------------------------+
//|                                                            1.mq4 |
//|                        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"
#property strict



//+------------------------------------------------------------------+
//| Свойства советника                                               |
//+------------------------------------------------------------------+
extern int TakeProfit = 100;
extern int StopLoss   = 100;
extern double Lots       = 1.0;
extern int V1         = 150;   //Мин размер свечи 1
extern int V2         = 100;   //Мин размер свечи 2
extern int XBar       = 15;    //Количество свечей для Volume
 

extern int Magic  = 123 ;  
extern int Dist       = 50;
extern int Shag       = 50;
extern bool Isp_shag   = true;
extern bool Bezubitok  = true;


datetime DTime;

int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

   void Trailing_Stop(Magic,Dist,Symbol(),Shag,Isp_shag,Bezubitok)
   {
   double Dist, Shag;
   if (Digits==3||Digits==5) {dist=Dist*10*Point;shag=Shag*10*Point;}
   else if (Digits==2||Digits==4) {dist=Dist*Point;shag=Shag*Point;}
  
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
   if (OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
   {
   if (OrderType()==OP_BUY)
      {
      if(!Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      if (Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(dist,Digits)&& 
      NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      if(!Isp_shag&&Bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)
      &&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      if(Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(dist,Digits)&&
      NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
      NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      }
   if (OrderType()==OP_SELL)
      {
      if(!Isp_shag&&!Bezubitok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      if (Isp_shag&&!Bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(dist,Digits)&& 
      NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      if(!Isp_shag&&Bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
      NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      if(Isp_shag&&!Bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(dist,Digits)&&
      NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
      NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      }
      }     
      }
} 
    
void OnTick()
{



/////////////////////////////////////Volume/////////////////////////////////////////////////

int MaxVolumeBarIndex=iHighest(NULL,0,MODE_VOLUME,XBar,0);
double VolumeBar=Volume[MaxVolumeBarIndex];


    
//////////////////////////////////////SELL//////////////////////////////////////////////////

   
    
    if( (iOpen(NULL,PERIOD_CURRENT,1)) > iClose(NULL,PERIOD_CURRENT,1) && (iOpen(NULL,PERIOD_CURRENT,2)) < iClose(NULL,PERIOD_CURRENT,2))
    if(DTime!=iTime(NULL,PERIOD_CURRENT,1)) 
    {
    if( (iOpen(NULL,PERIOD_CURRENT,1))-iClose(NULL,PERIOD_CURRENT,1)>=V1*Point)
    if( (iClose(NULL,PERIOD_CURRENT,2))-iOpen(NULL,PERIOD_CURRENT,2)>=V2*Point)    
    if( (iOpen(NULL,PERIOD_H4,3))<iOpen(NULL,PERIOD_H4,7))    
    if( Volume[2]>= VolumeBar)    
    if(DTime=iTime(NULL,PERIOD_CURRENT,1))
    
    OrderSend(NULL,OP_SELL,Lots,Ask,3,High[2]+StopLoss*Point,Bid-TakeProfit*Point,Magic,0,0);
    Trailing_Stop (Magic,Dist,Symbol(),Shag,Isp_shag,Bezubitok);
   

    
} 
}


почему глобальные переменные Magic и тп в функции Trailing_Stop не видятся и просят объявить их тип,как бы не видя их как глобальные переменные?

и какие нибудь еще ошибки есть ли в коде?

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Metatester 5 agents manager Установлен metatester 5...
 
aVague:


почему глобальные переменные Magic и тп в функции Trailing_Stop не видятся и просят объявить их тип,как бы не видя их как глобальные переменные?

и какие нибудь еще ошибки есть ли в коде?

Наверное потому, что приоритетней переменная во взодящих параметрах

void Trailing_Stop(Magic,Dist,Symbol(),Shag,Isp_shag,Bezubitok)

И выделенное красным это что?

 

В объявлении функции должны быть указаны типы передаваемых ей аргументов. А в данном случае:

void Trailing_Stop(Magic,Dist,Symbol(),Shag,Isp_shag,Bezubitok)

указаны имена и значения.

Правильное объявление функции:

void Trailing_Stop(int Magic, int Dist, string symbol, int Shag, bool Isp_shag, bool Bezubitok)

Если в коде эту функцию Вы используете всего один раз и именно так, как указано, то параметры вообще не нужно передавать, можно оставить функцию без аргументов. 

 
Ihor Herasko:

В объявлении функции должны быть указаны типы передаваемых ей аргументов. А в данном случае:

указаны имена и значения.

Правильное объявление функции:

Если в коде эту функцию Вы используете всего один раз и именно так, как указано, то параметры вообще не нужно передавать, можно оставить функцию без аргументов. 

Исходя из контекста, еще правильнее объявить функцию

void Trailing_Stop()
 
Mislaid:

Исходя из контекста, еще правильнее объявить функцию

А я как написал?

Если в коде эту функцию Вы используете всего один раз и именно так, как указано, то параметры вообще не нужно передавать, можно оставить функцию без аргументов. 

 

попробывал,но теперь ругается на вызов функции

Trailing_Stop (Magic,Dist,Symbol(),Shag,Isp_shag,Bezubitok);


 в конце и пишет что wrong parametrs count

 

точнее вот в таком коде 

 

//+------------------------------------------------------------------+
//|                                                            1.mq4 |
//|                        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"
#property strict
 




//+------------------------------------------------------------------+
//| Свойства советника                                               |
//+------------------------------------------------------------------+
extern int         TakeProfit = 100;
extern int         StopLoss   = 100;
extern double   Lots       = 1.0;
extern int     V1         = 150;   //Мин размер свечи 1
extern int     V2         = 100;   //Мин размер свечи 2
extern int     XBar       = 15;    //Количество свечей для Volume
 

extern int     Magic      = 123 ;  
extern int     Dist       = 50;
extern int     Shag       = 50;
extern bool    Isp_shag   = true;
extern bool    Bezubitok  = true;


datetime DTime;


    
 int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

   void Trailing_Stop()
   {
   double dist, shag;
   if (Digits==3||Digits==5) {dist=Dist*10*Point;shag=Shag*10*Point;}
   else if (Digits==2||Digits==4) {dist=Dist*Point;shag=Shag*Point;}
  
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
   if (OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
   {
   if (OrderType()==OP_BUY)
      {
      if(!Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      if (Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(dist,Digits)&& 
      NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      if(!Isp_shag&&Bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)
      &&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      if(Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(dist,Digits)&&
      NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
      NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,clrNONE);
      }
   if (OrderType()==OP_SELL)
      {
      if(!Isp_shag&&!Bezubitok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      if (Isp_shag&&!Bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(dist,Digits)&& 
      NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      if(!Isp_shag&&Bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
      NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      if(Isp_shag&&!Bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(dist,Digits)&&
      NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
      NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
      OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,clrNONE);
      }
      }     
      }




/////////////////////////////////////Volume/////////////////////////////////////////////////

int MaxVolumeBarIndex=iHighest(NULL,0,MODE_VOLUME,XBar,0);
double VolumeBar=Volume[MaxVolumeBarIndex];


    
//////////////////////////////////////SELL//////////////////////////////////////////////////

   
    
    if( (iOpen(NULL,PERIOD_CURRENT,1)) > iClose(NULL,PERIOD_CURRENT,1) && (iOpen(NULL,PERIOD_CURRENT,2)) < iClose(NULL,PERIOD_CURRENT,2))
    if(DTime!=iTime(NULL,PERIOD_CURRENT,1)) 
    {
    if( (iOpen(NULL,PERIOD_CURRENT,1))-iClose(NULL,PERIOD_CURRENT,1)>=V1*Point)
    if( (iClose(NULL,PERIOD_CURRENT,2))-iOpen(NULL,PERIOD_CURRENT,2)>=V2*Point)    
    if( (iOpen(NULL,PERIOD_H4,3))<iOpen(NULL,PERIOD_H4,7))    
    if( Volume[2]>= VolumeBar)    
    if(DTime=iTime(NULL,PERIOD_CURRENT,1))
    
    OrderSend(NULL,OP_SELL,Lots,Ask,3,High[2]+StopLoss*Point,Bid-TakeProfit*Point,Magic,0,0);
    Trailing_Stop (Magic,Dist,Symbol(),Shag,Isp_shag,Bezubitok);
   

    
}   
}

на вызов функции Trailing_Stop пишет wrong parameters

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Причины, по которым Умный Трейдер отказывается от...
 
aVague:

точнее вот в таком коде 

 

на вызов функции Trailing_Stop пишет wrong parameters

Если функция объявлена без аргументов, то и вызывать ее нужно без аргументов:

Trailing_Stop();