Mentre la documentazione (vedi FileOpen()) mostra che il delimitatore è racchiuso tra virgolette singole, il libro (vedi File Operations) è incoerente riguardo all'uso delle virgolette singole: alcuni esempi di codice mostrano l'uso delle virgolette doppie.
Mentre la documentazione (vedi FileOpen()) mostra che il delimitatore è racchiuso tra virgolette singole, il libro (vedi File Operations) è incoerente riguardo all'uso delle virgolette singole: alcuni esempi di codice mostrano l'uso delle virgolette doppie.
Inoltre, il seguente codice:
compilato, non ha avuto alcun errore di runtime, e ha prodotto il seguente output nel file:
Ho provato ";" e ';' ottenendo lo stesso problema.
Il mio codice viene eseguito e funziona alla grande, il file viene creato e ogni tick il file viene aperto, tutte le informazioni vengono scritte in esso e poi il file viene chiuso. Tutto funziona alla grande finché l'EA non apre un ordine, poi non viene scritto nulla sul file.
WHRoeder: Il primo è una stringa, il secondo è un int (come richiesto.) L'errore menzionato p 1. Problemi multipli?
L'errore è l'handle del file, l'handle è sempre 1 e funziona sempre, ma quando l'EA apre un ordine, il tick successivo dice Handle is invalid anche se è di nuovo 1 e ha funzionato per le ultime centinaia di tick. L'ultima volta che ho provato l'handle ha iniziato a salire quando l'ordine si è aperto, è diventato 2, 3, 4, ecc.
È lo stesso identico codice, non so perché non rimane come 1, e anche quando è ancora 1 dà ancora l'errore.
Non riesco a vedere un problema con il codice che hai postato.
Quindi vedo 2 opzioni:
postare tutto il tuo codice in modo che possiamo provarlo da soli e provare a risolverlo
creare un breve script/EA che replichi il problema e postarlo
Grazie RaptorUK, avevo già creato un EA che replica esattamente il problema per provare a risolverlo. In pratica parte, crea il file loro ogni tick scrive sul file contando i tick. Quindi il file è come tick 1, tick 2, ecc.
Al tick 15 apre un ordine, le informazioni dell'ordine appaiono nel file e appare anche la fine (******). Dopo di che dovrebbe scrivere in ogni tick il numero di tick (16, 17, ecc.) e lo stato dell'ordine, cioè se l'ordine è ancora aperto o no. Per qualche motivo dopo il tick 15 l'EA non scrive sul file.
Al tick 50 dovrebbe chiudere l'ordine ma questo non è importante, l'importante è che continui a scrivere sul file quando apre l'ordine.
Sulla mia macchina Windows 7 i file sono creati in C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files
Appdata è una cartella nascosta.
Grazie in anticipo
Codice:
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Grazie RaptorUK, avevo già creato un EA che replica esattamente il problema per cercare di risolvere il problema. In pratica parte, crea il file li ogni tick scrive sul file contando i tick. Quindi il file è come tick 1, tick 2, ecc.
Al tick 15 apre un ordine, le informazioni dell'ordine appaiono nel file e appare anche la fine (******). Dopo di che dovrebbe scrivere in ogni tick il numero di tick (16, 17, ecc.) e lo stato dell'ordine, cioè se l'ordine è ancora aperto o no. Per qualche motivo dopo il tick 15 l'EA non scrive sul file.
Al tick 50 dovrebbe chiudere l'ordine ma questo non è importante, l'importante è che continui a scrivere sul file quando apre l'ordine.
Sulla mia macchina Windows 7 i file sono creati in C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files
Appdata è una cartella nascosta.
Grazie in anticipo
Codice:
Il tuo codice non piazzerà compravendite con il Broker che uso per i test, è un Broker "tipo" ECN. Regolerò e imposterò il TP e lo SL a 0,0
WHRoeder:
Ultimo argomento non valido - non è un int
Potreste spiegare meglio cosa intendete?
Mentre la documentazione (vedi FileOpen()) mostra che il delimitatore è racchiuso tra virgolette singole, il libro (vedi File Operations) è incoerente riguardo all'uso delle virgolette singole: alcuni esempi di codice mostrano l'uso delle virgolette doppie.
Inoltre, il seguente codice:
compilato, non ha avuto alcun errore di runtime, e ha prodotto il seguente output nel file:
Scusa, "parti" ... ricevi il messaggio **** END TICK USDCHF **** o finisce prima?
Sì, il file è completo.
Hai ";" non ';'. . . il messaggio di errore che hai ricevuto parlava del parametro 1, non è l'handle del file?
Sì, qualcun altro parlava di un ultimo parametro non valido, non so perché. Ho comunque cambiato ";" con ';' ma ho avuto lo stesso problema.
Potreste spiegare meglio cosa intendete?
Mentre la documentazione (vedi FileOpen()) mostra che il delimitatore è racchiuso tra virgolette singole, il libro (vedi File Operations) è incoerente riguardo all'uso delle virgolette singole: alcuni esempi di codice mostrano l'uso delle virgolette doppie.
Inoltre, il seguente codice:
compilato, non ha avuto alcun errore di runtime, e ha prodotto il seguente output nel file:
Ho provato ";" e ';' ottenendo lo stesso problema.
Il mio codice viene eseguito e funziona alla grande, il file viene creato e ogni tick il file viene aperto, tutte le informazioni vengono scritte in esso e poi il file viene chiuso. Tutto funziona alla grande finché l'EA non apre un ordine, poi non viene scritto nulla sul file.
Il primo è una stringa, il secondo è un int (come richiesto.) L'errore menzionato p 1. Problemi multipli?
L'errore è l'handle del file, l'handle è sempre 1 e funziona sempre, ma quando l'EA apre un ordine, il tick successivo dice Handle is invalid anche se è di nuovo 1 e ha funzionato per le ultime centinaia di tick. L'ultima volta che ho provato l'handle ha iniziato a salire quando l'ordine si è aperto, è diventato 2, 3, 4, ecc.
È lo stesso identico codice, non so perché non rimane come 1, e anche quando è ancora 1 dà ancora l'errore.
Qualche idea ragazzi?
Non riesco a vedere un problema con il codice che hai postato.
Quindi vedo 2 opzioni:
Non riesco a vedere un problema con il codice che hai postato.
Quindi vedo 2 opzioni:
Grazie RaptorUK, avevo già creato un EA che replica esattamente il problema per provare a risolverlo. In pratica parte, crea il file loro ogni tick scrive sul file contando i tick. Quindi il file è come tick 1, tick 2, ecc.
Al tick 15 apre un ordine, le informazioni dell'ordine appaiono nel file e appare anche la fine (******). Dopo di che dovrebbe scrivere in ogni tick il numero di tick (16, 17, ecc.) e lo stato dell'ordine, cioè se l'ordine è ancora aperto o no. Per qualche motivo dopo il tick 15 l'EA non scrive sul file.
Al tick 50 dovrebbe chiudere l'ordine ma questo non è importante, l'importante è che continui a scrivere sul file quando apre l'ordine.
Sulla mia macchina Windows 7 i file sono creati in C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files
Appdata è una cartella nascosta.
Grazie in anticipo
Codice:
Grazie RaptorUK, avevo già creato un EA che replica esattamente il problema per cercare di risolvere il problema. In pratica parte, crea il file li ogni tick scrive sul file contando i tick. Quindi il file è come tick 1, tick 2, ecc.
Al tick 15 apre un ordine, le informazioni dell'ordine appaiono nel file e appare anche la fine (******). Dopo di che dovrebbe scrivere in ogni tick il numero di tick (16, 17, ecc.) e lo stato dell'ordine, cioè se l'ordine è ancora aperto o no. Per qualche motivo dopo il tick 15 l'EA non scrive sul file.
Al tick 50 dovrebbe chiudere l'ordine ma questo non è importante, l'importante è che continui a scrivere sul file quando apre l'ordine.
Sulla mia macchina Windows 7 i file sono creati in C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files
Appdata è una cartella nascosta.
Grazie in anticipo
Codice: