Abenteuer eines Neulings - Seite 7

 
niko:

An CB:


Hallo Überflieger! Ich habe alles getan, was ich mit Tims Aufgaben tun konnte, und deshalb beschlossen, mir deinen Code genauer anzusehen.


Ich bin deinen Code durchgegangen und habe versucht, die Fehler darin zu verstehen und zu beheben. Es ist mir gelungen, die Fehler auf 'unausgewogene Klammern' für den String fnGenerateSignal() zu reduzieren. Ich weiß nicht, warum es in diesem Fall unausgewogen heißt.


Wie immer würde ich mich über Ihre Meinung zu meinen Fortschritten mit Ihrem Code freuen! Denken Sie daran, dass es immer noch eine Menge Bits und Bobs gibt, die ich nicht verstehe, selbst die ganz grundlegenden Dinge.

Siehe Anmerkungen.

Folgendes ist mir aufgefallen:

- Sie haben Funktionen so deklariert, dass sie Variablen erwarten, die ihnen als Parameter übergeben werden, sie dann aber nicht an den Funktionsaufruf weitergeben - deshalb habe ich Sie gebeten, die Variablen einfach in den obersten Block zu verschieben, damit sie für alle Ihre Funktionen verfügbar sind - lassen Sie es uns vorerst so einfach wie möglich halten

- Sie schienen zu denken, dass Sie den Namen Ihrer Funktion auch als Variable deklarieren müssen. So verwenden Sie Funktionen und übergeben Variablen an sie und aus ihnen heraus:


Um zu deklarieren:

int abcdef(int x, string s) //Die Funktion mit dem Namen abcdef nimmt als Eingabe eine ganze Zahl und eine Zeichenkette entgegen und gibt als Ausgabe eine ganze Zahl zurück (in diesem Fall entweder 0 oder 9)

{

die Funktion macht etwas mit x und s

if (eine Bedingung)

return(9);

sonst

return(0);

}


Und zum Aufruf:

...

myResponse = abcdef(myInteger, myString);

if (meineAntwort == 9)

{

blah

 

Hallo CB,

Danke. Das ist der Teil, aus dem ich nicht schlau wurde, du hast es mir sehr klar gemacht. Ich glaube, ich bin jetzt auf dem richtigen Weg.

CB, Frage1:

bool fnOrderDuplicate()

{

iDuplicateOrders=0 // CB sollte iDuplicateOrders nicht als int oder double deklariert werden?

iOrders = OrdersTotal()-1 //Ich verstehe jetzt mit Ihrer Hilfe, dass dies die Funktion OrdersTotal aufruft. Aber sollte iOrders nicht wieder als Variable deklariert werden?

CB,Frage2:

int fnTrade() //Warum ist dies nicht "int fnTrade(string sSignal)", da wir sSignal in der Funktion verwenden. ?

{ if(sSignal=="OP_BUY")

...

CB, Frage 3:

Sie haben mich gebeten, return(0) und } am Ende des Codes zu entfernen, aber das würde bedeuten, dass Start() nicht mit einem typischen "return(0) und Klammern sind nicht geschlossen, wie alle prevoius Klammern (von dem, was ich überprüft) sind speziell für das Öffnen und Schließen der spezifischen Funktionen, die wir entworfen. ?

 
niko:

Hallo CB,

Danke. Das ist der Teil, den ich nicht verstanden habe, du hast es mir sehr klar gemacht. Ich glaube, ich bin jetzt auf dem richtigen Weg.

CB, Frage1:

bool fnOrderDuplicate()

{

iDuplicateOrders=0 // CB sollte iDuplicateOrders nicht als int oder double deklariert werden?

iOrders = OrdersTotal()-1 //Ich verstehe jetzt mit Ihrer Hilfe, dass dies die Funktion OrdersTotal aufruft. Aber sollte iOrders nicht wieder als Variable deklariert werden?

CB,Frage2:

int fnTrade() //Warum ist dies nicht "int fnTrade(string sSignal)", da wir sSignal in der Funktion verwenden. ?

{ if(sSignal=="OP_BUY")

...

CB, Frage 3:

Sie haben mich gebeten, return(0) und } am Ende des Codes zu entfernen, aber das würde bedeuten, dass Start() nicht mit einem typischen "return(0) und Klammern sind nicht geschlossen, wie alle prevoius Klammern (von dem, was ich überprüft) sind speziell für das Öffnen und Schließen der spezifischen Funktionen, die wir entworfen. ?

Q1: Diese beiden Variablen SIND definiert. Schauen Sie sich die Variablen an, die Sie auf meinen Vorschlag hin in den Abschnitt verschoben haben, in dem Sie Ihre Externs definiert haben. Dadurch werden sie automatisch für alle Funktionen verfügbar.

Q2: Die Variable sSignal ist, wenn sie außerhalb aller Funktionen deklariert ist, für alle Funktionen verfügbar, ohne dass sie explizit im Funktionsaufruf übergeben werden muss.

Q3: Ah - jetzt verstehe ich Ihr Missverständnis. Ich habe mich gefragt, warum Sie die Return-Anweisung und die geschweifte Klammer dort eingefügt haben. Das ist durch meinen Kommentar zur fnTrade()-Anweisung abgedeckt. Sie werden feststellen, dass ich Sie gebeten hatte, dort einen Return-Aufruf und eine schließende Klammer einzufügen. Der Grund dafür ist, dass Sie (fälschlicherweise) alle Ihre Funktionen innerhalb des Code-Blocks der start()-Funktion deklariert haben.


CB

 
niko wrote >>

Hallo Tim,

ich habe die Aufgaben erledigt, die du mir für den Code gestellt hast. Vielen Dank für die ausführlichen Antworten auf meine Fragen und für die vielen Kommentare im Code, die mir helfen, mich zurechtzufinden. Ich beginne zu verstehen, wie die Dinge zusammenpassen, wie man Arrays richtig verwendet und bestimmte Funktionen aufruft (und welche Rolle globale und lokale Variablen spielen).

Ich habe die neueste Version unseres Codes beigefügt.

Eine Frage: Gibt es einen Grund, warum wir die Funktion EntryRules nicht so gestaltet haben, dass sie alles (einschließlich der Flags) enthält, um uns eine Kauf-/Short-Bedingung zu geben, sondern stattdessen rufen wir sie später mit Flags auf, um die Einstiegsentscheidung zu treffen?

Hallo Nick


Ich habe ein paar Dinge im Code aufgeräumt und hoffentlich Ihre Fragen beantwortet. Die EntryFunction ist jetzt vollständig. Sie müssen sie nur noch von der Startfunktion (main) aufrufen, wie ich es im Code angegeben habe, und ihr die erforderlichen Parameter wie gezeigt übergeben. Ich hoffe, dass es nur ein paar Minuten Arbeit sind und Sie dann mit dem Kompilieren und Testen beginnen können. Ich gehe davon aus, dass Sie mit ein paar kleinen Fehlern zu kämpfen haben werden, aber hoffentlich mit keinen größeren.


Wenn Sie den EA kompiliert haben, lassen Sie ihn im Tester laufen und werfen Sie einen Blick in die Protokolldatei, um zu sehen, ob er das tut, was Sie in diesem Stadium erwarten würden. Sie sollten in der Lage sein, KAUF- und VERKAUFssignale für jedes der Währungspaare zu sehen.


Ich würde sagen, dass Ihr Code jetzt zu etwa 75 % fertiggestellt ist.


Der nächste Schritt besteht darin, eine weitere Funktion zu schreiben, um nach offenen Aufträgen für ein bestimmtes Währungspaar und eine bestimmte Handelsrichtung zu suchen.


Ich würde vorschlagen, einen Blick in die MT4-Dokumentation unter Handelsfunktionen zu werfen. OrdersTotal(), OrderSelect(), Order Symbol() & OrderType() sind mögliche Kandidaten für diese Aufgabe.


Was Ihre Frage betrifft, ob die Funktion EntryRules alles, einschließlich der Flags, enthalten soll, sehe ich keinen Grund, warum nicht. Warum versuchen Sie nicht, die Funktion EntryRules zu ändern?

Ich schlage vor, dass Sie dies tun, nachdem Sie kompiliert, ausgeführt und getestet haben, was Sie bereits getan haben.


Mit freundlichen Grüßen

Tim

 

CB: Danke, das hilft mir, die Dinge weiter zu klären. Aus irgendeinem Grund dachte ich, dass alles innerhalb der Startfunktion liegen muss.

Frage: Sollten wir die EMAs nicht innerhalb der Startfunktion deklarieren, da wir sie bei jedem Tick berechnen/aktualisieren wollen?

 

Hey Tim: Vielen Dank noch einmal für deine Hilfe. Sobald ich heute Abend von der Arbeit komme, werde ich mit den Dingen auf meiner Seite weitermachen. Durch die Zusammenarbeit mit dir und CB habe ich jetzt mehr Ideen, wie ich die Dinge zusammenstellen kann, und ich fange an, flexibler über alles nachzudenken.

 
niko:

CB: Danke, das hilft mir, die Dinge weiter zu klären. Aus irgendeinem Grund dachte ich, dass alles innerhalb der Startfunktion liegen muss.

Frage: Sollten wir die EMAs nicht innerhalb der Startfunktion deklarieren, da wir sie bei jedem Tick berechnen/aktualisieren wollen?

Nein. Wenn Sie eine Variable innerhalb einer Funktion deklarieren, ist sie nur innerhalb dieser Funktion verfügbar. Wenn Sie sie außerhalb aller Funktionen deklarieren, ist sie für alle Funktionen verfügbar. Daher können Sie die EMA-Variablen oben deklarieren und dann innerhalb der Startfunktion mit ihnen rechnen.


CB

 
cloudbreaker wrote >>

Nein. Wenn Sie eine Variable innerhalb einer Funktion deklarieren, ist sie nur innerhalb dieser Funktion verfügbar. Wenn Sie sie außerhalb aller Funktionen deklarieren, ist sie für alle Funktionen verfügbar. Daher können Sie die ema-Variablen oben deklarieren und dann innerhalb der Startfunktion mit ihnen rechnen.

CB

Danke CB, jetzt habe ich es verstanden!

 

Hallo Tim,


ich bin jetzt zurück aus der Türkei. Ich hatte eine tolle Zeit in Kusadasi und wollte gar nicht mehr weg. Die Türken sind so viel freundlicher als die Briten. Ich habe mich dort wie zu Hause gefühlt, obwohl ich noch nie dort war.


Ich habe die letzten 5 Stunden damit verbracht, den Code, den wir entwickeln, zu verbessern. Er ist beigefügt.

Die wichtigsten Änderungen waren:

1. Ich habe eine Funktion "Order Count" erstellt und diese innerhalb der Startfunktion aufgerufen. Ich erwarte, dass dies voller Fehler sein wird, da ich einige Teile noch nicht verstanden habe (z.B. wie man sicherstellt, dass es der [c]-Schleife folgt, so dass es nur pro Währungspaar funktioniert)

2. Ich habe versucht, den Code in Bezug auf den Namen currencySymbol vs. currencySym zu korrigieren, da wir den Namen auf halbem Weg geändert haben. Aber das könnte zu Verwirrung geführt haben.

3. Ich habe die EntryRules-Funktion innerhalb der Startfunktion aufgerufen.


Ich würde es sehr begrüßen, wenn Sie die großen und kleinen Fehler korrigieren, wenn Sie weiterhin //warum der alte Code falsch ist, Kommentare einführen, es hilft mir, mein logisches Denken zu korrigieren.


Bin wie immer gespannt auf Ihre Änderungen!

 

Hallo CB,


Ich glaube, Tim ist jetzt im Urlaub, da ich seit ein paar Tagen nichts mehr von ihm gehört habe. Daher mache ich mit deinem Code weiter, da er mir beim Handel helfen wird (da ich die Strategie jetzt manuell handele, und das bedeutet, dass ich früh aufstehen muss, usw.). Ich habe den gesamten Code wie von Ihnen gewünscht geändert, aber aus irgendeinem Grund gibt er immer noch einen Fehler zurück (der diesmal mit "==" zu tun hat, sehr seltsam).


Außerdem ist mir aufgefallen, dass die Startfunktion nicht geschlossen ist. Also habe ich "}" nach der ersten Funktion innerhalb des Starts () hinzugefügt, wenn wir das nicht tun, erzeugt der Code einen Fehler mit der nachfolgenden Funktionszeichenfolge fnGenerateSignal() (und sagt, dass die Funktionsdefinition dafür unerwartet ist).


Ich danke Ihnen wie immer. Ich freue mich auf Ihre Kommentare/Ergänzungen!

Nick

Dateien: