Großartiger EA im Backtest! - Seite 114

 
DudeWorks:
Hier noch ein Beispiel für das Schreiben einer Datei, direkt aus dem MT-Editor...

Damit können Sie in eine csv-Datei loggen, die Sie für Ihre Ausgabe modifizieren können.

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);

}

Ich benutze IBFX live, ich kann den Test live für Sie auf Mikro-Lots weiterleiten. Allerdings habe ich andere Live-Trades auf dem Konto, so dass ich die CT-Ergebnisse separat auslesen müsste.

PM mich für E-Mail Adresse

Ich muss das alles in die Datei drucken, ebenso wie die Indikatoren, die ich auswerte....zurzeit werden sie nur in das Journal gedruckt.

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);

}

ich bin mir nicht sicher, wie ich das genau machen soll...ist das richtig? es wird keine datei erzeugt. das kann nicht richtig sein.

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

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro: absoluter Dateipfad "C:\cyberia_log.csv" ist nicht erlaubt

????

Was ist daran falsch?

 

ok das ist besser....

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, das erzeugt eine Datei, aber die Datei enthält nur 1 Eintrag und nicht JEDEN Auftrag....oy

 
DudeWorks:
Ich programmiere es für Sie, geben Sie mir bis heute Abend Zeit und sagen Sie mir, was Sie noch loswerden wollen.

Zusammen mit der cyberia Logik oben...

Ich denke an das Testen der Bären und Bullen Befugnisse Indikator, der cci, die 3 Werte der adx, der macd und Stochastik, der rsi, und ein 1MA basierend auf schließen läuft in der aktuellen bar.(die MA des Abschlusses) Wenn es andere Indikatoren, die Sie denken, könnte funktionieren, ausgewertet werden, gehen Sie vor und lassen Sie sie zu. Sie erhalten die Idee, ich bin nur wollen, um ein Profil zu generieren, so dass die mehr Winkel, desto besser wirklich... bis zu einem Punkt, den ich denke.

Es gibt noch eine weitere Sache, die ich hinzufügen möchte. Ich habe an einem anderen EA gearbeitet, der den Wert des Kontos speichert, wenn ein Auftrag eröffnet wird, und ihn dann mit dem Wert des Kontos vergleicht, wenn der Auftrag geschlossen wird, und feststellt, ob der Handel ein Gewinner oder ein Verlierer war... Ich brauche diesen Datendump, um auch das Ergebnis des Handels mit einzubeziehen, damit wir wissen, in welche Kategorie wir den Handel einordnen müssen, wenn wir ihn analysieren.

Ich denke, ich werde das so überarbeiten, dass ich stattdessen den Orderopenprice und Ordercloseprice verwende, da mehrere Trades den Kontostand verändern können...Moment mal....

Ich bin schon auf halbem Wege, ich habe das schon im Code, muss nur noch ein wenig nachbearbeitet werden...

/////////////record ergebnisse/////////////////

void RecordLongOutcomes()

{

if(Bid<OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Loser Long ",OrderTicket()," Eröffnet: ",OrderOpenPrice()," Closed: ", Bid);

}

return (0);

}

void RecordShortOutcomes()

{

if(Ask>OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Loser Short ",OrderTicket()," Eröffnet: ",OrderOpenPrice()," Closed: ", Bid);

}

return(0);

}

 

Also, worauf wir hier hinarbeiten...auch dieselbe Idee, die ich vor einer Weile hatte, aber zu faul war, um es zu tun... ist es, alle Variablen und Indikatorwerte zum Zeitpunkt jeder Bestellung zu protokollieren, damit wir genau sehen können, was bei jeder Bestellung passiert, um Korrelationen zu bestimmen

Ich war schon neugierig, welche Möglichkeiten es gab, als es schließlich ein Auftragssignal gab, also sollte dies wirklich angezeigt werden.

Allerdings könnte die Breite jeder Zeile ziemlich groß sein, aber ich denke, wir können es schaffen, wenn wir nur die Indikatoren aufzeichnen, die tatsächlich ausgewählt sind.

MT4 Dateibreite ist 64 Felder ich denke.. so das ist viel zu paly mit.

Ich pm'd meine E-Mail zu ya

 
DudeWorks:
Worauf wir hier also hinarbeiten... dieselbe Idee, die ich vor einer Weile hatte, aber zu faul war, sie umzusetzen... ist, alle Variablen und Indikatorwerte zum Zeitpunkt jeder Bestellung zu protokollieren, damit wir genau sehen können, was bei jeder Bestellung passiert, um Korrelationen zu ermitteln.

Ich habe neugierig gewesen, welche Möglichkeiten waren bei, wenn es schließlich gab eine Bestellung Signal, so dass dies wirklich anzeigen sollte.

Allerdings könnte die Breite jeder Zeile ziemlich breit sein, aber ich denke, wir können in bekommen, wenn wir machen, so dass wir nur die Indikatoren protokollieren, die tatsächlich ausgewählt sind.

MT4 Dateibreite ist 64 Felder ich denke... so das ist viel zu paly mit.

Ich habe meine E-Mail an Sie geschickt

Exakt! Präzision ist in der Tat das, was wir in unseren Filtern suchen, und das könnte uns zeigen, wie wir das hinbekommen.

Gut, ich schicke Ihnen mein Patientenprojekt zur Erkundung, aber lassen Sie sich dadurch nicht davon ablenken, dass Sie diesen Datenschrott bekommen, ok?

Ich freue mich, wenn ich einen Entwickler mit mehr Erfahrung um mich habe, wenn ich nicht weiterkomme. Ich bin immer noch ein Anfänger, der noch nicht so viel Erfahrung hat.

Was die Ausgabe betrifft. Nichts, was Sie auf dieser Plattform ausgeben, wird wahrscheinlich die Dimensionen von Excel überschreiten. Was ich brauche, ist, dass es leicht identifizierbar ist, so dass ich beim Import in Excel sehen kann, womit ich arbeite, und nicht nur mit einem Haufen undokumentierter Zahlen, die durch Trennzeichen getrennt sind. Ich brauche Datenbeschriftungen für jeden Wert. Wir sind auf 15 CT-Felder plus 8 Indikatoren, CCI, RSI, 1MA, bearspower, bullspower, adx(threevalues) plus wie auch immer Sie tun, die Macd und Stochastik, wenn Sie Figur 6 für das dann die gesamten Felder = 29 plus die Ergebnisse der Gewinn (siehe vorherigen Beitrag) oder Verlust = 30 die offenen und schließen und die Zeit addieren 3 Grand Total=33 wie ich es zählen.

33 Felder / Auftrag. Das sollte doch etwas aussagen, oder? Ein weiterer kleiner Gefallen, wenn Sie es schaffen, dass datetime tatsächlich etwas ausgibt (in eine Datei drucken), das ein Mensch verstehen kann, anstatt des Intergervalues, den der Computer verwendet, würde das auch helfen.

 

Irgendetwas daran gab mir die Fehlermeldung...

'Ungültiges Ticket für die Funktion OrderClose', bis ich OrderSelect deaktiviert habe.

aber ich denke, Sie verstehen, was ich damit bezwecke.

/////////////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
 

Der Code, den ich gerade hinzugefügt habe, um die Ergebnisse aufzuzeichnen, funktioniert gut, außer bei filewrite().

Ich generiere jetzt die Datei, aber sie hat nur einen Eintrag, der die letzte Bestellung zu sein scheint, die durch den Tester gelaufen ist, so dass ich denke, dass es für mich passiert, dass es jeden Eintrag überschreibt, anstatt ihn an das Ende der Datei anzuhängen. Wenn ich wüsste, wie man das behebt, könnte ich diesen Datendump wahrscheinlich sofort abrufen.

 
Aaragorn:
ok, das erzeugt eine Datei, aber die Datei enthält nur 1 Eintrag und nicht JEDEN Auftrag....oy

Die Datei wird jedes Mal überschrieben, wenn Sie sie öffnen. Eine Lösung besteht darin, die Datei in der Funktion init() zu öffnen und sie in deinit() zu schließen

 
tururo:
Die Datei wird jedes Mal überschrieben, wenn Sie sie öffnen. Eine Lösung besteht darin, die Datei in der Funktion init() zu öffnen und sie in deinit() zu schließen

Ich bin nicht sicher, ob ich verstehe, wie man die Lese- und Schreibflags verwendet.

Ich sehe diese in Beispielen wie diesem...

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

oder

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

wie wäre es mit: ist dies möglich?

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

Sie sehen, dass ich nicht genau verstehe, wie man an das Ende anhängt.

Ich bin mir nicht sicher, wie ich es in der init() öffnen soll

DANN

jeden neuen Auftrag an das Ende anhängen

DANN

sie in der deinit() schließen

Ich könnte mir vorstellen, dass es etwas ist wie

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

im Init und dann

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);

und dann im Deinit

FileClose(handle);

ist das korrekt?

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

//| 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);

}

Ich erhalte eine Fehlermeldung, die besagt, dass zu viele Dateien geöffnet sind"?