Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 716

 
Alex Pirate:
Всем привет! что надо проверить??? выдаёт предупреждение по модификации и по открытию ... возвращает значение и нужно проверить...Как ??? советник ордера как попало открывает... (((
extern string MMM          = "MMM";
extern double Lot          = 0.1;
extern int    TakeProfit   = 50;
extern int    StopLoss     = 20;
extern int    Slippage     = 3;
extern int    Magic        = 888;
// Moving Average 1
extern string Indi_MA1        = "MA1";
extern int    MA1_Period   = 22;
extern int    MA1_Shift    = 0;
extern int    MA1_Method   = 0;
extern int    MA1_Price    = 0;
// Moving Average 2
extern string Indi_MA2        = "MA2";
extern int    MA2_Period   = 55;
extern int    MA2_Shift    = 0;
extern int    MA2_Method   = 0;
extern int    MA2_Price    = 0;
//+------------------------------------------------------------------+
double MA1,MA2,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
    if (Digits == 3 || Digits == 5)
    {
      TakeProfit = TakeProfit * 10;
      StopLoss = StopLoss     * 10;
      Slippage = Slippage     * 10;
    }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
 return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() 
 {           
    MA1 = iMA(Symbol(),0,MA1_Period,MA1_Shift,MA1_Method,MA1_Price,0);
    MA2 = iMA(Symbol(),0,MA2_Period,MA2_Shift,MA2_Method,MA2_Price,0);
    
    if (Ask >= MA1 && MA1 >= MA2 && CountBuy() == 0)
    {
       SL = NormalizeDouble(Ask - StopLoss   * Point,Digits);
       TP = NormalizeDouble(Ask + TakeProfit * Point,Digits);
       ticket = OrderSend(Symbol(),OP_BUY ,Lot,Ask,Slippage,0,0,"",Magic,0,Green);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) )  return;

       }      
        
    if (Bid <= MA1 && MA1 <= MA2 && CountSell() == 0) 
    
       SL = NormalizeDouble(Bid + StopLoss   * Point, Digits);
       TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
       ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"",Magic,0,Red);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) ) return;

       }                
    }
 }
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0; 
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic)
      {
        if (OrderType() == OP_BUY)
        count++; 
      } 
   }
   return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic) 
      {
        if (OrderType() == OP_SELL)
        count++; 
      }
   }
   return(count);
}
//+------------------------------------------------------------------+
 
Konstantin Nikitin:

Спасибо!!! ща попробую

 
ошибки исчезли... но почему то открывает ордера и модернизирует не все..похоже надо как то проверку модификации проверять ещё?   чё то где то я накосячил...
 
Alex Pirate:
ошибки исчезли... но почему то открывает ордера и модернизирует не все..похоже надо как то проверку модификации проверять ещё?   чё то где то я накосячил...

С кодом не разбирался. Так что эксперт ваш, вам и карты в руки.

 
Konstantin Nikitin:

С кодом не разбирался. Так что эксперт ваш, вам и карты в руки.

понял ..ну всё равно спасибо

 
Maxim Kuznetsov:

это можно сделать через глобальные переменные терминала. При условии что у вас есть исходный код индикатора и вы можете его править.

То есть индикатор будет делать рассчёт получая параметр не через extern а из вызыва GlobalVariableGet(). А советник соответсвенно будет менять эту переменную через GlobalVariableSet

Спасибо , Максим, хоть знаю теперь откуда начинать.
 
Как Вызвать виртуальный метод родительского класса ?
 
Есть индикатор zigzag по которому можно узнать значение цены экстремума, мне нужно  отрисовать трендовую линию от экстремума в будущее(на следующий день).Как это сделать не зная координат  второй точки и значение Time первой точки?
 
Vladimir Pastushak:
Как Вызвать виртуальный метод родительского класса ?

виртуальный метод на то и виртуальный, что у него есть только описание, а тело пишется в каждом классе отдельно

хотя если у Вас задача просто вызвать метод из родительского класса (т.е. метод уже имеет тело), то он (метод) будет доступен как обычный метод через наследование - исходник нужно посмотреть

 
Igor Makanu:

виртуальный метод на то и виртуальный, что у него есть только описание, а тело пишется в каждом классе отдельно

хотя если у Вас задача просто вызвать метод из родительского класса (т.е. метод уже имеет тело), то он (метод) будет доступен как обычный метод через наследование - исходник нужно посмотреть

Благодарю. У меня не получается вызвать метод родительского класса.

На сколько я помню это делается через родитель :: метод

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