Alors que la documentation (voir FileOpen()) montre que le délimiteur est placé entre guillemets simples, le livre (voir File Operations) est incohérent quant à l'utilisation des guillemets simples : certains exemples de code montrent l'utilisation des guillemets doubles.
Vous avez " ;" et non ';'... le message d'erreur que vous avez reçu parlait du paramètre 1, n'est-ce pas le handle du fichier ?
Oui, quelqu'un d'autre parlait du dernier paramètre invalide, je ne sais pas pourquoi. J'ai quand même remplacé " ;" par ';' mais j'ai eu le même problème.
Alors que la documentation (voir FileOpen()) montre que le délimiteur est placé entre guillemets simples, le livre (voir File Operations) est incohérent quant à l'utilisation des guillemets simples : certains exemples de code montrent l'utilisation des guillemets doubles.
De plus, le code suivant :
s'est compilé, n'a pas eu d'erreur d'exécution et a produit la sortie suivante dans le fichier :
J'ai essayé " ;" et " ;" mais j'ai eu le même problème.
Mon code s'exécute et fonctionne très bien, le fichier est créé et à chaque tick le fichier est ouvert, toutes les infos sont écrites dedans puis le fichier est fermé. Tout fonctionne bien jusqu'à ce que l'EA ouvre un ordre, alors rien n'est écrit dans le fichier.
WHRoeder: Le premier est une chaîne, le second est un int (comme requis.) L'erreur mentionnée p 1. Problèmes multiples ?
L'erreur est le handle du fichier, le handle est toujours 1 et fonctionne toujours, mais lorsque l'EA ouvre un ordre, le tick suivant indique Handle is invalid même s'il est à nouveau 1 et a fonctionné pendant les dernières centaines de ticks. La dernière fois que j'ai essayé, le handle a commencé à augmenter lorsque l'ordre s'est ouvert, il est devenu 2, 3, 4, etc.
C'est exactement le même code, je ne sais pas pourquoi il ne reste pas à 1, et même quand il est toujours à 1, il donne toujours l'erreur.
Je ne vois pas de problème avec le code que vous avez posté.
Je vois donc 2 options :
poster tout votre code pour que nous puissions l'essayer par nous-mêmes et tenter de le corriger
créer un court script/EA qui reproduit le problème et le poster.
Merci RaptorUK, j'ai déjà créé un EA qui reproduit exactement le problème pour essayer de le résoudre. En gros, ça démarre, il crée le fichier et à chaque tick, il écrit sur le fichier en comptant les ticks. Donc le fichier est comme tick 1, tick 2, etc.
Au tick 15, il ouvre un ordre, les informations de l'ordre apparaissent dans le fichier et la fin (******) apparaît également. Ensuite, il est censé écrire à chaque tick le numéro du tick (16, 17, etc.) et le statut de l'ordre, c'est-à-dire si l'ordre est toujours ouvert ou non. Pour une raison quelconque, après le tick 15, l'EA n'écrit pas dans le fichier.
Au tick 50, il est censé fermer l'ordre mais ce n'est pas important, ce qui est important c'est qu'il continue à écrire sur le fichier quand il ouvre l'ordre.
Sur mon ordinateur Windows 7, les fichiers sont créés dans C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files.
Appdata est un dossier caché.
Merci d'avance
Code :
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Merci RaptorUK, j'avais déjà créé une EA qui reproduit exactement le problème pour essayer de le résoudre. En gros, il démarre, il crée le fichier et à chaque tick, il écrit sur le fichier en comptant les ticks. Donc le fichier est comme tick 1, tick 2, etc.
Au tick 15, il ouvre un ordre, les informations de l'ordre apparaissent dans le fichier et la fin (******) apparaît également. Ensuite, il est censé écrire à chaque tick le numéro du tick (16, 17, etc) et le statut de l'ordre, c'est-à-dire si l'ordre est toujours ouvert ou non. Pour une raison quelconque, après le tick 15, l'EA n'écrit pas dans le fichier.
Au tick 50 il est censé fermer l'ordre mais ce n'est pas important, ce qui est important c'est qu'il continue à écrire sur le fichier quand il ouvre l'ordre.
Sur mon ordinateur Windows 7, les fichiers sont créés dans C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files.
Appdata est un dossier caché.
Merci d'avance
Code :
Votre code n'effectuera pas de transactions avec le courtier que j'utilise pour les tests, c'est un courtier ECN de "type". Je vais ajuster et mettre le TP et SL à 0.0.
WHRoeder:
Dernier argument non valide - pas un int
Pourriez-vous préciser ce que vous voulez dire ?
Alors que la documentation (voir FileOpen()) montre que le délimiteur est placé entre guillemets simples, le livre (voir File Operations) est incohérent quant à l'utilisation des guillemets simples : certains exemples de code montrent l'utilisation des guillemets doubles.
De plus, le code suivant :
a été compilé, n'a pas eu d'erreur d'exécution et a produit la sortie suivante dans le fichier :
Désolé, "parties" ... avez-vous le message **** END TICK USDCHF **** ? ou se termine-t-il avant ?
Oui, le fichier est complet.
Vous avez " ;" et non ';'... le message d'erreur que vous avez reçu parlait du paramètre 1, n'est-ce pas le handle du fichier ?
Oui, quelqu'un d'autre parlait du dernier paramètre invalide, je ne sais pas pourquoi. J'ai quand même remplacé " ;" par ';' mais j'ai eu le même problème.
Pourriez-vous préciser ce que vous voulez dire ?
Alors que la documentation (voir FileOpen()) montre que le délimiteur est placé entre guillemets simples, le livre (voir File Operations) est incohérent quant à l'utilisation des guillemets simples : certains exemples de code montrent l'utilisation des guillemets doubles.
De plus, le code suivant :
s'est compilé, n'a pas eu d'erreur d'exécution et a produit la sortie suivante dans le fichier :
J'ai essayé " ;" et " ;" mais j'ai eu le même problème.
Mon code s'exécute et fonctionne très bien, le fichier est créé et à chaque tick le fichier est ouvert, toutes les infos sont écrites dedans puis le fichier est fermé. Tout fonctionne bien jusqu'à ce que l'EA ouvre un ordre, alors rien n'est écrit dans le fichier.
Le premier est une chaîne, le second est un int (comme requis.) L'erreur mentionnée p 1. Problèmes multiples ?
L'erreur est le handle du fichier, le handle est toujours 1 et fonctionne toujours, mais lorsque l'EA ouvre un ordre, le tick suivant indique Handle is invalid même s'il est à nouveau 1 et a fonctionné pendant les dernières centaines de ticks. La dernière fois que j'ai essayé, le handle a commencé à augmenter lorsque l'ordre s'est ouvert, il est devenu 2, 3, 4, etc.
C'est exactement le même code, je ne sais pas pourquoi il ne reste pas à 1, et même quand il est toujours à 1, il donne toujours l'erreur.
Une idée ?
Je ne vois pas de problème avec le code que vous avez posté.
Je vois donc 2 options :
Je ne vois pas de problème avec le code que vous avez posté.
Je vois donc 2 options :
Merci RaptorUK, j'ai déjà créé un EA qui reproduit exactement le problème pour essayer de le résoudre. En gros, ça démarre, il crée le fichier et à chaque tick, il écrit sur le fichier en comptant les ticks. Donc le fichier est comme tick 1, tick 2, etc.
Au tick 15, il ouvre un ordre, les informations de l'ordre apparaissent dans le fichier et la fin (******) apparaît également. Ensuite, il est censé écrire à chaque tick le numéro du tick (16, 17, etc.) et le statut de l'ordre, c'est-à-dire si l'ordre est toujours ouvert ou non. Pour une raison quelconque, après le tick 15, l'EA n'écrit pas dans le fichier.
Au tick 50, il est censé fermer l'ordre mais ce n'est pas important, ce qui est important c'est qu'il continue à écrire sur le fichier quand il ouvre l'ordre.
Sur mon ordinateur Windows 7, les fichiers sont créés dans C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files.
Appdata est un dossier caché.
Merci d'avance
Code :
Merci RaptorUK, j'avais déjà créé une EA qui reproduit exactement le problème pour essayer de le résoudre. En gros, il démarre, il crée le fichier et à chaque tick, il écrit sur le fichier en comptant les ticks. Donc le fichier est comme tick 1, tick 2, etc.
Au tick 15, il ouvre un ordre, les informations de l'ordre apparaissent dans le fichier et la fin (******) apparaît également. Ensuite, il est censé écrire à chaque tick le numéro du tick (16, 17, etc) et le statut de l'ordre, c'est-à-dire si l'ordre est toujours ouvert ou non. Pour une raison quelconque, après le tick 15, l'EA n'écrit pas dans le fichier.
Au tick 50 il est censé fermer l'ordre mais ce n'est pas important, ce qui est important c'est qu'il continue à écrire sur le fichier quand il ouvre l'ordre.
Sur mon ordinateur Windows 7, les fichiers sont créés dans C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files.
Appdata est un dossier caché.
Merci d'avance
Code :