Ein Fehler in der Funktion OrderSend() ?

 

Ich kämpfe nun schon seit 4 Tagen damit, und ich kann eine scheinbar einfache Sache nicht umsetzen. Ich habe ähnliche Dinge schon einmal mit verschiedenen Indikatoren und Candlesticks gemacht. Mit einer Armbanduhr kann ich das nicht tun.

Die Essenz ist primitiv! Sobald sich der Kurs der Maske einer bestimmten Periode in einem bestimmten Abstand von i_thresholdFromMa nähert (in diesem EA ist es nur einer!), wird ein Pendentive gesetzt. Ich habe bereits alle Funktionen und Filter entfernt, die früher zur Verfügung standen.

Hier ist die Funktion Kaufen:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
   
   if ((ND(OOP) - Ask) >= g_stopLevel)             // Проверка цену открытия на стоплевел          
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           Print("Bid = ", Bid);
           Print("Ask = ", Ask);
           Print("fastMa = ", fastMa);
           Print("Цена покупки = ", fastMa + buyHear * pt);
           Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}

Wir können sehen, dass der OrderSend() einen Eröffnungskurs hat, der der Summe der Variablen fastMa + buyHear * pt

Auf dem Screenshot können wir sehen, dass es KEINEN solchen Preis gibt!

Die Fuge ist in der Mashka

Sie können auch sehen, dass es keine Einträge gibt, bei denen der Kurs fastMa berührt hat (rote Markierung)

Ich habe absichtlich den 1. Puffer genommen, d.h. den vorletzten Balken, um sicher zu sein, dass der vorletzte Balken bereits geschlossen hat und es keinen weiteren Abschluss geben wird... Ich möchte vermeiden, dass der letzte Nulltakt nicht erneut aufgezeichnet wird.

Das ist also die Botschaft des Beschlusses:

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);

IT IS OOP:

double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
Wie ist das möglich?
Dateien:
test_ma_1.mq4  9 kb
 
hoz:

Ich kämpfe nun schon seit 4 Tagen damit, und ich kann eine scheinbar einfache Sache nicht umsetzen. Ich habe ähnliche Dinge schon einmal mit verschiedenen Indikatoren und Candlesticks gemacht. Mit einer Armbanduhr kann ich das nicht tun.

Die Essenz ist primitiv! Sobald sich der Kurs der Maske einer bestimmten Periode in einem bestimmten Abstand von i_thresholdFromMa nähert (in diesem EA ist es nur einer!), wird ein Pendentive gesetzt. Ich habe bereits alle Funktionen und Filter entfernt, die früher zur Verfügung standen.

Hier ist die Funktion Kaufen:

Wir können sehen, dass der OrderSend() einen Eröffnungskurs hat, der der Summe der Variablen fastMa + buyHear * pt

Auf dem Screenshot können wir sehen, dass es KEINEN solchen Preis gibt!

Sie können auch sehen, dass es keine Einträge gibt, bei denen der Kurs fastMa berührt hat (rote Markierung)

Ich habe absichtlich den 1. Puffer genommen, d.h. den vorletzten Balken, um sicher zu sein, dass der vorletzte Balken bereits geschlossen hat und es keinen weiteren Abschluss geben wird... Ich wollte vermeiden, dass der letzte 0. Takt neu aufgenommen wird.

Dies ist also die Botschaft des Befehls:

A OOP:

Wie ist das möglich?

Wollen Sie die Protokolle immer noch nicht vorlegen?
 
Vinin:

Willst du mir immer noch nicht die Protokolle geben?


Hier ist der Inhalt der Protokolle:

2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: open #3 buy stop 0.10 EURUSD at 1.31074 ok
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.3107
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: fastMa = 1.3097
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Ask = 1.3099
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Bid = 1.3099
2013.02.06 17:54:05     2011.01.12 14:32  Tester: order #2, buy 0.10 EURUSD is opened at 1.29876
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: open #2 buy stop 0.10 EURUSD at 1.29876 ok
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2988
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: fastMa = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Ask = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Bid = 1.2978
2013.02.06 17:54:05     2011.01.12 12:11  Tester: order #1, buy 0.10 EURUSD is opened at 1.29953
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: open #1 buy stop 0.10 EURUSD at 1.29953 ok
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2995
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: fastMa = 1.2985
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Ask = 1.2987
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Bid = 1.2986
2013.02.06 17:54:04     test_Ma_1 inputs: i_TF=0; i_fastMaPeriod=10; i_magic=3333021; i_thresholdFromMa=5; buyHear=10; SellHear=10; 

Das heißt, wenn man den Protokollen Glauben schenkt, ist der Kauf dort, wo er sein sollte. Wenn Sie sich den Screenshot ansehen, ist er gar nicht da... Der obige Screenshot zeigt, dass sich der schwebende Auftrag an der falschen Stelle befindet. 10 von fastMa ist nicht einmal nah dran...

 

Hallo, Victor! Ich kann sie öffnen, aber sie ist undicht. Und sie öffnet sich, wenn ich eine Zeile ein wenig verändere:

   if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread))// Проверка цену открытия на стоплевел          
Dasselbe gilt für sall! Viel Glück!
 
borilunad:

Hallo, Victor! Ich kann sie öffnen, aber sie ist undicht. Sie öffnet sich, wenn ich eine Zeile ein wenig verändere:

Ich möchte dasselbe für Sall hinzufügen! Viel Glück!


Hallo, Boris. Nun, sie öffnet an denselben Orten wie zuvor. Wo er sich nicht öffnete, öffnet er sich auch jetzt nicht. Es funktioniert sehr seltsam auf H1.

Ich wechselte zu M15 und setzte die Maske auf MODE_OPEN bei 0(Null) bar.

Im Allgemeinen werden die schwebenden Aufträge dort platziert, wo sie benötigt werden (ich meine bei M15 TF ), aber die schwebenden Aufträge werden nicht dort platziert, wo sie offensichtlich geöffnet werden sollten. Hier ist zum Beispiel ein Screenshot:

Ein Joint mit den Pausen

borilunad:

Hallo Victor! Ich habe es geöffnet, aber es nervt mich.

Boris, und es wird... Ich meine, es ist nur die erste Phase... Es ist noch ein langer Weg bis zur Ziellinie. Alle Bedingungen werden zu einem späteren Zeitpunkt und nach und nach festgelegt werden. Im Moment geht es nur darum, die aktuellen Nuancen zu regeln.
 
hoz:


Hallo Boris. Nun, sie öffnet an denselben Orten wie zuvor. Wo sie sich nicht öffnete, öffnet sie sich auch jetzt nicht. Es funktioniert sehr seltsam auf H1.

Ich wechselte zu M15 und stellte das Handgelenk auf MODE_OPEN bei 0(Null) bar.

Im Allgemeinen werden die schwebenden Aufträge dort platziert, wo sie benötigt werden (ich meine auf M15 TF ), aber die schwebenden Aufträge werden nicht an den Stellen platziert, an denen sie offensichtlich geöffnet werden sollten. Hier ist zum Beispiel ein Bildschirmfoto:

Boris, und er wird... Ich meine, es ist ja nur die erste Phase... Es ist noch ein langer Weg bis zur Ziellinie. Alle Bedingungen werden zu einem späteren Zeitpunkt und nach und nach festgelegt werden. Im Moment müssen wir nur die aktuellen Feinheiten herausarbeiten.

Victor, wir sollten die Indikatoren und Methoden für ihre Verwendung in der EA untersuchen. Ich habe den Eindruck, dass Sie etwas wollen, von dem Sie nicht wissen, wie Sie es umsetzen können.

Und noch etwas: Sie sollten sich nicht an sehr strengen Bedingungen aufhängen, denn in der Hälfte der Fälle wird sich der Preis sicherlich nicht so verhalten, wie Sie es wünschen. Man muss sich also vorstellen, was man im schlimmsten Fall tun könnte.

Ehrlich gesagt, verstehe ich immer noch nicht, warum es wichtig ist, dass Sie bei diesem Balken einsteigen und nicht bei dem anderen. Meiner Meinung nach kommt es vor allem darauf an, den Trend, der rechtzeitig eingesetzt hat, zu erkennen und zu nutzen, und nicht auf einen bestimmten Einstiegspunkt. Versuchen Sie, verschiedene Mashkeys zu vergleichen, und lernen Sie dann, sie als Filter für unerwünschte Einträge zu verwenden, anstatt als Einstiegssignale, die oft fehlschlagen, und die anderen Indikatoren sind nicht besser!

 
Versuchen Sie, den Wert von i_thresholdFromMa und t aufzuzeichnen und im Tester zu beobachten, und das Ergebnis des Vergleichs kann dort ebenfalls aufgezeichnet werden
 
hoz:


Hier ist der Inhalt der Protokolle:

Das heißt, wenn man den Protokollen Glauben schenkt, ist der Kauf dort, wo er sein sollte. Wenn Sie sich den Screenshot ansehen, ist er überhaupt nicht da... Auf dem Screenshot oben können Sie sehen, dass sich der schwebende Auftrag an der falschen Stelle befindet. Die 10 von fastMa ist noch lange nicht da...


Nach dem Protokoll zu urteilen, platziert die Funktion OrderSend() den Auftrag korrekt, zu dem von Ihnen übergebenen Preis
 

PapaYozh:



Nach dem Protokoll zu urteilen, platziert die Funktion OrderSend() die Bestellung korrekt zu dem Preis, den Sie ihr übergeben

Ja!!!

10 von fastMa ist nicht annähernd so viel...

Sie haben einen Satz von 100 Pips.

Weiterer Screenshot, er ist korrekt.

 
r772ra:

Ja!!!

10 von fastMa ist nicht annähernd so viel...

Sie haben 100 p's eingestellt.

ein weiterer Screenshot, das war's.


Bezogen auf die 4-stellige Zahl sind es 10pp. Und auf dem 5-stelligen sind es 100pp. Was ist daran falsch?
 
PapaYozh:

Nach dem Protokoll zu urteilen, platziert die Funktion OrderSend() die Bestellung korrekt, und zwar zu dem Preis, den Sie ihr übergeben


Nach dem Protokoll zu urteilen, ist dies korrekt. Aber wenn Sie es im Tester mit den gleichen Einstellungen wiederholen, werden die ausstehenden Aufträge nicht korrekt periodisch platziert, was ich bereits gesagt habe... Das habe ich geschrieben. Ich habe das Protokoll gelesen, alles ist klar und deutlich... Ein Blick auf den Screenshot... (Wenn ich mir das Diagramm ansehe,stelle ichfest, dass der Kaufeingang niedriger ist als der Kaufeingang... und das steht im Widerspruch zur Bedingung.

Aber es ist auch seltsam, dass ich dies bei M5 nicht bemerkt habe, ABER es wurde festgestellt, dass einige Einträge fehlen.