Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 858

 

Guten Tag.

Der Indikator im Fenster zeigt bis zu 5 Dezimalstellen an.

Bei der Verwendung in einem Expert Advisor über iCustom(Symbol(), PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0) werden bis zu 4 Dezimalstellen angezeigt (durch den Befehl Print festgelegt).

Wie kann ich 5 Ziffern in die Tafel bekommen?

 
Drucken Sie mit der Funktion DoubleToString und Sie erhalten die gewünschten 5 Ziffern. Wenn Sie möchten, können Sie auch 8 Zeichen erhalten.
 
AlexeyVik:
Drucken Sie mit der Funktion DoubleToString und Sie erhalten die gewünschten 5 Zeichen. Wenn Sie wollen, können Sie auch 8 bekommen.
Mit anderen Worten, die Indikatorberechnungen im Expert Advisor erfolgen auf 5 Stellen, und Print schneidet die 4. Stelle ab, wenn sie im Journal angezeigt wird?
 
Craft:
Mit anderen Worten, die Indikatorberechnungen im Expert Advisor werden mit 5 Dezimalstellen durchgeführt und Print kürzt das Ergebnis auf 4 Dezimalstellen, wenn es im Journal angezeigt wird?

Das Rechenergebnis kann bis zu 16 Dezimalstellen haben, wenn es nicht normalisiert ist:

Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна.
Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно указанном формате необходимо использовать функцию PrintFormat(). 

Die Ausgabe der Berechnung direkt über Print wird nicht abgeschnitten. Es gibt noch etwas anderes im Code, zum Beispiel die Normalisierung.




 

Das ist der Punkt, es gibt nichts anderes (Normalisierungen usw.):

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Print ("g_macd=",g_macd);

g_MACD hat im Indikator einen Wert (des 1. Puffers) mit der 5. Dezimalstelle, während Print im Protokoll einen Wert mit der 4. Dezimalstelle anzeigt, was nicht akzeptabel ist.

Wie lässt sich dieses Problem lösen?

 
Craft:

Das ist der Punkt, es gibt nichts anderes (Normalisierungen usw.):

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Print ("g_macd=",g_macd);

g_MACD hat im Indikator einen Wert (des 1. Puffers) mit der 5. Dezimalstelle, während Print im Protokoll einen Wert mit der 4. Dezimalstelle anzeigt, was nicht akzeptabel ist.

Wie lässt sich dieses Problem lösen?

Sehen Sie in Ihrem Code nach, das Problem liegt irgendwo dort.

Um es zu testen, habe ich ein einfaches Skript mit WPR-Aufruf ausgeführt und das Ergebnis des Indikatoraufrufs ausgedruckt:

 double wpr1=iWPR(NULL,0,1440,1);
 Print("WPR=",wpr1);

****2015.03.08 01:12:15	2015.03.06 22:59 **** EURUSD,H1: WPR=-99.1902834008098


Der Indikator selbst zeigt, wie Sie wissen, Werte mit 4 Dezimalstellen in seinem Fenster an, aber für Expert Advisors zeigt er 13 und sogar 14 an.

 
Pokrov:

Hallo! Bitte schauen Sie sich den Code unten, die Erstellung von "Arrow"-Objekt auf das Signal, Pfeile sind nicht in den Tester gezeichnet, obwohl das Protokoll geht, und auch in der Log beim Start in den Tester schreibt einen Fehler TestGenerator: unmatched Datenfehler (Volumengrenze 412 bei 2014.10.13 17:10 überschritten),

Und während des Testens erzeugt es einen Fehler "Checking USDJPYm,M5 arrow: Error in object creation: code #4200" - aber ich denke, das ist normal, weil das Programm zunächst feststellt, dass das Objekt erstellt wurde, und es nach dem Löschen erneut erstellt. Generell wäre ich Ihnen für Ihre Kommentare zu den Fragen dankbar.

Urteilen Sie nicht streng nach dem Wortlaut.


Leute, helft mir mit den Pfeilen, bitte!!!

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}
 
Pokrov:

Leute, helft mir mit den Pfeilen, bitte!!!

Finden Sie diese Zeile heraus.

bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);

Schauen Sie, wo der Pfeil eingezeichnet ist.

 
AlexeyVik:

Finden Sie diese Zeile heraus

Achten Sie darauf, wo der Pfeil eingezeichnet ist.

Ich habe jetzt die Pfeile erhalten, und sie bewegen sich entsprechend den Punkten von Signal zu Signal,

Ich kann dann die Auslösung des Signals auf dem Chart analysieren?

 
Pokrov:

Vielen Dank, Alexey! Es hat geholfen, jetzt die Pfeile erscheinen und bewegen sich von Signal zu Signal durch Punkte, aber wie sollte ich die Pfeile erscheinen und bleiben an ihrem Platz auf jedem Signal?

Ich kann dann die Auslösung des Signals auf dem Chart analysieren?

Hören Sie auf, sich zu bewegen und zeichnen Sie neue.