Confira o novo artigo: Desenvolvimento de um Expert Advisor multimoeda (Parte 5): Tamanhos de posição variáveis.
Autor: Yuriy Bykov
Quando executo o EA SimpleVolumesExpert com (3+3+3) e escalonamento 2.18, o registro mostra negociações virtuais abertas, mas nenhuma negociação real no testador de estratégia. Será que perdi alguma coisa?
Quando executo o SimpleVolumesExpert com (3+3+3) e escala 2.18, o registro mostra negociações virtuais abertas, mas nenhuma negociação real no testador de estratégia. Talvez eu tenha perdido alguma coisa?
Verifique se o saldo inicial no testador é de US$ 10.000 ou mais. Tenho esse comportamento quando o saldo não é grande o suficiente. Nesse caso, nem toda posição virtual gera uma posição real. Mas o motivo provavelmente é outro, pois seu saldo provavelmente está correto.
Há alguma negociação real se o EA for executado com outras variantes de agrupamento de estratégias?
Boa tarde. Obrigado por seu trabalho. Estou muito interessado em sua arquitetura e estou tentando entendê-la passo a passo. Mudei apenas a classe da estratégia - uso a minha própria. Mas, nesse estágio, tive dificuldades com o dimensionamento da estratégia. Para a pureza do experimento, usei uma instância da estratégia e duas variantes do multiplicador de escala_ 1 e 2 (fixedBalance_ = 0;). Em ambos os casos, o resultado é o mesmo: o tamanho do lote não muda. O local no código em que o tamanho do lote é determinado
//+------------------------------------------------------------------+ //| Determinação do tamanho real da posição virtual //+------------------------------------------------------------------+ double CMoney::Volume(CVirtualOrder *p_order) { // Solicitar o balanço normalizado da estratégia para essa posição virtual double fittedBalance = p_order.FittedBalance(); // Se for igual a 0, o volume real é igual ao volume virtual if(fittedBalance == 0.0) { return p_order.Volume(); } // Caso contrário, encontraremos o valor do saldo total do comércio double totalBalance = s_fixedBalance > 0 ? s_fixedBalance : AccountInfoDouble(ACCOUNT_BALANCE); // Retorna o volume real calculado pelo volume virtual return p_order.Volume() * totalBalance * s_depoPart / fittedBalance ; } //+------------------------------------------------------------------+
No entanto, os parâmetros m_fittedBalance e m_fixedLot são definidos por padrão no construtor da estratégia virtual.
//+------------------------------------------------------------------+ //| Construtor| //+------------------------------------------------------------------+ CVirtualStrategy::CVirtualStrategy(double p_fittedBalance = 0, double p_fixedLot = 0.01) : m_fittedBalance(p_fittedBalance), m_fixedLot(p_fixedLot) {}
Portanto, o tamanho do lote não muda.
// Se for igual a 0, o volume real é igual ao volume virtual if(fittedBalance == 0.0) { return p_order.Volume(); }
Embora, logicamente, ele deva ser dimensionado. Não quero interferir em minhas próprias edições - para não quebrá-las - e já adicionei alguns métodos à classe CVirtualOrder porque minha estratégia fornece fechamento parcial, stop loss e fechamento no sinal do contador.
Olá.
Tudo está correto; para a negociação de lote variável, é necessário que uma instância de estratégia receba o valor m_fittedBalance > 0. Isso é feito pelos herdeiros da classe base da estratégia de negociação. Esse parâmetro é passado a eles, e eles o substituem na chamada do construtor CVirtualStrategy:
class CSimpleVolumesStrategy : public CVirtualStrategy { ... public: //--- Métodos públicos CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders, double p_fittedBalance = 0 ); // Construtor ... }; ... //+------------------------------------------------------------------+ //| Construtor| //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, ... int p_maxCountOfOrders, double p_fittedBalance = 0) : // Lista de inicialização CVirtualStrategy(p_fittedBalance, 0.01), m_symbol(p_symbol), m_timeframe(p_timeframe), ... }
Ao criar instâncias, especificamos um valor específico para o último parâmetro para que o valor padrão de 0 não seja substituído por ele:
//+------------------------------------------------------------------+ //| Função de inicialização de especialista| //+------------------------------------------------------------------+ int OnInit() { // Definir parâmetros na classe de gerenciamento de capital CMoney::DepoPart(expectedDrawdown_ / 10.0); CMoney::FixedBalance(fixedBalance_); // Criar um Expert Advisor que funcione com posições virtuais expert = new CVirtualAdvisor(magic_, "SimpleVolumes_" + EnumToString(group_)); // Criar e preencher uma matriz de todas as instâncias de estratégia CVirtualStrategy *strategies[] = { new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 13, 0.3, 1.0, 0, 10500, 465, 1000, 3, 1600), new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 17, 1.7, 0.5, 0, 16500, 220, 1000, 3, 900), new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 51, 0.5, 1.1, 0, 19500, 370, 22000, 3, 1600), ... }; ... return(INIT_SUCCEEDED); }
No Consultor especialista SimpleVolumesExpertSingle.mq5, não fazemos isso, pois a otimização só é realizada em um tamanho de posição inicial fixo. Observe que o parâmetro m_fixedLot não precisa ser usado na estratégia exclusivamente como o tamanho de todas as posições virtuais abertas. Ele é apenas um valor base a partir do qual podemos calcular quaisquer outros. Na estratégia modelo do artigo, simplesmente os tamanhos de todas as posições são os mesmos e esse parâmetro é usado sem transformação. Mas nada o impede de abrir uma posição virtual de tamanho 10*m_fixedLot em outra estratégia e, em seguida, aplicar seu fechamento gradual.
Olá.
Tudo está correto; para a negociação de lote variável, é necessário que uma instância de estratégia receba o valor m_fittedBalance > 0. Isso é feito pelos herdeiros da classe base da estratégia de negociação. Esse parâmetro é passado a eles, e eles o substituem na chamada do construtor CVirtualStrategy:
Ao criar instâncias, especificamos um valor específico para o último parâmetro para que o valor padrão de 0 não seja substituído por ele:
No Consultor especialista SimpleVolumesExpertSingle.mq5, não fazemos isso, pois a otimização só é realizada em um tamanho de posição inicial fixo. Observe que o parâmetro m_fixedLot não precisa ser usado na estratégia exclusivamente como o tamanho de todas as posições virtuais abertas. Ele é apenas um valor base a partir do qual podemos calcular quaisquer outros. Na estratégia modelo do artigo, simplesmente os tamanhos de todas as posições são os mesmos e esse parâmetro é usado sem transformação. Mas nada o impede de abrir uma posição virtual de tamanho 10*m_fixedLot em outra estratégia e, em seguida, aplicar seu fechamento gradual.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Desenvolvendo um EA multimoeda (Parte 5): tamanho de posição variável foi publicado:
Nos capítulos anteriores, o EA desenvolvido só podia usar um tamanho de posição fixo para negociações. Isso é adequado para testes, mas não é aconselhável ao negociar mediante uma conta real. Vamos adicionar a capacidade de operar com tamanhos de posição variáveis.
Na parte anterior, adicionamos a capacidade de restaurar o estado do EA após um reinício. Não importa a causa, quer seja reinicialização do terminal, mudança de timeframe no gráfico com o EA, lançamento de uma versão mais recente do EA; em todos os casos, a restauração do estado permitia que o EA não começasse do zero e não perdesse posições já abertas, mas continuasse a processá-las.
No entanto, o tamanho das posições abertas para cada instância da estratégia permanecia o mesmo durante todo o período de teste. Seu tamanho era definido na inicialização do EA. Se, como resultado do trabalho do EA, o saldo da conta de negociação aumentasse, isso permitiria usar um tamanho de posição maior sem aumentar o risco. Tal possibilidade é desejável, então vamos implementar o uso de tamanhos de posição variáveis.
Autor: Yuriy Bykov