Você poderia, por favor, explicar melhor o que você quer dizer?
Enquanto a documentação (ver FileOpen()) mostra o delimitador sendo incluído entre aspas simples, o livro (ver File Operations) é inconsistente com relação ao uso de aspas simples: alguns exemplos de código mostram o uso das aspas duplas.
Você poderia, por favor, explicar melhor o que você quer dizer?
Enquanto a documentação (ver FileOpen()) mostra o delimitador sendo incluído entre aspas simples, o livro (ver File Operations) é inconsistente com relação ao uso de aspas simples: alguns exemplos de código mostram o uso das aspas duplas.
Além disso, o seguinte código:
compilado, não teve nenhum erro de tempo de execução, e produziu a seguinte saída no arquivo:
Eu tentei ";" e ';' tenho o mesmo problema.
Meu código roda e funciona muito bem, o arquivo é criado e a cada tic tac do arquivo é aberto, toda a informação é escrita nele e então o arquivo é fechado. Tudo funciona muito bem até a EA abrir uma ordem, então nada é escrito no arquivo.
WHRoeder: O primeiro é uma corda, o segundo é uma int (como requerido.) O erro mencionado p 1. Problemas múltiplos?
O erro é o cabo do arquivo, o cabo é sempre 1 e sempre funciona, mas quando a EA abre um pedido, o próximo tique diz que o cabo é inválido mesmo que seja 1 novamente e tenha funcionado para as últimas centenas de carrapatos. A última vez que experimentei o handle começou a subir quando o pedido abriu, ele se tornou 2, 3, 4, etc.
É exatamente o mesmo código, não sei por que não fica como 1, e mesmo quando ainda é 1, ainda dá o erro.
Não consigo ver um problema com o código que você postou.
Portanto, vejo 2 opções :
poste todo seu código para que possamos experimentá-lo por nós mesmos e tentar consertá-lo
criar um pequeno roteiro/EA que replique o assunto e poste que
Obrigado RaptorUK, eu já tinha criado uma EA que reproduz o problema exatamente para tentar consertar o problema. Basicamente, ela começa, cria o arquivo cada vez que ele escreve sobre o arquivo, contando os carrapatos. Então o arquivo é como um carrapato 1, um carrapato 2, etc.
No tick 15, ele abre uma ordem, a informação do pedido aparece no arquivo e o final (******) também aparece. Depois disso, é suposto escrever em cada tique o número do tique (16, 17, etc.) e o status do pedido, ou seja, se o pedido ainda está aberto ou não. Por alguma razão, após o tick 15, a EA não escreve no arquivo.
Ao ticar 50 é suposto fechar a ordem, mas isso não é importante, o que é importante é que ela continua escrevendo no arquivo quando abre a ordem.
Em minha máquina Windows 7, os arquivos são criados em C:Usuários (nome do usuário).
Appdata é uma pasta oculta.
Obrigado de antemão
Código:
//+------------------------------------------------------------------+//| log.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"externstring Nombre_archivo="log";
externint Take_Profit=6;
externint Stop_Loss=35;
externint Deslizamiento=4;
externdouble vol=1;
int Handle, Qnt_Symb, ticket, err, abierta = 0;
string File_Name, larcor;
int cont=1;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----
File_Name = StringConcatenate(Nombre_archivo, " - ", Symbol(), " - ", TimeToStr(TimeLocal(),TIME_DATE), " - ", TimeHour(TimeLocal()), ".", TimeMinute(TimeLocal()), ".", TimeSeconds(TimeLocal()), ".txt");
Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,';');//File openingif(Handle==-1) // File opening fails
{
Alert("An error while opening the file. ",// Error message"May be the file is busy by the other applictiom");
PlaySound("Bzrrr.wav"); // Sound accompanimentreturn; // Exir start()
}
FileClose( Handle );
//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----double op, cl;
Print("Order open: ", abierta);
//Print("File: ", File_Name);
Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,';');//File openingPrint("Handle: ", Handle);
if(Handle==-1) // File opening fails
{
Alert("An error while opening the file. ",// Error message"May be the file is busy by the other applictiom");
PlaySound("Bzrrr.wav"); // Sound accompanimentreturn; // Exir start()
}
FileSeek(Handle, 0, SEEK_END);
Qnt_Symb=FileWrite(Handle,"**** INICIANDO TICK PAR ", Symbol(), ": ", TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS), " ****");
Qnt_Symb=FileWrite(Handle,"************************************************************");
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Este es el tick num: ", cont);
if(cont == 15){
op = iOpen(NULL, 0, 0);
cl = iClose(NULL, 0, 0);
if(op < cl){
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Estamos en LARGO, se abre compra");
ticket = OrderSend(Symbol(),OP_BUY,vol,Ask,Deslizamiento,Ask-Stop_Loss*Point,Ask+Take_Profit*Point);
if(ticket == -1){
err = GetLastError();
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Error No. ", err, " al tratar de abrir la orden");
}
else{
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Abierta orden ", ticket, ", hora: ", TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
abierta = 1;
}
}
else{
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Estamos en CORTO, se abre venta");
ticket = OrderSend(Symbol(),OP_SELL,vol,Bid,Deslizamiento,Bid+Stop_Loss*Point,Bid-Take_Profit*Point);
if(ticket == -1){
err = GetLastError();
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Error No. ", err, " al tratar de abrir la orden");
}
else{
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Abierta orden ", ticket, ", hora: ", TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
abierta = 1;
}
}
}
if((cont > 15) && (cont < 50)){
if(ticket != -1){
if(OrderSelect(ticket, SELECT_BY_TICKET) == true){
datetime horacierre = OrderCloseTime();
if(horacierre == 0){
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Orden ", ticket, " en par ". Symbol(), " sigue abierta.");
}
else{
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","La orden ", ticket, " se cerro automaticamente a las ", TimeToStr(horacierre,TIME_DATE|TIME_SECONDS));
}
}
}
}
if(cont == 50){
if(abierta == 1){
if(larcor == "LARGO"){
if(OrderClose(ticket,OrderLots(),Ask,3)){
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Se cerro la orden ", ticket, " en LARGO");
}
else{
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","No se pudo cerrar la orden ", ticket, " en LARGO");
}
}
else{
if(OrderClose(ticket,OrderLots(),Bid,3)){
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Se cerro la orden en CORTO");
}
else{
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","No se pudo cerrar la orden ", ticket, " en CORTO");
}
}
}
}
if(cont > 50){
Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Fin de EA");
}
Qnt_Symb=FileWrite(Handle,"***************************");
Qnt_Symb=FileWrite(Handle,"**** FIN TICK PAR ", Symbol(), " ****");
FileClose( Handle );
cont++;
//----return(0);
}
//+------------------------------------------------------------------+
Obrigado RaptorUK, eu já tinha criado uma EA que reproduz o problema exatamente para tentar consertar o problema. Basicamente, ela começa, cria o arquivo que cada tic que ele escreve no arquivo conta os ticks. Então o arquivo é como um carrapato 1, um carrapato 2, etc.
No tick 15 abre um pedido, a informação do pedido aparece no arquivo e o final (******) também aparece. Depois disso, deve-se escrever em cada tick o número do tick (16, 17, etc) e o status do pedido, ou seja, se o pedido ainda está aberto ou não. Por alguma razão, após o tick 15, o EA não escreve no arquivo.
Ao ticar 50 é suposto fechar a ordem, mas isso não é importante, o que é importante é que ela continua escrevendo no arquivo quando abre a ordem.
Em minha máquina Windows 7 os arquivos são criados em C:Usuários (nome do usuário)
Appdata é uma pasta oculta.
Obrigado de antemão
Código:
Você codificará não fará negócios com o Corretor que eu uso para testes, é um Corretor "tipo" ECN. Vou ajustar e definir o TP e SL para 0,0
WHRoeder:
Último argumento inválido - não um int
Você poderia, por favor, explicar melhor o que você quer dizer?
Enquanto a documentação (ver FileOpen()) mostra o delimitador sendo incluído entre aspas simples, o livro (ver File Operations) é inconsistente com relação ao uso de aspas simples: alguns exemplos de código mostram o uso das aspas duplas.
Além disso, o seguinte código:
compilado, não teve nenhum erro de tempo de execução, e produziu a seguinte saída no arquivo:
Desculpe, "peças" . . . você recebe a mensagem **** END TICK USDCHF **** ? ou termina antes disso ?
Sim, o arquivo está completo.
Você tem ";" não ';'. . . a mensagem de erro que você recebeu falou sobre o parâmetro 1, não é que o arquivo trata ?
Sim, outra pessoa estava falando sobre o último parâmetro inválido, não sei por quê. Ainda assim eu mudei ";" para ';' mas tive o mesmo problema.
Você poderia, por favor, explicar melhor o que você quer dizer?
Enquanto a documentação (ver FileOpen()) mostra o delimitador sendo incluído entre aspas simples, o livro (ver File Operations) é inconsistente com relação ao uso de aspas simples: alguns exemplos de código mostram o uso das aspas duplas.
Além disso, o seguinte código:
compilado, não teve nenhum erro de tempo de execução, e produziu a seguinte saída no arquivo:
Eu tentei ";" e ';' tenho o mesmo problema.
Meu código roda e funciona muito bem, o arquivo é criado e a cada tic tac do arquivo é aberto, toda a informação é escrita nele e então o arquivo é fechado. Tudo funciona muito bem até a EA abrir uma ordem, então nada é escrito no arquivo.
O primeiro é uma corda, o segundo é uma int (como requerido.) O erro mencionado p 1. Problemas múltiplos?
O erro é o cabo do arquivo, o cabo é sempre 1 e sempre funciona, mas quando a EA abre um pedido, o próximo tique diz que o cabo é inválido mesmo que seja 1 novamente e tenha funcionado para as últimas centenas de carrapatos. A última vez que experimentei o handle começou a subir quando o pedido abriu, ele se tornou 2, 3, 4, etc.
É exatamente o mesmo código, não sei por que não fica como 1, e mesmo quando ainda é 1, ainda dá o erro.
Alguma idéia, rapazes?
Não consigo ver um problema com o código que você postou.
Portanto, vejo 2 opções :
Não consigo ver um problema com o código que você postou.
Portanto, vejo 2 opções :
Obrigado RaptorUK, eu já tinha criado uma EA que reproduz o problema exatamente para tentar consertar o problema. Basicamente, ela começa, cria o arquivo cada vez que ele escreve sobre o arquivo, contando os carrapatos. Então o arquivo é como um carrapato 1, um carrapato 2, etc.
No tick 15, ele abre uma ordem, a informação do pedido aparece no arquivo e o final (******) também aparece. Depois disso, é suposto escrever em cada tique o número do tique (16, 17, etc.) e o status do pedido, ou seja, se o pedido ainda está aberto ou não. Por alguma razão, após o tick 15, a EA não escreve no arquivo.
Ao ticar 50 é suposto fechar a ordem, mas isso não é importante, o que é importante é que ela continua escrevendo no arquivo quando abre a ordem.
Em minha máquina Windows 7, os arquivos são criados em C:Usuários (nome do usuário).
Appdata é uma pasta oculta.
Obrigado de antemão
Código:
Obrigado RaptorUK, eu já tinha criado uma EA que reproduz o problema exatamente para tentar consertar o problema. Basicamente, ela começa, cria o arquivo que cada tic que ele escreve no arquivo conta os ticks. Então o arquivo é como um carrapato 1, um carrapato 2, etc.
No tick 15 abre um pedido, a informação do pedido aparece no arquivo e o final (******) também aparece. Depois disso, deve-se escrever em cada tick o número do tick (16, 17, etc) e o status do pedido, ou seja, se o pedido ainda está aberto ou não. Por alguma razão, após o tick 15, o EA não escreve no arquivo.
Ao ticar 50 é suposto fechar a ordem, mas isso não é importante, o que é importante é que ela continua escrevendo no arquivo quando abre a ordem.
Em minha máquina Windows 7 os arquivos são criados em C:Usuários (nome do usuário)
Appdata é uma pasta oculta.
Obrigado de antemão
Código: