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

 

Forexman77:
Wie kann ich das Programm dazu bringen, den EMA-Wert als Preis anzugeben? Angenommen, der EMA1 mit der Periode (1), der EMA2 mit der Periode (0), der EMA1 ist gleich 1,3321, während der EMA2 für die aktuelle Periode 1,3200 ist. Das Ergebnis des Ausdrucks (EMA1 zu EMA2) muss 0,0121 sein. Wenn Sie das Skript ausführen, zeigt die Meldung Null an, während wir "0,0121" benötigen. Wie lässt sich dieses Problem lösen?

double delta = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0) - iMA(NULL,0,0,0,MODE_EMA,PRICE_CLOSE,0);

if (delta == 0.0121) Alert("Delta=0.0121"); 
 
Forexman77:
Wie kann ich erreichen, dass das Programm den EMA-Wert als Preis ausgibt? Angenommen, EMA1 hat die Periode (1), EMA2 die Periode (0), EMA1 ist gleich 1,3321, EMA2 für die aktuelle Periode 1,3200. Das Ergebnis des Ausdrucks (EMA1 zu EMA2) muss 0,0121 sein. Wenn ich das Skript ausführe, zeigt die Meldung Null an, während ich "0,0121" benötige. Wie lässt sich dieses Problem lösen?

Ist es möglich, das Skript selbst zu sehen? - Vermutlich haben Sie entweder den falschen Datentyp, z. B. interger anstelle von double (so dass es auf Null gerundet wird), oder etwas anderes, das Null verursacht: Ohne den Code ist es schwer zu verstehen.

Übrigens, wenn Sie überprüfen, was Sie zuvor mit dem Skript geschrieben haben, kann der Fehler entweder im Skript selbst (vermutlich nur geschrieben, um Ihren Indikator zu überprüfen), oder im Code des Indikators selbst liegen.

 
TarasBY:
Wenn Sie Ihre Aufträge korrekt gefiltert haben, was ich Ihnen vorgeschlagen habe, und wenn Sie Provisionen und Swaps in Ihre Berechnungen einbeziehen, dann funktioniert alles korrekt.


Sie müssen einen sehr komplizierten Weg vorgegeben haben.

Bei mir funktioniert es nicht.


Ich habe dummerweise das Folgende in Ihr Beispiel eingefügt:

ld_Profit = fGet_ProfitLastCloseOrd (12);    
Print (ld_Profit);

Es werden zwar einige Zahlen genannt, aber sie sind weit von der Realität entfernt.

Könnten Sie mir bitte zeigen, wo ich die Zahl 12 eingeben muss, damit es funktioniert? Denn ich weiß nicht, wie man "Aufträge filtert" auf ....

 
lottamer:


Sie müssen einen sehr komplizierten Weg gegeben haben.

Bei mir funktioniert es nicht.


Ich habe dummerweise das Folgende in Ihr Beispiel eingefügt:

Es werden zwar einige Zahlen genannt, aber sie sind weit von der Realität entfernt.

Könnten Sie mir bitte zeigen, wo ich die Zahl 12 eingeben muss, damit es funktioniert? Denn ich kenne mich mit "Auftragsfilterung" überhaupt nicht aus....

Ich habe alle Zwischenberechnungen in einem Diagramm durchgeführt, um eine bessere Kontrolle über die Funktionsweise zu haben.

Sie müssen nur noch den Code schreiben.

Sie haben zwei Möglichkeiten: Entweder Sie verstehen es selbst (anhand von Beispielen - ich habe Ihnen ein funktionierendes Skript gegeben), oder Sie finden jemanden, der es für Sie tut.

P.S. Wenn Sie es plötzlich verstehen wollen, können Sie hier beginnen.

 
Chiripaha:

Ist es möglich, das Skript selbst zu sehen? - Vermutlich haben Sie entweder den falschen Datentyp, z. B. interger anstelle von double (so dass es auf Null gerundet wird), oder etwas anderes, das Null verursacht: Ohne den Code ist es schwer zu verstehen.

Wenn Sie übrigens ein Skript schreiben, kann der Fehler entweder im Skript selbst (das vermutlich zum Testen Ihres Indikators geschrieben wurde) oder im Code des Indikators selbst liegen.


Du hast Recht, ich habe EMA von int auf double umgestellt und alles ist so, wie es sein sollte.
 
TarasBY:

Zur vollständigen Kontrolle der Funktion werden alle Zwischenberechnungen in der Tabelle angezeigt.

Alles, was Sie noch tun müssen, ist, den Code zu schreiben.

Es gibt zwei Möglichkeiten: Entweder Sie können es selbst herausfinden (anhand von Beispielen - ich habe Ihnen ein funktionierendes Skript gegeben), oder Sie können jemanden finden, der es für Sie erledigt.

P.S. Wenn Sie es plötzlich herausfinden wollen, können Sie hier beginnen.


Danke, ich werde auf jeden Fall versuchen, das herauszufinden.
 
Forexman77:
Wie kann ich erreichen, dass das Programm den EMA-Stand als Preis ausgibt? Angenommen, EMA1 hat die Periode (1), EMA2 die Periode (0), EMA1 liegt bei 1,3321 und EMA2 bei 1,3200 für die aktuelle Periode. Das Ergebnis des Ausdrucks (EMA1 zu EMA2) muss 0,0121 sein. Wenn ich das Skript ausführe, zeigt die Meldung Null an, während ich "0,0121" benötige. Wie lässt sich dieses Problem lösen?

Verwenden Sie in Berechnungen Variablen vom Typ double anstelle von int;

NormalizeDouble(number1-number2, die gewünschte Genauigkeit) bei der Berechnung des Ergebnisses des Ausdrucks verwenden;

Verwenden Sie DoubleToStr(das erzielte Ergebnis, die gewünschte Genauigkeit), um das Ergebnis auf dem Bildschirm (im Journal) anzuzeigen;

Ohne Ihren Code gibt es nichts anderes vorzuschlagen...

 
Forexman77:
Du hast Recht, ich habe die EMA von int auf double umgestellt und alles ist so, wie es sein sollte.

Hier haben wir es bereits gefunden... Um versteckte Fehler und Ungenauigkeiten zu vermeiden, sollten Sie beim Vergleichen und Berechnen von Daten des Typs double die Normalisierung verwenden.
 
Chiripaha:

Fazit: Natürlich könnte man Sie interessehalber bitten, die Bedingungen genauer zu beschreiben, da Sie nur eine allgemeine Beschreibung geliefert haben: Wann wurden die Roboteraufträge erteilt (im Voraus oder nicht; manuell etwa zur gleichen Zeit wie der Roboter oder nicht usw.). Aber auch in diesem Fall müssen Sie sich nur mit Ihrem Broker auseinandersetzen, denn er hat seinen eigenen Thread, der wahrscheinlich die Trades in die Warteschlange stellt. Angenommen, der manuelle schwebende Auftrag wurde zuerst erteilt, dann wird die Ausführungszeit des Auftrags anders sein (einschließlich der Aufträge anderer Kunden), und daher kann auch der Preis anders sein. Wenn der Roboter die Aufträge innerhalb des Zeitraums der gebildeten Signale platziert hat, ist die Ankunft der Aufträge in der Warteschlange nicht offensichtlich - daher die mögliche Verzerrung des Ausführungskurses. Außerdem kann es von der Größe der Positionen abhängen, über die Sie nichts schreiben... usw...

Aber... Trotzdem kann dies nur mit einem Makler (DC) geklärt werden. Und ich nehme an, er wird eine Reihe von Gründen finden, die ich nicht erwähnt habe. - Und der Rat war richtig: Loggen Sie sich in die Hände und zum Broker, wenn Sie natürlich immer noch glauben, dass sich Ihre schwebenden Aufträge bewegt haben. Verwechseln Sie aber nicht 2 verschiedene Konzepte: eine schwebende Order und ein Geschäft mit dieser schwebenden Order. Der Limit-Auftrag ist eine Anweisung zum Einstieg in den Markt zu einem beliebigen nächstgelegenen Kurs mit angegebenem Volumen. Und der Deal - ist der Preis, zu dem es möglich war, Ihren Auftrag für das angegebene Geldvolumen (Lot) auszuführen. - Und die Preise für diese Aufträge sind wahrscheinlich unterschiedlich (insbesondere auf dem Schnellmarkt, zu dem Sie den Link erhalten haben). Bei Limit-Aufträgen sind der Preis des Auftrags und der Ausführungspreis gleich (per Definition).

Und die Tatsache, dass die Demo und der echte Broker sich nicht voneinander unterscheiden, ist gut! - Das zeigt, dass der Broker keine Geschäfte vortäuscht, um Kunden anzulocken (nach Ihren Worten). - In diesem Fall ist keine Diskrepanz zu erkennen.


Vielen Dank für die ausführliche Antwort, jetzt wird alles klar. Wird dieses Problem gelöst, wenn wir das System der sofortigen Vollstreckung verwenden?

Was ist mit den Bedingungen, die ich nicht erwähnt habe?

Der Roboter gab die Bestellungen früher auf als die manuell aufgegebenen, aber sie wurden vor den Nachrichten geändert.

Das Handelsvolumen ist gleich geblieben, die Entfernungen sind etwa gleich geblieben

Im Allgemeinen waren die Bedingungen fast identisch.

 
TarasBY:
Der aktuelle Tag beginnt am Anfang des aktuellen D1-Balkens (iTime (NULL, PERIOD_D1, 0)), aber Sie suchen nicht nach einfachen Wegen?! :)))


Hier ist das Problem.

Alles funktioniert, aber nur EIN Mal. D.h. wenn ich den Zeitraum (iTime (NULL, PERIOD_D1, 0)) eines Tages einstelle, funktioniert es am nächsten Tag nicht mehr.

einen Testcode zum Testen geschrieben

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_M1, 0));  

if  (GetProfitFromDateInCurrency()<1 && GetProfitFromDateInCurrency()>-1)
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок?