Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 326

 
mzk_3om6u:

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


Ну и пускай, что в этом страшного?

Но если что, имеется функция IsConnected();

 
Integer:


Ну и пускай, что в этом страшного?

Но если что, имеется функция IsConnected();


ну самое страшное, что случилось - положительная сделка не открылась:)

А так, хотелось бы узнать что на самом деле произошло - брокер что-то мутит или уж проблема с моей стороны была.

 
mzk_3om6u:


1. ну самое страшное, что случилось - положительная сделка не открылась:)

2. А так, хотелось бы узнать что на самом деле произошло - брокер что-то мутит или уж проблема с моей стороны была.


1. Это как бы нормальное, естественное явление.

2. Это никак не узнать. Очень часто на несколько секунд пропадает соеднинение.

 
Integer:


1. Это как бы нормальное, естественное явление.

2. Это никак не узнать. Очень часто на несколько секунд пропадает соеднинение.


За месяц теста на этом брокере, первый раз такое случилось, хотя уже 4 косяка за ними заметил - видимо пора другого подыскивать:)

Спасибо за ответы!)

 
TarasBY:
Вы когда-нибудь смотрите то, что написали?!

Что-то мне подсказывает, что "здесь собака порылась":


Пасиб)Разобрался.
 
artmedia70:
Не надо флаг. Флаг можно потерять при нештатных ситуациях. Лучше проверить - есть ли открытая позиция и, если есть - далее

О, вроде разобрался. Логику понял, вот чего навоял. Однако, при компиляции выдает ошибку ')' - assignment expected D:\Àëüïàðè\experts\Sp.mq4 (160, 92). Десять раз проверил все скобки - не могу найти ошибку. Полтергейст какой-то долбаный. artmedia70, если не сложно подскажи где ошибка.

extern double  Lots             = 0.1;
extern string Сomment           = "Pattern_1";
extern int TakeProfit           = 0;     
extern int StopLoss             = 0;   
extern int Step                 = 0;   

extern int BULevel              = 200;
extern int   NotBULevel         = 20;         // Уровень безубытка в пунктах

extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 111;

int ticket, otype;
double TP, price;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==3 || Digits ==5) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
            Step *= 10;
         }
      return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2])  // продажа
   {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
   }
   else
   if (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
    {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);   
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
    }
   if (CountTrades()>0)
      {
      otype = FindLastOrderType();
      if (otype == OP_BUY)
         { // ценапоследнего ордера на покупку
         price = FindLastBayPrice();
         
         if ((Bid - price) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);  
            }
         }
      else if (otype == OP_SELL)
         { // цена последнего ордера на продажу
         price = FindLastSellPrice()
         
          if ((price - Ask) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);  
            }
         }
      }
   
    
   return(0);
  }
     
 //+------------------------------------------------------------------+
int CountTrades() // количество открытых ордеров
   {
      int count=0;
      for(int i=OrdersTotal()-1; i>=0; i--) 
      {
         if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
         {
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==111)
            {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
            }
         }
      }
    return(count);  
   }
 //+------------------------------------------------------------------+
int FindLastOrderType() // вычисляем тип последнего ордера
   {
      int oticket, ticketnumber=0, OType;
      for(int i=OrdersTotal()-1; i>=0; i--)   
      {
         if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
         {
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==111)
            {
              oticket=OrderTicket();
              if (oticket > ticketnumber) 
              {
               ticketnumber = oticket;
               OType = OrderType(); // самый последний тикет
              }               
            }
         }
      }
    return(OType);    
   }
       
       
  //+------------------------------------------------------------------+
double FindLastBayPrice() // находим цену последнего ордера на покупку
   {
      int oticket, ticketnumber=0;
      double oprice;
      for(int i=OrdersTotal()-1; i>=0; i--)   
      {
         if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
         {
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==111 && OrderType() = OP_BUY)
            {
              oticket=OrderTicket();
              if (oticket > ticketnumber) 
              {
               ticketnumber = oticket;
               oprice = OrderType(); // самый последний тикет
              }               
            }
         }
      }
    return(oprice);    
   }      
  //+------------------------------------------------------------------+
double FindLastSellPrice() // находим цену последнего ордера на продажу
   {
      int oticket, ticketnumber=0;
      double oprice;
      for(int i=OrdersTotal()-1; i>=0; i--)   
      {
         if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
         {
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==111 && OrderType() = OP_SELL)
            {
              oticket=OrderTicket();
              if (oticket > ticketnumber) 
              {
               ticketnumber = oticket;
               oprice = OrderType(); // самый последний тикет
              }               
            }
         }
      }
    return(oprice);    
   }        

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

void BU()
{
   for(int a=0; a<OrdersTotal(); a++) 
  {
       if (OrderSelect(a, SELECT_BY_POS)) 
        {      
         if(OrderMagicNumber()!=111  || OrderSymbol()!=Symbol()) continue;
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel*Point-NotBULevel*Point)&& OrderOpenPrice()>OrderStopLoss())// последнеее условие БУ + 20 пипсов
            {      
             OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NotBULevel*Point,OrderTakeProfit(),0,Green);
            }
          }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel*Point+NotBULevel*Point)&& (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss() == 0 ))// последнеее условие БУ + 20 пипсов
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NotBULevel*Point,OrderTakeProfit(),0,Red);
             }
           } 
         }
   }
 return(0);
 }

 
 if (Digits ==3 || Digits ==3) // для пятизначного брокера
как-то странно.
 
ALXIMIKS:
как-то странно.
Исправил, ALXIMIKS, посмотрите пож. на предмет ошибок и логики.
 
выправил чтобы компилировался - и пользуйтесь 555 билда мт4 эдитором - он реально помогает искать проблемы быстро. только инструкцию почитайте перед установкой - страниц 15 первых.
Файлы:
kod.txt  7 kb
 

Подскажите пож правильно ли написаны функции.

double GetLastUpperFractal()
{
double LastUpperFractalPrice = 0;
for (int i = 0; i<=Bars; i++)
{
double FractalUp = iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i);
if (FractalUp != 0) LastUpperFractalPrice = FractalUp;
}
return (LastUpperFractalPrice);
}
//+------------------------------------------------------------------+
double GetLastLowerFractal()
{
double LastLowerFractalPrice = 0;
for (int i = 0; i<=Bars; i++)
{
double FractalDown = iFractals(Symbol(),PERIOD_M5,MODE_LOWER,i);
if (FractalDown != 0) LastLowerFractalPrice = FractalDown;
}
return (LastLowerFractalPrice);
}

Причина обращения: