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

 
Natashe4ka:

Isto também é correto se o "cnt" estiver zerado, mas então o valor é novamente incompreensível como na captura de tela 3 (deve ser um valor de lucro de 4,27)

double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  int cnt=0;
  double LastProfit=0;
   for(i=0;i<OrdersHistoryTotal();i++)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
       }
  return(LastProfit);
   }

Não é bom quando eu não tenho pensamento lógico(

No mercado real, o depósito derreterá em 3 dias com este tipo de lógica.

 
Vitaly Muzichenko:
É ruim quando você não pensa logicamente(

É isso mesmo.

A ordem pendente foi eliminada

 
Natashe4ka:

É isso mesmo.

A ordem pendente foi eliminada

É compreensível como é.
 

OK, então como você devolve um ticket de pedidos fechados que são iguais a OrderCloseTime() e calcula seu lucro?
Assim:

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}
 
Natashe4ka:

OK, então como você devolve um ticket de pedidos fechados que são iguais a OrderCloseTime() e calcula seu lucro?
Algo parecido com isto:

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}


E se fechar em uma parada?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

 
Eu escrevi um sistema de registro de saque ou lucro acumulado - parecia algo parecido com isto: para cada ordem de mercado durante a abertura é criada uma variável global com o nome do bilhete desta ordem e quando precisamos recalcular o lucro/perda acumulado, basta verificar a lista atual de ordens em relação à lista de variáveis globais e efetuar a contabilidade eliminando as variáveis em excesso e adicionando o lucro diretamente ao bilhete a partir do nome.
 
Renat Akhtyamov:

E se fechar em uma parada?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

Bem, que matrizes, que bilhetes, que ordens?

Após o primeiro reinício do terminal, ou desligamento durante o fim de semana, você simplesmente perderá todos os dados, e isso será o fim de toda a escrita e cálculos.

 
Aleksey Semenov:
Por exemplo, quando eu estava escrevendo para mim mesmo o sistema de contagem de saque ou lucro acumulado, parecia assim: para cada ordem de mercado durante a abertura é criada uma variável global com o nome do bilhete desta ordem e quando queremos recalcular o lucro/perda, simplesmente verificamos a lista de ordens atual em relação à lista de variáveis globais e efetuamos o cálculo eliminando as variáveis em excesso e adicionando o lucro diretamente ao bilhete a partir do nome.

Esta é uma carga pesada no sistema, em um indicador funciona bem, mas em um EA a enumeração de uma dúzia de variáveis globais pode causar o congelamento do terminal.

Há um horário de abertura e fechamento, você tem que trabalhar com ele, e não há dificuldade em obtê-lo, e com um registro de tempo você pode obter todas as informações sobre o estado da conta, e não precisa de uma bicicleta.

 
Vitaly Muzichenko:

Que matrizes, que bilhetes, que ordens?

Após o primeiro reinício do terminal, ou um fim de semana de encerramento, você simplesmente perderá todos os dados, e isso será o fim de toda a escrita e cálculos.

é solvível

Não tenho que explicar a você.

 
Vitaly Muzichenko:

Esta é uma carga pesada no sistema, em um indicador funciona bem, mas em um EA a contagem de dezenas de variáveis globais pode causar o congelamento do terminal.

Há horários de abertura e fechamento, é disso que você precisa trabalhar, e não há dificuldade em obtê-lo, com um registro de tempo você pode obter todas as informações sobre o estado da conta, e você não precisa de uma bicicleta.

Se você tiver por exemplo um terminal cheio de centenas de variáveis globais não utilizadas, então sim - a reconstrução terminará tristemente, se não, então ela funcionará muito rapidamente, se escrita corretamente