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

Denis181986

Активный участник
Рассуждайте логически. Всё просто.
1. Старт. Выставлены два противоположенных ордера.
2. Один из ордеров срабатывает и вместо ордера открывается позиция.
3.Теперь есть одна открытая позиция и один отложенный ордер.
4. Перебираете наличие открытых позиций.
5. Если есть открытая позиция - тогда удалить ордер.
if(SellCount() > 1 || BuyCount()>1) - это прописано
{
bool deleted = OrderDelete(OrderTicket());
if(deleted == true)
{
Print("Отложенный ордер #",OrderTicket()," успешно удален!");
}
else
{
Print("Не удалось удалить отложенный ордер #", OrderTicket());
}
}
 

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[50];
void OnTick()
  {

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

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

ИванМН

Местный знаток
Код:
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[50];
void OnTick()
  {

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

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

star603

Новичок форума
Выделяете строки с 27 по 40-ю, вырезаете фрагмент из этой функции, переносите в другую функцию, вставляете и там работаете с эти
Код:
void OnTick()
  {
   st1();

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

ИванМН

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

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

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[i].AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr[i].AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr[i].ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr[i].ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr[i].AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr[i].ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr[i].AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr[i].AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr[i].AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr[i].BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
      arr[i].BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
      arr[i].BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
      arr[i].body = Open[i]-Close[i];
      arr[i].CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].close = Close[i];
      arr[i].DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
     }
  }
void st1()//Стратегий таких много будет в одном советнике
  {
   bool dan = true;
   if(arr[3].body>0 && arr[2].body>0 && arr[1].body>0)
      dan =true;//Покупки
   else
      if(arr[3].body<0 && arr[2].body<0 && arr[1].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

♔♕♖♗♘♙
Код:
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[i].AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr[i].AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr[i].ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr[i].ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr[i].AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr[i].ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr[i].AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr[i].AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr[i].AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr[i].BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
      arr[i].BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
      arr[i].BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
      arr[i].body = Open[i]-Close[i];
      arr[i].CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].close = Close[i];
      arr[i].DM = iDeMarker(Symbol(),PERIOD_CURRENT,31,i);
     }
  }
void st1()//Стратегий таких много будет в одном советнике
  {
   bool dan = true;
   if(arr[3].body>0 && arr[2].body>0 && arr[1].body>0)
      dan =true;//Покупки
   else
      if(arr[3].body<0 && arr[2].body<0 && arr[1].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

Новичок форума
Код:
void OnTick()
  {
   st1();
   Massiv();
   Comment(arr[3].body,"+",arr[2].body,"+",arr[1].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[i].AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr[i].AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr[i].ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr[i].ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr[i].AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr[i].ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr[i].AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr[i].AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr[i].AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr[i].BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
      arr[i].BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
      arr[i].BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
      arr[i].body = Open[i]-Close[i];
      arr[i].CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].close = Close[i];
      arr[i].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[3].body>0 && arr[2].body>0 && arr[1].body>0)
      dan =true;//Покупки
   else
      if(arr[3].body<0 && arr[2].body<0 && arr[1].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

Новичок форума
Код:
void OnTick()
  {
   st1();
   Massiv();
   Comment(arr[3].body,"+",arr[2].body,"+",arr[1].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[i].AC=iAC(Symbol(),PERIOD_CURRENT,i);
      arr[i].AD=iAD(Symbol(),PERIOD_CURRENT,i);
      arr[i].ADXMn=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].ADXDP=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_PLUSDI,i);
      arr[i].ADXDM=iADX(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,MODE_MINUSDI,i);
      arr[i].AO=iAO(Symbol(),PERIOD_CURRENT,i);
      arr[i].ATR=iATR(Symbol(),PERIOD_CURRENT,31,i);
      arr[i].AligatorJA =  iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);
      arr[i].AligatorTE = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);
      arr[i].AligatorLI = iAlligator(Symbol(),PERIOD_CURRENT,31,8,15,5,7,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);
      arr[i].BEP = iBearsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BUP = iBullsPower(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].BNDM = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_MAIN,i);
      arr[i].BNDU = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_UPPER,i);
      arr[i].BNDL = iBands(Symbol(),PERIOD_CURRENT,31,2,0,PRICE_CLOSE,MODE_LOWER,i);
      arr[i].BWM = iBWMFI(Symbol(),PERIOD_CURRENT,i);
      arr[i].body = Open[i]-Close[i];
      arr[i].CCL = iCCI(Symbol(),PERIOD_CURRENT,31,PRICE_CLOSE,i);
      arr[i].close = Close[i];
      arr[i].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[3].body>0 && arr[2].body>0 && arr[1].body>0)
      dan =true;//Покупки
   else
      if(arr[3].body<0 && arr[2].body<0 && arr[1].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); почему?
Что самое интересное по каждой свече работает
 

ИванМН

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

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

AlexeyVik

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

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

zhserg

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

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

AlexeyVik

Программист mql4 mql5
Если очень хочется узнать, то нужно сохранить шаблон с графика, открыть его как файл, распарсить и получить требуемое
Не плохая мысль, надо посмотреть что получится. Но пользоваться этим в советнике будет очень накладно по времени. Я думаю будет недопустимо затратно…

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

zhserg

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