[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 502

 
fore-x:

Unmittelbar nach dem Anhängen an das Diagramm startet das Programm die Funktion init(). Die Funktion init() des angehängten Advisors oder benutzerdefinierten Indikatorsstartet sofort nach dem Start des Client-Terminals und demLaden (betrifft nur Advisors und nicht Indikatoren)von historischen Daten, nach einem Wechsel des Symbols und/oder der Chart-Periode, nach der Neukompilierung des Programms im MetaEditor, nach einer Änderung der Eingabeparameter im Einstellungsfenster des EA oder benutzerdefinierten Indikators. Der Expert Advisor wird auch nach einem Kontowechsel initialisiert.

Können Sie erklären, wie das funktioniert? Im Hintergrund, oder lässt sich das irgendwie nachverfolgen? Oder die Init-Funktion im Indikator, wenn Sie das Terminal nach einer langen Leerlaufzeit starten, startet es überhaupt nicht?

Ich bin mir nicht sicher, was Sie wollen. In Ihrer Beschreibung von init() sind einige nicht ganz korrekte "Punkte" in rot hervorgehoben. So wird beispielsweise der Start des Client-Terminals vom Laden historischer Daten begleitet, und es ist falsch, das Wort "Laden" hervorzuheben - es ist nicht der Prozess, der die Initialisierung startet.

Und nicht alles im Leben kann berührt werden: höchstens - um es zu betrachten. :)))) Sie wollen den Initialisierungsprozess fixieren, d.h. die Funktion init() starten - drucken Sie eine Benachrichtigungszeile innerhalb dieser Funktion.

 
hoz:

Ich bin jetzt ein bisschen verwirrt. Hier sind 3 Funktionen, von denen jede ein bestimmtes Signal für einen bestimmten Indikator empfängt.

Diese Funktion empfängt allgemeine Signale von allen Indizes und trifft die Entscheidung zum KAUF oder VERKAUF.

Dies ist die Hauptfunktion, die das allgemeine Signal empfängt; hier erhalten wir die Werte der Indizes durch die Schleife, um durch alle Balken zu gehen, natürlich... Und dann werden die erhaltenen Werte per Verweis an die entsprechenden Funktionen übergeben, wo diese Werte benötigt werden, d.h. an die Funktionen:

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal() kann im Prinzip auch dort platziert werden.

Somit werden alle Berechnungen der Indizes in einer einzigen Hauptfunktion, nämlich dem Abrufen des Signals, zusammengefasst. In diesem Fall ist alles logisch...

Victor! Sie haben Logik, aber nicht genug Wissen. Die erste, wenn Sie sie nicht aufgeben, wird Ihnen helfen, weiter zu kommen als ein Lehrbuch, und um die zweite zu "gewinnen", müssen Sie damit beginnen (mit einem Lehrbuch). Wenn Sie (noch) nicht bereit sind, Ihre eigene logische Codestruktur aufzubauen, gehen Sie zurück zur alphabetischen Version.
P.S. Was fällt Ihnen an Ihrem Code auf?

In der Funktion GetSignal() kann für die Suche nach der Kreuzung von zwei Linien die for-Schleife verwendet werden, aber es ist besser, die while-Schleife zu verwenden, obwohl dies eine persönliche Vorliebe ist. Zunächst einmal müssen Sie eine Klammer wie in "Execution cannot be pardoned" verschieben, damit Ihr Code das ausführt, was Sie gerade gesagt haben. Aus irgendeinem Grund fehlen in dieser (Ergebnis-)Funktion die Ergebnisse von zwei Funktionen: GetStochSignal() und GetMomentumSignal(), - dies ist jedoch unerheblich.

in den Funktionen GetCrossingMa() und GetStochSignal() macht es KEINEN Sinn, Parameter durch Referenzen zu übergeben, denn es würde Sinn machen, wenn diese Variablen innerhalb der Funktion ihre Werte ändern.

Die void-Funktion GetMomentumSignal() gibt NICHTS zurück.

Obwohl ich zugeben muss, dass es von außen "schlechter zu sehen" ist... :)))

 
laveosa:

Guten Tag zusammen. Bitte helfen Sie mir, ich habe eine Kombination von Candlesticks und ich möchte, dass sie auf verschiedenen Zeitskalen funktionieren. Ein Beispiel

if(iHigh("EURUSD",PERIOD_M5,1)>iLow("EURUSD",PERIOD_M5,1)+8*kio*Point)

{

go_s=true;

}

Ich dachte, ich könnte meine Kombination mit iHigh, iLow, iOpen usw. binden. Aber beim Test auf dem M5 zeigt es ein Ergebnis, aber auf anderen Zeitrahmen ein anderes. Bitte helfen Sie mir, was ich falsch mache. Ich danke Ihnen!

Versuchen Sie dies:

if(iHigh("EURUSD",PERIOD_M5,1)> (iLow("EURUSD",PERIOD_M5,1)+8*kio*Point()) )

Um den Code schön ins Forum einzufügen, drücken Sie SRC und dann den Code.


 
Ich habe ein Cent-Konto (nicht ein Cent Licht) und 100 Ue in einem veshchet und der Hebelwirkung von 1:500, wie berechne ich, was die maximale Menge kann ich setzen? Hilfe! Ich weiß, dass auf den Preis ist möglich, eine maximale Menge von 100 setzen, möchte ich wissen, wenn ich eine Menge setzen und mir sagt, nicht genug Geld etwas wie dieses)))
 
Beowulf:
Ich habe ein Cent-Konto (nicht ein Cent Licht) und 100 Ue in einem veshchet und der Hebelwirkung von 1:500, wie berechne ich, was die maximale Menge kann ich setzen? Hilfe! Ich weiß, dass auf den Preis ist möglich, eine maximale Menge von 100 setzen, möchte ich wissen, wenn ich eine Menge setzen und mir sagt, nicht genug Geld etwas wie dieses)))
double maxvolume = MathMax(MarketInfo(Symbol(), MODE_MAXLOT), AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED));
 
Ich verstehe diese Codes nicht, ich dachte, sie würden mir höchstens 20,0 anzeigen... Wo muss ich lesen, um zu verstehen, was Sie geschrieben haben?
 

Hallo !!! nach dem Upgrade der termenal mt4 der Berater beginnt zu arbeiten, wie es will ----- vielleicht gibt es eine Möglichkeit, es zu beheben ??? Vielen Dank im Voraus für die Antwort!

 
eduard9898:

Hallo !!! nach dem Upgrade der termenal mt4 der Berater beginnt zu arbeiten, wie es will ----- vielleicht gibt es eine Möglichkeit, es zu beheben ??? Vielen Dank im Voraus für die Antwort!


Natürlich gibt es das.

solche Fälle gibt es auchhier.

 

Bitte geben Sie mir einen Rat, wie ich das Array am besten abschneiden kann, damit die Werte erhalten bleiben.

Angenommen, wir haben ein Array mit 16 Elementen, müssen wir es um 13 Elemente kürzen, so dass die verbleibenden Elemente 14, 15, 16 mit erhaltenen Werten in ihnen, aber die Array-Größe war 3, nicht 16, und so die Indizes wurden 14 hat sich 0, 15 hat sich 1, 16-2.

 
Skydiver:

Bitte geben Sie mir einen Rat, wie ich das Array am besten abschneiden kann, damit die Werte erhalten bleiben.

Angenommen, wir haben ein Array mit 16 Elementen, müssen wir es um 13 Elemente kürzen, so dass die verbleibenden Elemente 14, 15, 16 mit erhaltenen Werten in ihnen, aber die Array-Größe war 3, nicht 16, und so wurden die Indizes 14 wurde 0, 15-geblieben 1, 16-2.

Sie können Folgendes tun:

    for (int li_IND = 0; li_IND < 3; li_IND++)
    {Array[li_IND] = Arrray[li_IND+14];}
    ArrayResize (Array, 3);