# Ваши вопросы по языку MQL4

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2011-11-07 10:37
Ответов: 9576 | Просмотров: 1109818
Страница 459 из 479
Источник: https://forexsystemru.com/threads/65289/page-459

---

## Denis181986 — 2023-04-26 18:59

> Цитата (ssg):
> Рассуждайте логически. Всё просто.
> 1. Старт. Выставлены два противоположенных ордера.
> 2. Один из ордеров срабатывает и вместо ордера открывается позиция.
> 3.Теперь есть одна открытая позиция и один отложенный     ордер.
> 4. Перебираете наличие открытых позиций.
> 5. Если есть открытая позиция - тогда удалить ордер.

 if(SellCount() > 1 || BuyCount()>1) - это прописано 
     {
       bool deleted = OrderDelete(OrderTicket());
        if(deleted == true) 
{
    Print("Отложенный ордер #",OrderTicket()," успешно удален!");
}
else 
{
    Print("Не удалось удалить отложенный ордер #", OrderTicket());
}
  }

## ssg — 2023-04-27 01:20

if(SellCount() > 0 || BuyCount()>0)

## star603 — 2023-05-01 18:59

```
struct indikator
  {
   double            AC;//Accelerator/Decelerator.
   double            AD;//Accumulation/Distribution.
   double            ADXMn;//Average Directional Movement Index.M
   double            ADXDM;//Average Directional Movement Index.D-
   double            ADXDP;//Average Directional Movement Index.D+
   double            AligatorJA;//Alligator. Челюсти
   double            AligatorTE;//Alligator. Зубы
   double            AligatorLI; //Alligator. Губы
   double            AO;//Awesome Oscillator.
   double            ATR;//Average True Range.
   double            BEP;//Bears Power
  };
//---Определение размера структур массивов
indikator arr;
void OnTick()
  {

  }
//+------------------------------------------------------------------+
//|                   Заполнение массивов                            |
//+------------------------------------------------------------------+
void Massiv()
  {
//---Заполнение массивов инидкаторов
   for(i=0; i<ArraySize(arr); i++)
     {
      arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
     }
  }
```

Потом эту функцию в другой функции написать и уже потом там работать с этими значениями.

## ИванМН — 2023-05-01 19:49

> Цитата (star603):
> 
```
struct indikator
>   {
>    double            AC;//Accelerator/Decelerator.
>    double            AD;//Accumulation/Distribution.
>    double            ADXMn;//Average Directional Movement Index.M
>    double            ADXDM;//Average Directional Movement Index.D-
>    double            ADXDP;//Average Directional Movement Index.D+
>    double            AligatorJA;//Alligator. Челюсти
>    double            AligatorTE;//Alligator. Зубы
>    double            AligatorLI; //Alligator. Губы
>    double            AO;//Awesome Oscillator.
>    double            ATR;//Average True Range.
>    double            BEP;//Bears Power
>   };
> //---Определение размера структур массивов
> indikator arr;
> void OnTick()
>   {
>
>   }
> //+------------------------------------------------------------------+
> //|                   Заполнение массивов                            |
> //+------------------------------------------------------------------+
> void Massiv()
>   {
> //---Заполнение массивов инидкаторов
>    for(i=0; i<ArraySize(arr); i++)
>      {
>       arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
>       arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
>       arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
>       arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
>       arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
>       arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
>       arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
>       arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
>       arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
>       arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
>       arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>      }
>   }
```

>
> Потом эту функцию в другой функции написать и уже потом там работать с этими значениями.
> 

Выделяете строки с 27 по 40-ю, вырезаете фрагмент из этой функции, переносите в другую функцию, вставляете и там работаете с этими значениями. В чём вопрос или проблема? Опять надо призывать чётко и точно формулировать?

## star603 — 2023-05-01 20:06

> Цитата (ИванМН):
> 
> 
> Выделяете строки с 27 по 40-ю, вырезаете фрагмент из этой функции, переносите в другую функцию, вставляете и там работаете с эти
> 
```
void OnTick()
>   {
>    st1();
>
>   }
> //+------------------------------------------------------------------+
> //|                   Заполнение массивов                            |
> //+------------------------------------------------------------------+
> void Massiv()
>   {
> //---Заполнение массивов инидкаторов
>    for(i=0; i<ArraySize(arr); i++)
>      {
>       arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
>       arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
>       arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
>       arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
>       arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
>       arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
>       arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
>       arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
>       arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
>       arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
>       arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
>       arr.BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
>       arr.BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
>       arr.BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
>       arr.body = Open-Close;
>       arr.CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.close = Close;
>       arr.DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
>      }
>   }
> //+------------------------------------------------------------------+
> void st1()//Стратегий таких много будет в одном советнике
>   {
>    Massiv();
>    bool dan = true;
>    if(arr.body>0 && arr.body>0 && arr.body>0)
>       dan =true;
>    else
>       if(arr.body<0 && arr.body<0 && arr.body<0)
>          dan=false;
>    if(dan ==true)
>       Print("Open BUY");
>    else
>       Print("Open SELL");
>   }
> //+------------------------------------------------------------------+
> 
```

> ми значениями. В чём вопрос или проблема? Опять надо призывать чётко и точно формулировать?

Вот так можно делать?

## star603 — 2023-05-01 22:27

в кейс еще свитч еще можно закидывать?

## ИванМН — 2023-05-02 18:15

> Цитата (star603):
> Вот так можно делать?

Если массив структур объявлен глобально (во втором Вашем посте этого не видно), то можно, т.к. он доступен изо всех функций. Вам уже выше разжёвывали это.

> Цитата (star603):
> в кейс еще свитч еще можно закидывать?

В документации к языку нет никаких ограничений на то, какие именно операторы допустимы в блоке case, следовательно, этим оператором может быть и ещё один switch. Что мешает закинуть и посмотреть на реакцию компилятора?

Дорогой star603, у Вас неправильный подход: Вы сначала пробуйте что-то сделать, а уже затем, в том случае, если при компиляции возникают ошибки или программа делает не то, что Вам надо, задавайте здесь конкретные вопросы. Не следует спрашивать наперёд "а можно то - а можно это?", иначе эта тема будет забита пустопорожними постами.

## AlexeyVik — 2023-05-02 19:09

> Цитата (ИванМН):
> ……… эта тема будет забита пустопорожними постами.

Она уже давно забита этими вопросами ИИ…

## star603 — 2023-05-05 22:09

```

void OnTick()
  {
   st1();
  }
void massiv()
  {
   arr1.lot = Lot;
   arr1.risk = Risk;
   arr1.loss = StopLoss*Point;
   arr1.prof = TakeProfit*Point;
   arr1.tral = Tral*Point;
   arr1.disfriz = (int)MarketInfo(Symbol(),MODE_FREEZELEVEL);
   arr1.profby = NormalizeDouble(Ask+TakeProfit*Point,Digits);
   arr1.profsh = NormalizeDouble(Bid-TakeProfit*Point,Digits);
   arr1.stopby = NormalizeDouble(Bid-StopLoss*Point,Digits);
   arr1.stopsh = NormalizeDouble(Ask+StopLoss*Point,Digits);
   arr1.profbymin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.profshmin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.stopbymin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.stopshmin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.swl  = NormalizeDouble(MarketInfo(Symbol(),18)*Point,Digits);
   arr1.sws  = NormalizeDouble(MarketInfo(Symbol(),19)*Point,Digits);
   arr1.mag = Magic;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Massiv()
  {
//---Заполнение массивов инидкаторов
   for(i=0; i<ArraySize(arr); i++)
     {
      arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr.BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr.BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
      arr.BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
      arr.BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
      arr.BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
      arr.body = Open-Close;
      arr.CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr.close = Close;
      arr.DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
     }
  }
void st1()//Стратегий таких много будет в одном советнике
  {
   bool dan = true;
   if(arr.body>0 && arr.body>0 && arr.body>0)
      dan =true;//Покупки
   else
      if(arr.body<0 && arr.body<0 && arr.body<0)
         dan=false;//Продажи
   switch(Vremytorg)
     {
      case 0://На новом баре
         if(dan==true && f_IsNewBar()==true)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && f_IsNewBar()==true)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 1://Только один ордер открывать
         if(dan==true && OrdersTotal()==0)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && OrdersTotal()==0)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 2://На определеннои баре
         if(dan==true && NumberBars()==Uhr)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && NumberBars()==Uhr)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 3://В определенный час
         if(dan==true && Uhrtraid()==true)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && Uhrtraid()==true)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 4://В положительный своп
         if(dan==true && arr1.swl>0)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && arr1.sws>0)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 5://Как есть торговать
         if(dan==true)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
     }
  }
```

выдает 4051 ошибку почему?

## DomovenokBrest — 2023-05-05 22:12

> Цитата (star603):
> 
```

> void OnTick()
>   {
>    st1();
>   }
> void massiv()
>   {
>    arr1.lot = Lot;
>    arr1.risk = Risk;
>    arr1.loss = StopLoss*Point;
>    arr1.prof = TakeProfit*Point;
>    arr1.tral = Tral*Point;
>    arr1.disfriz = (int)MarketInfo(Symbol(),MODE_FREEZELEVEL);
>    arr1.profby = NormalizeDouble(Ask+TakeProfit*Point,Digits);
>    arr1.profsh = NormalizeDouble(Bid-TakeProfit*Point,Digits);
>    arr1.stopby = NormalizeDouble(Bid-StopLoss*Point,Digits);
>    arr1.stopsh = NormalizeDouble(Ask+StopLoss*Point,Digits);
>    arr1.profbymin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.profshmin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.stopbymin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.stopshmin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.swl  = NormalizeDouble(MarketInfo(Symbol(),18)*Point,Digits);
>    arr1.sws  = NormalizeDouble(MarketInfo(Symbol(),19)*Point,Digits);
>    arr1.mag = Magic;
>   }
> //+------------------------------------------------------------------+
> //|                                                                  |
> //+------------------------------------------------------------------+
> void Massiv()
>   {
> //---Заполнение массивов инидкаторов
>    for(i=0; i<ArraySize(arr); i++)
>      {
>       arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
>       arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
>       arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
>       arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
>       arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
>       arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
>       arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
>       arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
>       arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
>       arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
>       arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
>       arr.BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
>       arr.BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
>       arr.BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
>       arr.body = Open-Close;
>       arr.CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.close = Close;
>       arr.DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
>      }
>   }
> void st1()//Стратегий таких много будет в одном советнике
>   {
>    bool dan = true;
>    if(arr.body>0 && arr.body>0 && arr.body>0)
>       dan =true;//Покупки
>    else
>       if(arr.body<0 && arr.body<0 && arr.body<0)
>          dan=false;//Продажи
>    switch(Vremytorg)
>      {
>       case 0://На новом баре
>          if(dan==true && f_IsNewBar()==true)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && f_IsNewBar()==true)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 1://Только один ордер открывать
>          if(dan==true && OrdersTotal()==0)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && OrdersTotal()==0)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 2://На определеннои баре
>          if(dan==true && NumberBars()==Uhr)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && NumberBars()==Uhr)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 3://В определенный час
>          if(dan==true && Uhrtraid()==true)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && Uhrtraid()==true)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 4://В положительный своп
>          if(dan==true && arr1.swl>0)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && arr1.sws>0)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 5://Как есть торговать
>          if(dan==true)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>      }
>   }
```

> выдает 4051 ошибку почему?

Замени точку.
Как пример:
   arr1.lot = Lot; 
на
   arr1_lot = Lot;
и так со всеми...

## star603 — 2023-05-05 23:21

> Цитата (DomovenokBrest):
> Замени точку.
> Как пример:
>    arr1.lot = Lot;
> на
>    arr1_lot = Lot;
> и так со всеми...

выдаст
'arr1_mag' - undeclared identifier    Lavina 5.mq4    290    80
на всех

## DomovenokBrest — 2023-05-05 23:48

> Цитата (star603):
> выдаст
> 'arr1_mag' - undeclared identifier    Lavina 5.mq4    290    80
> на всех

ну так объявите

## star603 — 2023-05-06 00:04

```
void OnTick()
  {
   st1();
   Massiv();
   Comment(arr.body,"+",arr.body,"+",arr.body);
  }
void massiv()
  {
   arr1.lot = Lot;
   arr1.risk = Risk;
   arr1.loss = StopLoss*Point;
   arr1.prof = TakeProfit*Point;
   arr1.tral = Tral*Point;
   arr1.disfriz = (int)MarketInfo(Symbol(),MODE_FREEZELEVEL);
   arr1.profby = NormalizeDouble(Ask+TakeProfit*Point,Digits);
   arr1.profsh = NormalizeDouble(Bid-TakeProfit*Point,Digits);
   arr1.stopby = NormalizeDouble(Bid-StopLoss*Point,Digits);
   arr1.stopsh = NormalizeDouble(Ask+StopLoss*Point,Digits);
   arr1.profbymin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.profshmin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.stopbymin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.stopshmin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   arr1.swl  = NormalizeDouble(MarketInfo(Symbol(),18)*Point,Digits);
   arr1.sws  = NormalizeDouble(MarketInfo(Symbol(),19)*Point,Digits);
   arr1.mag = Magic;
  }
void Massiv()
  {
//---Заполнение массивов инидкаторов
   for(i=0; i<ArraySize(arr); i++)
     {
      arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr.BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr.BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
      arr.BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
      arr.BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
      arr.BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
      arr.body = Open-Close;
      arr.CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr.close = Close;
      arr.DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
     }
  }
//+------------------------------------------------------------------+
//|                      Пользовательские функции                    |
//+------------------------------------------------------------------+
bool f_IsNewBar()//новый бар
  {
   if(intBars != Bars)
     {
      intBars = Bars;
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
bool Uhrtraid()//Торговля на определенном часе
  {
   bool trade = false;
   if(Hour()== Uhr && Minute()==00 && Seconds()==00)
      trade=true;
   else
      trade=false;
   return(trade);
  }
//+------------------------------------------------------------------+
int NumberBars()//Торговля на определеном баре
  {
   datetime Result = 0;
   int number = 0;
   for(int j = 0; j < OrdersTotal(); j++)
      if(OrderSelect(i, SELECT_BY_POS))
         if(OrderSymbol() == Symbol())
            if(OrderOpenTime() > Result)
               Result = OrderOpenTime();
   if(iBarShift(_Symbol,PERIOD_CURRENT, Result,true)==5)
      number=5;
   else
      number=-1;
   return(number);
  }
//+------------------------------------------------------------------+
void st1()//Стратегий таких много будет в одном советнике
  {
   bool dan = true;
   massiv();
   Massiv();
   if(arr.body>0 && arr.body>0 && arr.body>0)
      dan =true;//Покупки
   else
      if(arr.body<0 && arr.body<0 && arr.body<0)
         dan=false;//Продажи
   switch(Vremytorg)
     {
      case 0://На новом баре
         if(dan==true && f_IsNewBar()==true)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && f_IsNewBar()==true)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 1://Только один ордер открывать
         if(dan==true && OrdersTotal()==0)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && OrdersTotal()==0)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 2://На определеннои баре
         if(dan==true && NumberBars()==Uhr)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && NumberBars()==Uhr)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 3://В определенный час
         if(dan==true && Uhrtraid()==true)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && Uhrtraid()==true)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 4://В положительный своп
         if(dan==true && arr1.swl>0)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false && arr1.sws>0)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
      case 5://Как есть торговать
         if(dan==true)
            ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
         if(dan==false)
            ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
         break;
     }
  }
```

В идеии открыть после 3 белых бай открывает на каждом новом баре(кейс 0); почему?

## star603 — 2023-05-06 22:19

> Цитата (star603):
> 
```
void OnTick()
>   {
>    st1();
>    Massiv();
>    Comment(arr.body,"+",arr.body,"+",arr.body);
>   }
> void massiv()
>   {
>    arr1.lot = Lot;
>    arr1.risk = Risk;
>    arr1.loss = StopLoss*Point;
>    arr1.prof = TakeProfit*Point;
>    arr1.tral = Tral*Point;
>    arr1.disfriz = (int)MarketInfo(Symbol(),MODE_FREEZELEVEL);
>    arr1.profby = NormalizeDouble(Ask+TakeProfit*Point,Digits);
>    arr1.profsh = NormalizeDouble(Bid-TakeProfit*Point,Digits);
>    arr1.stopby = NormalizeDouble(Bid-StopLoss*Point,Digits);
>    arr1.stopsh = NormalizeDouble(Ask+StopLoss*Point,Digits);
>    arr1.profbymin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.profshmin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.stopbymin = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.stopshmin = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
>    arr1.swl  = NormalizeDouble(MarketInfo(Symbol(),18)*Point,Digits);
>    arr1.sws  = NormalizeDouble(MarketInfo(Symbol(),19)*Point,Digits);
>    arr1.mag = Magic;
>   }
> void Massiv()
>   {
> //---Заполнение массивов инидкаторов
>    for(i=0; i<ArraySize(arr); i++)
>      {
>       arr.AC=iAC(Symbol(),PERIOD_CURRENT,i);
>       arr.AD=iAD(Symbol(),PERIOD_CURRENT,i);
>       arr.ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
>       arr.ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
>       arr.ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
>       arr.AO=iAO(Symbol(),PERIOD_CURRENT,i);
>       arr.ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
>       arr.AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
>       arr.AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
>       arr.AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
>       arr.BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
>       arr.BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
>       arr.BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
>       arr.BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
>       arr.body = Open-Close;
>       arr.CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
>       arr.close = Close;
>       arr.DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
>      }
>   }
> //+------------------------------------------------------------------+
> //|                      Пользовательские функции                    |
> //+------------------------------------------------------------------+
> bool f_IsNewBar()//новый бар
>   {
>    if(intBars != Bars)
>      {
>       intBars = Bars;
>       return(true);
>      }
>    return(false);
>   }
> //+------------------------------------------------------------------+
> bool Uhrtraid()//Торговля на определенном часе
>   {
>    bool trade = false;
>    if(Hour()== Uhr && Minute()==00 && Seconds()==00)
>       trade=true;
>    else
>       trade=false;
>    return(trade);
>   }
> //+------------------------------------------------------------------+
> int NumberBars()//Торговля на определеном баре
>   {
>    datetime Result = 0;
>    int number = 0;
>    for(int j = 0; j < OrdersTotal(); j++)
>       if(OrderSelect(i, SELECT_BY_POS))
>          if(OrderSymbol() == Symbol())
>             if(OrderOpenTime() > Result)
>                Result = OrderOpenTime();
>    if(iBarShift(_Symbol,PERIOD_CURRENT, Result,true)==5)
>       number=5;
>    else
>       number=-1;
>    return(number);
>   }
> //+------------------------------------------------------------------+
> void st1()//Стратегий таких много будет в одном советнике
>   {
>    bool dan = true;
>    massiv();
>    Massiv();
>    if(arr.body>0 && arr.body>0 && arr.body>0)
>       dan =true;//Покупки
>    else
>       if(arr.body<0 && arr.body<0 && arr.body<0)
>          dan=false;//Продажи
>    switch(Vremytorg)
>      {
>       case 0://На новом баре
>          if(dan==true && f_IsNewBar()==true)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && f_IsNewBar()==true)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 1://Только один ордер открывать
>          if(dan==true && OrdersTotal()==0)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && OrdersTotal()==0)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 2://На определеннои баре
>          if(dan==true && NumberBars()==Uhr)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && NumberBars()==Uhr)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 3://В определенный час
>          if(dan==true && Uhrtraid()==true)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && Uhrtraid()==true)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 4://В положительный своп
>          if(dan==true && arr1.swl>0)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false && arr1.sws>0)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>       case 5://Как есть торговать
>          if(dan==true)
>             ticketss=OrderSend(Symbol(),OP_BUY,arr1.lot,Ask,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          if(dan==false)
>             ticketss=OrderSend(Symbol(),OP_SELL,arr1.lot,Bid,Slippage,0,0,"S1",arr1.mag,clrNONE);
>          break;
>      }
>   }
```

> В идеии открыть после 3 белых бай открывает на каждом новом баре(кейс 0); почему?

Что самое интересное по каждой свече работает

## ИванМН — 2023-05-25 17:51

Вот пришла пора и мне задать вопрос, не всё же отвечать.

Кто знает, есть ли в MQL4 функция, обратная SetLevelValue()? То есть выдающая значения горизонтальных уровней индикатора, работающего в отдельном окне. Причём в остальных разделах языка такие функции есть (например, ...SetDouble и ...GetDouble), а вот в разделе "Пользовательские индикаторы" разрабы таких обратных функций создать не возжелали.

## AlexeyVik — 2023-05-25 17:57

> Цитата (ИванМН):
> Вот пришла пора и мне задать вопрос, не всё же отвечать.
>
> Кто знает, есть ли в MQL4 функция, обратная SetLevelValue()? То есть выдающая значения горизонтальных уровней индикатора, работающего в отдельном окне. Причём в остальных разделах языка такие функции есть (например, ...SetDouble и ...GetDouble), а вот в разделе "Пользовательские индикаторы" разрабы таких обратных функций создать не возжелали.

Нету. Все уровни при вызове индикатора задаются не как уровни, а как значения.
И цвет тоже если задан в закладке «Цвета» и там их изменить, то даже в само́м индикаторе эти цвета не прочесть.

## zhserg — 2023-05-25 18:10

> Цитата (ИванМН):
> Вот пришла пора и мне задать вопрос, не всё же отвечать.
>
> Кто знает, есть ли в MQL4 функция, обратная SetLevelValue()? То есть выдающая значения горизонтальных уровней индикатора, работающего в отдельном окне. Причём в остальных разделах языка такие функции есть (например, ...SetDouble и ...GetDouble), а вот в разделе "Пользовательские индикаторы" разрабы таких обратных функций создать не возжелали.

Если очень хочется узнать, то нужно сохранить шаблон с графика, открыть его как файл, распарсить и получить требуемое

## AlexeyVik — 2023-05-25 18:59

> Цитата (zhserg):
> Если очень хочется узнать, то нужно сохранить шаблон с графика, открыть его как файл, распарсить и получить требуемое

Не плохая мысль, надо посмотреть что получится. Но пользоваться этим в советнике будет очень накладно по времени. Я думаю будет недопустимо затратно…

ps; проверил… Да работает, определить можно. И если определять уровни только на стадии загрузки советника, то будет не очень затратно. Одна только проблема, индикатор должен быть уже прикреплён к графику. Иначе открыть файл .tpl средствами mql не получится.

## ИванМН — 2023-05-26 00:23

> Цитата (AlexeyVik):
> Иначе открыть файл .tpl средствами mql не получится.

А обхитрить компилятор, переименовав файл с расширением, например, txt, - прокатит? По сути tpl - это же обычная текстовка.

## zhserg — 2023-05-26 06:05

Открыть tpl можно в любом случае хоть с индикатором, хоть вообще с пустым графиком. Только есть небольшой нюанс - нужно использовать функции WinAPI для открытия файла... Заодно можно проверить если ли индикатор на графике :).
Переименовывать ничего не нужно, это текстовый файл, все верно.

---

Следующая страница: https://forexsystemru.com/threads/65289/page-460
