Ottimo EA in backtest! - pagina 114

 
DudeWorks:
Inoltre, ecco un esempio di scrittura del file, direttamente dall'editor di MT...

Questo vi permetterà di registrare in un file csv, modificare per il vostro output che desiderate.

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("c:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));

FileClose(handle);

}

Sono su IBFX live, posso inoltrare il test live per voi su micro lotti. Tuttavia ho altri scambi dal vivo sul conto, quindi dovrei eliminare i risultati del CT separatamente.

PM per l'indirizzo e-mail

Devo ottenere tutto questo stampato sul file così come qualsiasi indicatore che valuto....attualmente sta solo stampando questi sul diario.

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("C:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

Non so esattamente come farlo... ma è corretto? Non sta generando un file. Deve essere sbagliato.

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: error(4101): wrong file name

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro: il percorso assoluto del file "C:\cyberia_log.csv" non è consentito

????

cosa c'è di sbagliato?

 

Ok, così va meglio....

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

datetime sorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

ok questo sta generando un file ma il file contiene solo 1 voce non TUTTO l'ordine....oy

 
DudeWorks:
Lo codifico per te, dammi fino a stasera, dimmi cos'altro vuoi scaricare

Insieme alla logica cyberia di cui sopra...

Sto pensando di testare l'indicatore dei poteri degli orsi e dei tori, il cci, i 3 valori dell'adx, il macd e lo stocastico, l'rsi, e un 1MA basato sulla chiusura in corso nella barra corrente (la MA della chiusura) Se ci sono altri indicatori che pensate possano funzionare da valutare, andate avanti e scaricate anche loro. Avete l'idea che voglio solo generare un profilo, quindi più angoli ci sono, meglio è... fino a un certo punto, credo.

C'è un'altra cosa che devo aggiungere. Un lavoro che ho fatto su un altro EA che salva il valore dell'equity del conto quando un ordine si apre e poi lo confronta con il valore dell'equity del conto quando l'ordine si chiude e determina se l'operazione è stata vincente o perdente... ho bisogno che questo scarico di dati includa anche il risultato delle operazioni in questo modo, così sappiamo in quale categoria mettere l'operazione quando la analizziamo.

Penso che rielaborerò il tutto in base al prezzo di apertura dell'ordine e al prezzo di chiusura dell'ordine, dato che più operazioni possono cambiare l'equità del conto... aspetta un attimo....

Sono già a metà strada, l'ho già inserito nel codice, ha solo bisogno di qualche altra modifica...

/////////////record outcomes/////////////////

void RecordLongOutcomes()

{

if(Bid<OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Loser Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

return (0);

}

void RecordShortOutcomes()

{

if(Ask>OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Loser Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

return(0);

}

 

così che cosa stavano lavorando verso qui ... anche la stessa idea che ho avuto un po 'indietro, ma era troppo pigro per farlo ... è quello di registrare tutte le variabili e valori di indicatore al momento di ogni ordine in modo da poter vedere esattamente ciò che sta accadendo ad ogni ordine di determinare le correlazioni

Sono stato curioso di sapere a quali possibilità si trovavano quando finalmente ha dato un segnale d'ordine, quindi questo dovrebbe davvero visualizzare...

Tuttavia la larghezza di ogni riga potrebbe essere piuttosto ampia, ma penso che possiamo entrare se facciamo così abbiamo solo registrare gli indicatori che sono effettivamente selezionati.

MT4 larghezza del file è 64 campi credo... così che è abbondanza di paly con.

Ho pm'd la mia e-mail a voi

 
DudeWorks:
così che cosa stavano lavorando verso qui ... anche la stessa idea che ho avuto un po 'indietro, ma era troppo pigro per farlo ... è quello di registrare tutte le variabili e valori di indicatore al momento di ogni ordine in modo da poter vedere esattamente ciò che sta accadendo ad ogni ordine di determinare le correlazioni

Sono stato curioso di sapere a quali possibilità si trovava quando finalmente ha dato un segnale di ordine, quindi questo dovrebbe davvero visualizzare.

Tuttavia la larghezza di ogni riga potrebbe essere piuttosto ampia, ma penso che possiamo entrare se facciamo così abbiamo solo registrare gli indicatori che sono effettivamente selezionati.

MT4 larghezza del file è 64 campi credo ... così che è abbondanza di paly con.

Ho pm'd la mia e-mail a voi

Precisamente! La precisione è infatti ciò che stiamo cercando nei nostri filtri e questo potrebbe rivelare come farlo funzionare per noi.

Ok, fantastico, ti manderò il mio progetto Patient da esplorare, ma non lasciare che questo ti distragga dall'ottenere questo scarico di dati, ok?

Sono contento di avere uno sviluppatore con più esperienza intorno quando mi blocco. Sono ancora un principiante, non ho ancora molta esperienza.

Per quanto riguarda l'output. Nulla di ciò che si mette fuori da questa piattaforma è probabile che superi le dimensioni di excel. Ciò di cui ho bisogno è che sia facilmente identificabile in modo che quando lo importo in Excel posso vedere con cosa sto lavorando piuttosto che un mucchio di numeri non documentati tutti schiacciati insieme separati da delimitatori. Ho bisogno di etichette di dati con ogni valore. Stiamo guardando 15 campi CT più 8 indicatori, CCI, RSI, 1MA, bearspower, bullspower, adx (tre valori) più, comunque, il macd e lo stocastico, se si calcola 6 per quello, allora i campi totali = 29 più i risultati di vincita (vedi post precedente) o di perdita =30 l'apertura e la chiusura e il tempo aggiungere 3 Totale generale = 33 come lo conto io.

33 campi / ordine. questo dovrebbe rivelare qualcosa eh? Un altro piccolo favore, se puoi fare in modo che il datetime stampi effettivamente (stampa su file) qualcosa che un umano possa capire per il datetime invece dell'intergallo che usa il computer, anche questo aiuterebbe.

 

Qualcosa su questo mi ha dato il messaggio di errore...

'biglietto non valido per la funzione OrderClose' finché non ho disattivato OrderSelect.

Ma penso che tu possa capire cosa sto cercando di ottenere.

/////////////record outcomes/////////////////

void RecordLongOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{

if(OrderType()==OP_BUY)

{

if(OrderOpenPrice() + Spread < OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Winning Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileClose(handle);

Print(" Winning Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

}

else

{

datetime buyorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Losing Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",buyorderOpen);

FileClose(handle);

Print(" Losing Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err1;

err=GetLastError();

Print("error(",err1,"): ",ErrorDescription(err1));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record long outcomes

void RecordShortOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{

if(OrderType()==OP_SELL)

{

if(OrderOpenPrice() - Spread > OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Winning Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileClose(handle);

Print(" Winning Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err3;

err3=GetLastError();

Print("error(",err3,"): ",ErrorDescription(err3));

return(0);

}

}

else

{

datetime sellorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Losing Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",sellorderOpen);

FileClose(handle);

Print(" Losing Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err4;

err4=GetLastError();

Print("error(",err4,"): ",ErrorDescription(err4));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record short outcomes
 

il codice che ho appena aggiunto per registrare i risultati funziona bene tranne che per il filewrite()

Ora sto generando il file ma ha solo una voce che sembra essere l'ordine finale eseguito attraverso il tester, quindi quello che penso stia succedendo per me è che sta sovrascrivendo ogni voce piuttosto che aggiungerla alla fine del file. Se sapessi come risolvere questo problema, potrei probabilmente tirare fuori questo dump di dati ora.

 
Aaragorn:
ok questo sta generando un file ma il file contiene solo 1 voce non OGNI ordine....oy

Il file viene sovrascritto ogni volta che lo si apre. Una soluzione è aprire il file nella funzione init() e chiuderlo in deinit()

 
tururo:
Il file viene sovrascritto ogni volta che lo si apre. Una soluzione è aprire il file nella funzione init() e chiuderlo in deinit()

Non sono sicuro di capire come usare i flag di lettura e scrittura.

Li vedo in esempi come questo...

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

oppure

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

e questo è possibile?

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');

vedete che non capisco come aggiungere esattamente alla fine.

Non sono sicuro di come aprirlo in init()

ALLORA

aggiungervi ogni nuovo ordine alla fine

ALLORA

chiuderlo nel deinit()

Immagino che sia qualcosa come

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ, ';');

nell'init e poi

FileWrite(handle, "Order Open Time: ",sorderOpen);

FileWrite(handle, "SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle, "BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle, "UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle, "UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle, "SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle, "BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle, "UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle, "SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle, "BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle, "UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle, "SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle, "BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle, "UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle, "SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle, "BuyPossibilityMid:", BuyPossibilityMid); FileWrite(handle, "Winning Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

e poi nel deinit

FileClose(handle);

è corretto?

 
//+------------------------------------------------------------------+

//| We initialize the adviser |

//+------------------------------------------------------------------+

int init()

{

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

SavedBlockSell = BlockSell;

SavedBlockBuy = BlockBuy;

AccountStatus();

GetMarketInfo();

ModelingPeriod = ValuePeriod * ValuesPeriodCount; // Period of simulation in minutes

if (ValuePeriod != 0 )

ModelingBars = ModelingPeriod / ValuePeriod; // Quantity of steps in the period

CalculateSpread();

return(0);

}

Sto ricevendo un errore che dice "troppi file aperti"?