Me ajudem com um erro em um algoritmo que usa CExpertSignal?

 
Boa tarde!

Alguém me ajuda a encontrar meu erro aqui ? 
Compila legal, mas nao separa as ordens de acordo com o ENUM: Buy, Sell e Buy_Sell... Nas 3 configurações ele compra e vende...


//| Class=CPriceAction                                               |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
enum Type_Orders 
   { 
   BUY, 
   SELL, 
   BUY_SELL
   }; 

//+------------------------------------------------------------------+
//| CPriceAction class                                               |
//| Purpose: A class of a module of trade signals,                   |
//| Price action                                                     |
//+------------------------------------------------------------------+
class CPriceAction : public CExpertSignal
  {
public:
   Type_Orders m_positions;
   void CPriceAction(){ m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE;  }  
private:
   virtual bool      CheckOpen(void);
   
   void SetAvailablePositions(Type_Orders newValue){m_positions=newValue;}; 
   virtual int       LongCondition();       //checks conditions for buy
   virtual int       ShortCondition();      //checks conditions for sell
   };
//+------------------------------------------------------------------+
//| Checks Conditions for buy                                        |
//| INPUT:  None                                                     |
//| OUTPUT: Weight from 0 to 100                                     |
//| REMARK: None.                                                    |
//+------------------------------------------------------------------+
int CPriceAction::LongCondition()
{
  ...

//--- condition is not satisfied
   return(0);
}
//+------------------------------------------------------------------+
//| Checks Conditions for sell                                       |
//| INPUT:  None                                                     |
//| OUTPUT: Weight from 0 to 100                                     |
//| REMARK: None.                                                    |
//+------------------------------------------------------------------+
int CPriceAction::ShortCondition()
{
...

//--- condition is not satisfied
   return(0);
}
//+------------------------------------------------------------------+ 
//| Check allowed positions                                          | 
//+------------------------------------------------------------------+ 
bool CPriceAction :: CheckOpen() 
   {
    switch(m_positions) 
     { 
      case BUY: 
         return LongCondition();      //Only new long positions 
         break;
      case SELL: 
         return ShortCondition();     //Only new short positions
         break; 
      default: 
         return LongCondition() && ShortCondition(); //default behaviour 
         break;
     }
   }


 
Rafael Peres:
Boa tarde!

Alguém me ajuda a encontrar meu erro aqui ? 
Compila legal, mas nao separa as ordens de acordo com o ENUM: Buy, Sell e Buy_Sell... Nas 3 configurações ele compra e vende...

Olá Rafael Peres,

Eu particularmente não utilizo essa (e várias outras) classes padrão da MetaQuotes. Mas acredito que o que você deseja é simples: dado um parâmetro de input, permitir que seu EA faça apenas compras, vendas ou ambos, correto?

O ideal seria mesmo desenvolver você mesmo esse parâmetro, que, em minha opinião, é simples de ser feito. Nesse caso, ao invés de utilizar switch(m_positions), você poderia fazer um "if" simples dando permissão para seu EA executar as funções LongCondition(), ShortCondition() ou ambas.

Algo mais ou menos assim:

input bool permitirCompras = true;
input bool permitirVendas = true;

if(permitirCompras) LongCondition();

if(permitirVendas) ShortCondition();

Abraços,
Malacarne

 
Rodrigo Malacarne:

Olá Rafael Peres,

Eu particularmente não utilizo essa (e várias outras) classes padrão da MetaQuotes. Mas acredito que o que você deseja é simples: dado um parâmetro de input, permitir que seu EA faça apenas compras, vendas ou ambos, correto?

O ideal seria mesmo desenvolver você mesmo esse parâmetro, que, em minha opinião, é simples de ser feito. Nesse caso, ao invés de utilizar switch(m_positions), você poderia fazer um "if" simples dando permissão para seu EA executar as funções LongCondition(), ShortCondition() ou ambas.

Algo mais ou menos assim:

Abraços,
Malacarne


Obrigado Malacarne!

Vou tentar fazer alguma coisa com essa ideia, apesar de meus conhecimentos basicos! Abraços!

Razão: