Olá Daniel Andrejczuk,
Você não postou o código todo.
Provavelmente você está fazendo um loop para obter as ordens, mas sem visualizar o código é impossível dizer onde pode estar o erro.
Abraços,
Malacarne
Opa, segue o código completo abaixo:
string di04_contabilidade_dia_placar_atual; double di04_contabilidade_dia_saldo=0; double di04_contabilidade_dia_profit=0; double di04_contabilidade_dia_max_ganho=0; double di04_contabilidade_dia_max_perda=0; long di04_contabilidade_dia_acerto=0; long di04_contabilidade_dia_erro=0; long di04_contabilidade_dia_ordens=0; string di04_contabilidade_dia_taxa_acerto=""; bool di04_contabilidade_dia_meta_ou_perda_atingida; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void di04_funcao_contabilidade_dia_verificar(string tmp_DataPesquisar, long tmp_magic2 , string tmpOrigem, double tmpValorMaximoPerda, double tmpValor_Maximo_Ganho, bool tmp_exibir_placar, bool TmpListarOrdens) { //apoio para cálculo = data de início da pesquisa das ordens executadas //tmp_DataPesquisar = string(tmp_data_b.year) + "." + string(tmp_data_b.mon) + "." + string(tmp_data_b.day) + " 00:00:01"; //di04_contabilidade_dia_meta_ou_perda_atingida=false; di04_contabilidade_dia_max_ganho=0; di04_contabilidade_dia_max_perda=0; MqlDateTime data_xxxx; TimeToStruct(datetime(tmp_DataPesquisar), data_xxxx); MqlDateTime data_yyyy; //tmp_magic2 = código identificador da estratégia //tmpOrigem = comentario de qual local EA foi chamado a função //tmpValorMaximoPerda = valor máximo desejado como perda máxima //tmpValor_Maximo_Ganho = valor estipulado de meta do dia //tmp_placar = true exibe no comment o resultado das negociações do dia double tmp_estrategia_saldo=0; short tmp_estrategia_acerto=0; short tmp_estrategia_erro=0; //string tmp_x; int tmp_contador; //MqlDateTime tmp_data_b di04_contabilidade_dia_profit=0; //atualiza a hora atual na variável //TimeCurrent(tmp_data_b); //HistoryDealsTotal = Retorna o número de ordens no histórico. Retorna o número de negócio no histórico. Antes de chamar HistoryDealsTotal(), primeiro é necessário receber o histórico de negócios e ordens utilizando a função HistorySelect() ou a função HistorySelectByPosition(). //int tmp_total=HistoryDealsTotal(); ulong tmp_ticket=0; long tmp_magic; //double tmp_price; double tmp_profit; datetime tmp_time; string tmp_symboll; long tmp_typee; long tmp_entry; long tmp_position_id; // long tmp_POSITION_TICKET; di04_contabilidade_dia_ordens=0; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //pesquisa a quantiade de ORDENS abertas da estratégia int tmp_total=OrdersTotal(); for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++) { tmp_ticket=OrderGetTicket(tmp_contador); if(OrderGetInteger(ORDER_MAGIC)==tmp_magic2) { //de ordens em aberto di04_contabilidade_dia_ordens = di04_contabilidade_dia_ordens+1; } } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //pesquisa a quantiade de POSIÇÃO abertas da estratégia // tmp_total=0; // tmp_total=PositionsTotal(); // for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++) // { // tmp_ticket=PositionGetTicket(tmp_contador); // if(PositionGetInteger(POSITION_MAGIC)==tmp_magic2) // { // //de ordens em aberto // di04_contabilidade_dia_ordens = di04_contabilidade_dia_ordens+1; // } // } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //HistorySelect = Recupera o histórico de transações e ordens para o período do tempo de servidor especificado. if(HistorySelect(StringToTime(tmp_DataPesquisar), TimeCurrent())==true) { Print("Selecionado histórico com sucesso."); } tmp_total=0; tmp_total=HistoryDealsTotal(); Print("Total retornado: " + string(tmp_total)); //--- para todos os negócios for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++) { //--- tentar obter ticket negócios if((tmp_ticket=HistoryDealGetTicket(tmp_contador))>0) { //--- obter as propriedades negócios //tmp_price =HistoryDealGetDouble(tmp_ticket,DEAL_PRICE); tmp_time =(datetime)HistoryDealGetInteger(tmp_ticket,DEAL_TIME); TimeToStruct(tmp_time, data_yyyy); tmp_symboll=HistoryDealGetString(tmp_ticket,DEAL_SYMBOL); tmp_typee =HistoryDealGetInteger(tmp_ticket,DEAL_TYPE); tmp_magic =HistoryDealGetInteger(tmp_ticket,DEAL_MAGIC); tmp_position_id =HistoryDealGetInteger(tmp_ticket,DEAL_POSITION_ID); tmp_entry =HistoryDealGetInteger(tmp_ticket,DEAL_ENTRY); tmp_profit=HistoryDealGetDouble(tmp_ticket,DEAL_PROFIT); //tmp_POSITION_TICKET=HistoryDealGetInteger(tmp_ticket,POSITION_TICKET); //Print("position id " + string(tmp_position_id) + " DANIEL Magic " + string(tmp_magic) + " Tickt " + string(tmp_ticket) + " Entry " + string(tmp_entry) + " type " + string(tmp_typee)); //--- apenas para o símbolo atual //---apenas para a estratégia selecionada if((data_yyyy.day == data_xxxx.day) && (data_yyyy.mon == data_xxxx.mon) && (data_yyyy.year == data_xxxx.year)) { if(tmp_symboll==Symbol()) { if(tmp_entry==DEAL_ENTRY_OUT) { di04_contabilidade_dia_profit = di04_contabilidade_dia_profit + tmp_profit; if(di04_contabilidade_dia_max_ganho==0)di04_contabilidade_dia_max_ganho=di04_contabilidade_dia_profit; if(di04_contabilidade_dia_max_perda==0)di04_contabilidade_dia_max_perda=di04_contabilidade_dia_profit; if(di04_contabilidade_dia_profit>di04_contabilidade_dia_max_ganho)di04_contabilidade_dia_max_ganho=di04_contabilidade_dia_profit; if(di04_contabilidade_dia_profit<di04_contabilidade_dia_max_perda)di04_contabilidade_dia_max_perda=di04_contabilidade_dia_profit; if(tmp_magic==tmp_magic2) { //pesquisa a quantidade de negócios efetivados da estratégia di04_contabilidade_dia_ordens = di04_contabilidade_dia_ordens+1; tmp_estrategia_saldo = tmp_estrategia_saldo + tmp_profit; if(tmp_profit>0) { if(tmp_magic==tmp_magic2) tmp_estrategia_acerto = tmp_estrategia_acerto + 1; } if(tmp_profit<0) { if(tmp_magic==tmp_magic2) tmp_estrategia_erro = tmp_estrategia_erro + 1; } if(TmpListarOrdens==true) { Print(">>ORDEM: " + DoubleToString(tmp_ticket,0) + " Tipo: " + string(tmp_typee) + " DATA: " + TimeToString(tmp_time) + " Profit: " + string(tmp_profit));// + " Coment: " + HistoryDealGetString(tmp_ticket,DEAL_COMMENT) ); } } } } } } } di04_contabilidade_dia_saldo = tmp_estrategia_saldo; di04_contabilidade_dia_acerto = tmp_estrategia_acerto; di04_contabilidade_dia_erro = tmp_estrategia_erro; di04_contabilidade_dia_taxa_acerto=""; if ((di04_contabilidade_dia_acerto+di04_contabilidade_dia_erro)>0) di04_contabilidade_dia_taxa_acerto = DoubleToString((di04_contabilidade_dia_acerto/(di04_contabilidade_dia_erro + di04_contabilidade_dia_acerto) )*100,2) + "%"; if ((di04_contabilidade_dia_erro==0) && (di04_contabilidade_dia_acerto>0))di04_contabilidade_dia_taxa_acerto = "100,00%"; if (tmp_estrategia_saldo == 0) { if (tmp_exibir_placar = true) di04_contabilidade_dia_placar_atual = "Placar 0x0"; di04_contabilidade_dia_meta_ou_perda_atingida=false; } else { if ((tmp_estrategia_saldo > 0) && (tmp_estrategia_saldo != 0)) { if (tmp_exibir_placar = true) di04_contabilidade_dia_placar_atual = "Lucro R$" + DoubleToString(NormalizeDouble(tmp_estrategia_saldo, 2),2) ; } if ((tmp_estrategia_saldo < 0) && (tmp_estrategia_saldo != 0)) { if (tmp_exibir_placar = true) di04_contabilidade_dia_placar_atual = "Prejuizo R$" + DoubleToString(NormalizeDouble(tmp_estrategia_saldo, 2),2); } if (tmp_estrategia_saldo < tmpValorMaximoPerda) { Print("Perda máxima alcançada."); di04_contabilidade_dia_meta_ou_perda_atingida=true; } else { if (tmp_estrategia_saldo > tmpValor_Maximo_Ganho) { Print("Meta Batida."); di04_contabilidade_dia_meta_ou_perda_atingida=true; } } } if(TmpListarOrdens==true) { Print("Resultado Estratégia(" + string(tmp_magic2) + ") = R$" + DoubleToString(di04_contabilidade_dia_saldo,2) + " Máximo: " + DoubleToString(di04_contabilidade_dia_max_ganho,2) + " Mínimo" + DoubleToString(di04_contabilidade_dia_max_perda,2) + " Acertos x Erros = " + string(di04_contabilidade_dia_acerto) + " X " + string(di04_contabilidade_dia_erro)); } } ;
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
Bom dia!
A função abaixo esta selecionado ordens fora da data especificada, alguém sabe dizer o motivo?
O resultado dos prints acima;
2017.06.19 10:31:16.642 2017.01.03 09:00:00 2017.01.03 00:00:01
2017.06.19 10:31:20.660 2017.01.03 09:00:00 2017.01.03 09:00:00
Na data 2017.01.03 não tenho ordens emitidas, e sim em outra data conforme histórico da imagem.
At.
Daniel