Cálculo do lucro de pedidos fechados "HELP - página 9

 
Natashe4ka:

Eu também achei que estava contando corretamente.
Eu não deveria ter colocado esta informação no código e minha vida teria sido mais fácil))

E agora estou me perguntando como a função não funcionou corretamente durante todo este tempo!!!

Vejo que tenho que retirar o cheque para lucro = positivo, por causa disso a conta pára mais tarde, só tive que levar em conta minha perda anterior também.

double lastloss()
{
double lastlos=0.0,lastlot=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}
 
Natashe4ka:

Também me pareceu, que tudo conta como deveria.
Eu não deveria ter colocado esta informação no código e a vida teria sido mais fácil))

E agora é desconcertante como a função não funcionou corretamente durante todo este tempo!!!

Você está usando a função das primeiras páginas de seu livro para fechar. No testador ele fechará quase normalmente, mas no comércio real o bot fechará muitas vezes no vermelho, especialmente se ele tiver um pequeno lucro.

Você já tentou negociar no mercado real ou apenas no testador?

Você já viu tal situação, quando uma série de posições são fechadas? Observe a diferença em pips do sinal para fechar, e para fechar a última posição

Para não enviar spam, anexarei apenas 3 imagens de tela, embora na realidade haja mais de uma centena delas disponíveis:


Todas as funções funcionam corretamente para todos, mas somente você não trabalha corretamente. Você já se perguntou por quê?

E finalmente, a pergunta que você precisa se fazer, não precisamos de uma resposta: você vai reiniciar o terminal a qualquer momento, ou fechá-lo para o fim de semana, ...? Se sim, como você obterá o lucro no próximo lançamento do terminal para continuar o trabalho do Expert Advisor que foi feito no último fechamento da série, se você não quiser salvá-lo em nenhum lugar?

 

Há mais:

Por que eu perguntei sobre o que a remoção de uma ordem entre posições de fechamento faz?


Agora temos uma situação: uma EA começa a fechar posições quando chega ao lucro e então recebe uma ordem que não tem qualquer utilidade, ou seja, não tem lucro nem perda, mas uma ordem para remover esta ordem é enviada e enquanto está sendo removida, o preço sai e a EA continua a fechar mais. O resultado é o seguinte: começamos a fechar o lucro, mas como fechamos tudo errado, acabamos fechando a série com um prejuízo. É normal? Não escreva códigos somente para o testador, escreva um código pelo menos para trabalhar em uma conta demo.

 
Vitalie Postolache:

Entendi, preciso retirar o cheque para lucro = positivo, faz com que a conta pare mais tarde, só precisava levar em conta minha perda anterior também.

double lastloss()
{
double lastlos=0.0,lastlot=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}

Funciona, conta como deveria, genial, fantástico!!!
Obrigado - obrigado - obrigado !!!!!!!!!!!!)))))))))))))

Você se saiu bem))

 
Vitaly Muzichenko:

Há mais:

Por que eu perguntei sobre o que a remoção de uma ordem entre posições de fechamento faz?


Agora temos uma situação: uma EA começa a fechar posições quando chega ao lucro e então recebe uma ordem que não tem qualquer utilidade, ou seja, não tem lucro nem perda, mas uma ordem para remover esta ordem é enviada e enquanto está sendo removida, o preço sai e a EA continua a fechar mais. O resultado é o seguinte: começamos a fechar o lucro, mas como fechamos tudo errado, acabamos fechando a série com um prejuízo. É normal? Não escreva códigos somente para o testador, escreva um código pelo menos para trabalhar em uma conta demo.

Sim, eles não fecham lá em ordem, isso acontece se o ciclo de fechamento começa do zero.
 
Vitalie Postolache:
Eles não fecham em nenhuma ordem, isso acontece se o ciclo de fechamento começa do zero.

De que zero?

Bem, por que perder tempo com a eliminação de pedidos no momento do fechamento da grade? Você mesmo sabe que apagar um pedido leva tempo, então por que desperdiçá-lo, e se sua corretora não for rápida, estamos ferrados. Mostrei uma captura de tela com 15 posições fechadas em 1 minuto e 34 segundos e temos que perceber que o preço pode passar por mais de uma dúzia de pontos durante este tempo e teremos sorte se ele for em nossa direção e não contra nós.

 
Vitaly Muzichenko:

De que zero?

Bem, por que perder tempo com a eliminação de pedidos no momento do fechamento da grade? Você mesmo sabe que apagar um pedido leva tempo, então por que desperdiçá-lo, e se sua corretora não for rápida, estamos ferrados. Uma vez afixei um screenshot onde 15 posições foram fechadas em 1 minuto e 34 segundos, e temos que entender que o preço pode passar por mais de uma dúzia de pontos durante este tempo e teremos sorte se ele for em nossa direção e não contra nós.

A partir deste ponto zero para(int i=0;i<OrdersHistoryTotal();i++) - Desta forma, as ordens serão fechadas uma a uma no melhor caso, se forem selecionadas por número ordinal.

Sim, eu sei, uma ordem pendente não deve ser apagada no meio do processo de fechamento de uma série, e seria melhor fechá-la em ordem, mas isto vem com a experiência.