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

 
Natashe4ka:
Os pedidos são fechados em série, mas se não houver condições de fechamento, os pedidos são coletados por um ou dois dias, etc.

Se a série é fechada praticamente durante um ciclo, digamos, durante a vida útil de uma barra, então podemos tomar o critério da série no momento do fechamento mais uma barra. Ou seja, todas as ordens cujo tempo de fechamento é menor do que aquele que deve ser descartado.

Entretanto, temos a preocupação de que isto só funcionará no testador; qualquer intervenção manual resultará em cálculo de lucro incorreto (somente o lucro da EA será levado em conta, enquanto que o comércio manual não o fará).

 
Vitalie Postolache:
Se a série é fechada praticamente durante um ciclo, digamos, durante a vida útil de uma barra, então podemos tomar o critério de série pelo tempo de fechamento mais uma barra. Ou seja, todas as ordens com o tempo de fechamento inferior a isso devem ser descartadas.

Isto é

if ((op<0||OrderType()==op) && (t==OrderCloseTime() ||  t==OrderCloseTime()+60)) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

(t===OrderCloseTime()||t==OrderCloseTime()+60)?

 
Natashe4ka:

Isto é

if ((op<0||OrderType()==op) && t==OrderCloseTime()+60) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

+60 ?

PeriodSeconds() seria mais correto. Ou você vai trabalhar apenas na M1?

Algo parecido com isto:

double lastloss()
{
double lastlos=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) time=OrderCloseTime();
            op=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break;
            lastlos+=op;
            if(cnt!=0) cnt++;
         }
      }
}
return(lastlos);
}
 
Vitalie Postolache:

Algo parecido com isto:

Isto acrescenta um novo valor ao valor anterior. Mas a cada novo fechamento, um novo valor do lucro.
 

E você também pode numerar os pedidos no comentário, para aqueles CDs que não sobregravam o comentário. E ao experimentar o número do comentário, assim que o número estiver fora de ordem - a série termina.

Exemplo: Encomendas série número 1,2,3,4,5. Fechado em ordem 5,4,3,2,1 - o laço vê 1 e interrompe. Fechamento em ordem 1,2,3,4,5 e 1 (o número de ordem da série anterior) - o laço vê a diferença 5-1>1 e aborta. Preciso pensar como traduzir isso em código ))))

 
Natashe4ka:
Portanto, um novo valor é adicionado ao valor anterior. E a cada novo fechamento, um novo valor de lucro.
Não sei, não faz sentido para mim.
 
Vitalie Postolache:
Não sei, não faz sentido para mim.

Coloque a informação e você verá que ela se soma.

color ProfitColor;

   if(lastloss()<0) ProfitColor=Red;
   if(lastloss()>0) ProfitColor=LimeGreen;
   if(lastloss()==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(lastloss(),2)),10,"Arial",ProfitColor);
 
Natashe4ka:

Coloque as informações e você verá o que se soma imediatamente.

Hmm, sim, de fato... Vamos continuar pensando ))))
 
Eu entendo que este é um teste no testador....
 
Vitalie Postolache:
Hmm, sim, de fato... Vamos continuar pensando ))))

Eu também achei que estava contando 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 adequadamente durante todo este tempo!!!