CExpert Pointer compilation error

 

Hello guys! First post here! I always read a lot of post in this forum and since now all coding problems that I had were solved just searching here.

But now I'm having a problem that I can't find a solution. Can anybody help?


I'm using CExpertTrailing to make a custom auto trade system with different kinds of trailing stops selected by user using Input variables. Depending on user input, one kind of trailing will be selected and the trailing correct pointer will be created.

But my code won't compile accordingly...

I got an error stating "'trailing' - undeclared identifier".

What can must I do to solve this? Create a new class just to select the appropiate trailing? Repeat code for each trailing? Thanks in advance!


if ((traillingStopLoss > 2) && (traillingStopLoss < 8)) {
   
      if (traillingStopLoss == 3) {
         CTrailingBarraBarra *trailing=new CTrailingBarraBarra;
      }
      if (traillingStopLoss == 4) {  
         CTrailingRR *trailing = new CTrailingRR;
      }    
        
      if (traillingStopLoss == 5) {
         CTrailingPSAR *trailing=new CTrailingPSAR;
      }
        
      if (traillingStopLoss == 6) {
         CTrailingMA *trailing = new CTrailingMA;
      }
        
      if (traillingStopLoss == 7) {
         CTrailingFixedPips *trailing=new CTrailingFixedPips;
      }
      
   } else {
   
      CTrailingNone *trailing=new CTrailingNone;
      
   }
//##########################################################################   
//##########################################################################
//############ Below Line gives me 'undeclared identifier' #################
//##########################################################################
//##########################################################################
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
     
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
        
   if (traillingStopLoss == 3) {
      //--- Set trailing parameters for BARRA/BARRA
      trailing.Pips(traillingStopPips);
   }
     
   if (traillingStopLoss == 4) {
      //--- Set trailing parameters for RR
      trailing.WaitForCandleClose(InpTraillingStopRRWaitForCandleClose);  
   }
     
   if (traillingStopLoss == 5) {
      //--- Set trailing parameters for PSAR
      trailing.Step(Trailing_ParabolicSAR_Step);
      trailing.Maximum(Trailing_ParabolicSAR_Maximum);
   }
     
   if (traillingStopLoss == 6) {
      //--- Set trailing parameters for MA
      trailing.Period(Trailing_MA_Period);
      trailing.Shift(Trailing_MA_Shift);
      trailing.Method(Trailing_MA_Method);
      trailing.Applied(Trailing_MA_Applied);
   }
     
   if (traillingStopLoss == 7) {
      //--- Set trailing parameters for FIXED
      trailing.StopLevel(Trailing_FixedPips_StopLevel);
      trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
   }
 
livio.zanol:

What can must I do to solve this?

CExpertTrailing* trailing = NULL;

if ((traillingStopLoss > 2) && (traillingStopLoss < 8)) {
   
      if (traillingStopLoss == 3) {
         trailing=new CTrailingBarraBarra;
      }
      if (traillingStopLoss == 4) {  
         trailing = new CTrailingRR;
      }    
        
      if (traillingStopLoss == 5) {
         trailing=new CTrailingPSAR;
      }
        
      if (traillingStopLoss == 6) {
         trailing = new CTrailingMA;
      }
        
      if (traillingStopLoss == 7) {
         trailing=new CTrailingFixedPips;
      }
      
   }
   
//##########################################################################   
//##########################################################################
//############ Below Line gives me 'undeclared identifier' #################
//##########################################################################
//##########################################################################
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
     
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
        
   if (traillingStopLoss == 3) {
      //--- Set trailing parameters for BARRA/BARRA
      dynamic_cast<CTrailingBarraBarra*>(trailing).Pips(traillingStopPips);
   }
     
   if (traillingStopLoss == 4) {
      //--- Set trailing parameters for RR
      dynamic_cast<CTrailingRR*>(trailing).WaitForCandleClose(InpTraillingStopRRWaitForCandleClose);  
   }
     
   if (traillingStopLoss == 5) {
      //--- Set trailing parameters for PSAR
      dynamic_cast<CTrailingPSAR*>(trailing).Step(Trailing_ParabolicSAR_Step);
      dynamic_cast<CTrailingPSAR*>(trailing).Maximum(Trailing_ParabolicSAR_Maximum);
   }
     
   if (traillingStopLoss == 6) {
      //--- Set trailing parameters for MA
      dynamic_cast<CTrailingMA*>(trailing).Period(Trailing_MA_Period);
      dynamic_cast<CTrailingMA*>(trailing).Shift(Trailing_MA_Shift);
      dynamic_cast<CTrailingMA*>(trailing).Method(Trailing_MA_Method);
      dynamic_cast<CTrailingMA*>(trailing).Applied(Trailing_MA_Applied);
   }
     
   if (traillingStopLoss == 7) {
      //--- Set trailing parameters for FIXED
      dynamic_cast<CTrailingFixedPips*>(trailing).StopLevel(Trailing_FixedPips_StopLevel);
      dynamic_cast<CTrailingFixedPips*>(trailing).ProfitLevel(Trailing_FixedPips_ProfitLevel);
   }
 
fxsaber:

Thanks a lot! I didn't know about "dynamic_cast"!


Thank you very much!

 
livio.zanol: I didn't know about "dynamic_cast"!
  1. Except that you shouldn't use it. If the classes are properly designed, all calls should go through the base class.
  2. Initialization is a reasonable exception and should be done when the object is first created, not later with the DC.
CExpertTrailing* trailing = NULL;

if ((traillingStopLoss > 2) && (traillingStopLoss < 8)) {
   
      if (traillingStopLoss == 3) {
         CTrailingBarraBarra* bb=new CTrailingBarraBarra; trailing=bb;
         if(bb) bb.Pips(traillingStopPips);
      }
      if (traillingStopLoss == 4) {  
         CTrailingRR* rr= new CTrailingRR; trailing = rr;
         if(rr) rr.WaitForCandleClose(InpTraillingStopRRWaitForCandleClose);  
      }