Implementação condicional de Trailing stop

 

Pessoal, gostaria de uma ajuda de vocês, eu estou tentando implementar um trailing stop onde eu possa escolher nos parâmetros qual tipo usar (Nulo, fixo, média, Psar).

Qual a minha dúvida, se eu implemento um if para instanciar somente o objeto necessário o objeto somente fica "vivo" no escopo do if. Então eu tenho que iniciar o objeto antes e instanciar dentro do if, mas nesse ultimo caso eu somente consigo usar os métodos já implementados nas classes herdadas, mas não a específica que eu realmente quero usar. Há alguma forma de fazer isso? Alguma sugestão?

Segue o trecho do código.


input TipoTrailing      TipoTrail                    =TipoNulo;          // Tipo de Trailing Stop usado
input double            TS_Nivel                     =50;                // Nível (Fixo) ou Máximo (PSar)
input double            TS_Step                      =50;                // Passo (Fixo ou PSar)
CExpertTrailing *TS;
int OnInit()
  {
    if(TipoTrail == TipoNulo)
    {
     TS=new CTrailingNone;
    }
    else if(TipoTrail == TipoFixo)
    {
      TS = new CTrailingMyFixo; 
      TS.StopLevel(TS_Nivel); // Dá erro, não reconhece o método de CTrailingMyFixo, só os de CExpertTrailing, mesmo eu instanciando o primeiro
      TS.Step(TS_Step);
      TS.TriggerLevel(0.0);
      TS.IsTester(isTester);
    }
  }
 

Consegui resolver, mas tive que dar uma volta, se alguém tiver uma sugestão melhor, eu fiz conforme imagem anexa abaixo:

Ou seja, eu criei uma classe "CNewTrailing" abstrata estendendo a CExpertTrailing só para definir os métodos virtuais que eu iria implementar nas classes filhas e tive que criar novas classes filhas (salvei como e mudei o nome do arquivo e da classe) para poder implementar nelas esses métodos, sem alterar as classes padrão. Não pode esquecer do override nos métodos das filhas. Assim, com essa volta danada, consegui o polimorfismo que eu queria.

Arquivos anexados:
NewTrailing.png  12 kb