Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Estou tentando alterar o stop loss para o stop principal... Como faço isso?
É isso que estou fazendo:
COrder *order=orders.At(i); .... COrderStop *order_stop=order.MainStop(); double new_sl=...; order_stop.StopLoss(new_sl); order.MainStop(order_stop); order.CheckStops();Eu realmente quebrei minha cabeça tentando fazer isso...
Ele não está sendo atualizado por causa da verificação em COrderStopVirtualBase::Update
StopLoss() retorna um novo valor, mas sl_line ainda é antigo...
Oi Shep,
Obrigado por apontar isso. Eu não havia notado isso até agora. Atualizarei o código.
Sim, estou ciente disso. Isso ainda se deve às declarações de encaminhamento. O CStop requer instâncias de COrder e COrderStop em seus métodos. O mesmo acontece quando você tenta compilar o CStop. Todas essas classes que requerem umas às outras devem ser compiladas juntas. Haveria erros se cada uma fosse compilada isoladamente. Por exemplo:
Isso não será compilado. Você precisa fazer uma declaração forward para que o compilador reconheça o membro da classe m_object2 dentro da classe object1:
Isso é aceitável se Object1 e Object2 estiverem no mesmo arquivo. Se eles estiverem em dois arquivos separados, você precisará fazer uma declaração forward para Object2 no arquivo de classe de Object1 e para Object1 no arquivo de classe Object 2. Isso é verdade, até que você adicione métodos a uma das duas classes.
A versão atual do compilador reconhece as declarações de encaminhamento, mas não os métodos listados da classe declarada de forma encaminhada. É por isso que você não recebe mensagens de erro como "CStop - declaração sem tipo", mas recebe mensagens de erro do compilador para os métodos, como o que você postou acima. O compilador reconhece a classe, mas não os métodos da classe que foi declarada de forma avançada.
Olá, Enrico,
Obrigado pela resposta rápida. Você tem toda a razão sobre as declarações antecipadas. Eu estava preocupado que o problema fosse mais profundo do que isso. Faz sentido que o objeto que usa a classe declarada antecipadamente não tenha conhecimento dos membros dessa classe.
Eu uso um modelo diferente para meu mecanismo de execução que usa o padrão de estratégia. Tenho alguns problemas incômodos com ele e estava dando uma olhada na sua biblioteca quando me deparei com esses problemas.
Seu trabalho é realmente excelente, você tem habilidades sólidas de design e engenharia e obrigado por ter a gentileza de compartilhar.
Obrigado, Shep.
Oi Enrico,
Obrigado pela resposta rápida. Você tem toda a razão sobre as declarações antecipadas. Eu estava preocupado que o problema fosse mais profundo do que isso. Faz sentido que o objeto que usa a classe declarada antecipadamente não tenha conhecimento dos membros dessa classe.
Eu uso um modelo diferente para meu mecanismo de execução que usa o padrão de estratégia. Tenho alguns problemas incômodos com ele e estava dando uma olhada na sua biblioteca quando me deparei com esses problemas.
Seu trabalho é realmente excelente, você tem habilidades sólidas de design e engenharia e obrigado por ter a gentileza de compartilhar.
Obrigado, Shep.
Oi, Shep,
De nada e obrigado por me informar. Lembro-me de que também fiquei um pouco confuso quando me deparei com esse problema com as declarações de avanço.
Fico feliz em saber que você achou os artigos úteis. Desejo a você tudo de bom em seus esforços para criar seu próprio mecanismo de EA.
Atenciosamente, Enrico
Ele não está sendo atualizado por causa da verificação em COrderStopVirtualBase::Update
StopLoss() retorna um novo valor, mas sl_line ainda é antigo...
A finalidade de COrderStopVirtualBase::Update é, na verdade, o oposto do que você pretende. Ele se destina a ajustar o valor de sl/tp quando sua própria linha de parada é atualizada, geralmente de fora do EA (arrastando no gráfico ou alterando diretamente o valor na janela de propriedades do objeto ). Em vez disso, use os métodos MoveStopLoss() e MoveTakeProfit() para os stops virtuais.
Isso deve ficar para o próximo artigo, mas se você estiver ansioso, talvez queira dar uma olhada no método CheckTrailing() do COrderStopBase. Ele modifica o stop da ordem quando qualificado para trailing. O método se aplica a todos os três tipos:
Como alternativa, a classe CTrail também pode ser usada para alterar os níveis de sl/tp sem precisar recuperar uma instância de um stop de ordem (não apenas para trailing ou breakeven).
Quão longe da prática e da conveniência está a abordagem de plataforma cruzada proposta. Como sua própria bicicleta incômoda, tudo bem. Mas por que publicá-la? É mais fácil escrever tudo completamente por conta própria, mesmo para um iniciante, do que estudar e dominar esse monstro. Não estou entendendo.
O SB no MT5 é um exemplo de elegância comparado a esse ciclo de artigos. E ele também foi portado para o MT4.
Gostei muito do artigo, ele abriu meus olhos. Por favor, escreva um artigo de acompanhamento. Estou realmente interessado em saber como você abordaria o escalpelamento com essa ferramenta.
Muito obrigado por este e todos os seus outros trabalhos.
Quão longe da prática e da conveniência está a abordagem de plataforma cruzada proposta. Como sua própria bicicleta incômoda, tudo bem. Mas por que publicá-la? É mais fácil escrever tudo completamente por conta própria, mesmo para um iniciante, do que estudar e dominar esse monstro. Não estou entendendo.
O SB no MT5 é um exemplo de elegância comparado a esse ciclo de artigos. E ele foi portado para o MT4.
Concordo plenamente. Mesmo estando muito familiarizado com OOP, a abordagem desse autor é muito pervertida. Há muitos excessos e o código não é de fato um código, mas um "monstro". .....