Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 716

 
Alex Pirate:
Olá a todos, o que precisa ser verificado??? dá um aviso sobre modificações e sobre a abertura .... (????) ele retorna um valor e eu preciso verificá-lo ... como ??? EA abre os pedidos como eu vejo... (((
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:

Obrigado!!! Vou tentar.

 
os erros desapareceram... Mas por alguma razão, nem todos os pedidos estão abrindo e atualizando... parece que precisamos verificar a modificação de alguma forma... devo ter feito alguma confusão em algum lugar...
 
Alex Pirate:
os erros desapareceram... Mas nem todos os pedidos estão abrindo e atualizando por alguma razão... parece que precisamos verificar a verificação de modificação de alguma forma... devo ter feito alguma confusão em algum lugar...

Eu não estraguei o código. Eu não entendo... Então, você é o especialista, eu deixo isso com você.

 
Konstantin Nikitin:

Eu não elaborei o código. Portanto, seu especialista, seus cartões estão em suas mãos.

De qualquer forma, obrigado.

 
Maxim Kuznetsov:

isto pode ser feito através das variáveis globais do terminal. Desde que você tenha o código fonte do indicador e possa editá-lo.

Isso significa que o indicador calculará o parâmetro não através do exterior, mas a partir da chamada da GlobalVariableGet(). E, portanto, o Expert Advisor mudará esta variável através da GlobalVariableSet

Obrigado, Maxim, pelo menos agora eu sei por onde começar.
 
Como posso chamar um método virtual de uma classe mãe?
 
Existe um indicador em ziguezague que mostra o valor do preço de um extremo, preciso traçar uma linha de tendência do extremo para o futuro (no dia seguinte), como posso fazer isso sem conhecer as coordenadas do segundo ponto e o valor de Tempo do primeiro ponto?
 
Vladimir Pastushak:
Como chamar um método virtual de classe dos pais ?

um método virtual é um método virtual porque só tem uma descrição, e o corpo é escrito em cada classe separadamente

embora se sua tarefa for apenas chamar um método de uma classe mãe (ou seja, o método já tem um corpo), ele (o método) estará disponível como um método regular por herança - veja o código fonte

 
Igor Makanu:

um método virtual é um método virtual porque só tem uma descrição, e o corpo é escrito em cada classe separadamente

embora se sua tarefa for apenas chamar um método de uma classe mãe (ou seja, o método já tem um corpo), ele (o método) estará disponível como um método regular por herança - o código fonte deve ser visto

Obrigado. Eu não consigo que um método de classe pai seja chamado.

Tanto quanto me lembro, isso é feito através do método dos pais :: método

Razão: