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

 
hoz:

Ja. Variablen mit i_ sind Eingabevariablen (von dem Wort intut, das vom Benutzer geändert werden kann...), und pt ist auch eine globale Variable, die überall sichtbar ist...

Nein, das Los wurde nicht normalisiert. In der Testversion ist es nie aufgetreten... Und was hat das Los mit dem Objekt zu tun (Fehler 4200)?

Was hat das Los damit zu tun? Wenn das Los ungültig ist, wird die Fehlerbehandlungsfunktion aufgerufen, was dazu führt, dass Objekte gebaut werden.

Wenn das Los falsch ist, gibt es einen Fehler im Prüfgerät. Sie sagen, dass Sie keine Objekte bauen, aber in der Funktion

void pr (string txt)

baut immer noch Objekte:

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

Darin liegt wahrscheinlich das Problem. Vielleicht müssen Sie dort etwas tun. Kommentieren Sie die Ausgabe des Diagramms in dieser Funktion aus. Wenn der Fehler verschwunden ist, suchen Sie den Grund dafür in der Funktion.

void pr (string txt)
 
vovak_85:

Hallo, ich bin neu in der mql-Programmierung. Ich habe ein Problem, ich habe einen benutzerdefinierten Indikator, nicht von mir geschrieben, es erzeugt Kauf- und Verkaufssignale in Form von Pfeilen, zu diesem Zweck gibt es zwei Puffer in den Indikator, das Problem ist, dass ich nicht richtig lesen können die Signale aus dem Indikator an den Expert Advisor zu einem Kauf oder Verkauf zu machen.

Der Code für den Indikator:

...

Um den Code korrekt in das Forum einzufügen, klicken Sie auf den SRC und kopieren Sie dann den Code.

 

SRC zum Einfügen des Codes!!!

und es ist nicht hinderlich, sondern sehr empfehlenswert!

Forum-Navigator und Antworten auf häufig gestellte Fragen. Eine sehr empfehlenswerte Lektüre! ( 1 2 3 4 5 6 ) 52 18.02.2011 FAQ

 

Hallo, ich bin neu in der mql-Programmierung. Ich habe ein Problem, ich habe einen benutzerdefinierten Indikator, nicht von mir geschrieben, es erzeugt Kauf- und Verkaufssignale in Form von Pfeilen, zu diesem Zweck gibt es zwei Puffer in den Indikator, das Problem ist, dass ich nicht richtig lesen können die Signale aus dem Indikator an den Expert Advisor zu einem Kauf oder Verkauf zu machen.

Indikator-Code:

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

if (x < 0) return (-1);

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
Ich werde es wissen, danke! Reparieren Sie es?
Ihr vorheriger Beitrag ist richtig.
 
vovak_85:
Ich werde es wissen, danke! Reparieren Sie es?
Ja, natürlich! Durch die Beseitigung eines unnötigen Spielverderbers!
 
hoz:

pr ist eine Druckfunktion. Und der Fehler, das ist bereits eine Standardkonstante. Das ist logischerweise überhaupt nicht akzeptabel. Wenn Sie immer noch die pr-Funktion vermuten, hier ist sie:


Ersetzen Sie ihn durch den üblichen Ausdruck und beobachten Sie das Protokoll.

es wird ein Objekt erstellt, der Objektname ist nicht eindeutig, deshalb kommt es zu einem Fehler beim Erstellen eines Objekts.

 
artmedia70:

Was hat das mit dem Grundstück zu tun? Wenn das Los falsch ist, wird die Fehlerbehandlungsfunktion aufgerufen und es werden Objekte erstellt.

Wenn das Los falsch ist, gibt es auch einen Fehler im Prüfgerät. Sie sagen, dass Sie keine Objekte bauen, aber in der Funktion

Die Objekte werden noch gebaut:

Darin liegt wahrscheinlich das Problem. Vielleicht müssen Sie dort etwas tun. Kommentieren Sie die Ausgabe des Diagramms in dieser Funktion aus. Wenn der Fehler verschwunden ist, suchen Sie die Fehlerursache in der Funktion



Daran hatte ich auch schon gedacht, und Ihre Antwort hat genau den Punkt getroffen. Das Problem verschwand mit dem Auskommentieren von Stellen mit dieser Funktion. Offensichtlich müssen Sie bei der Verwendung dieser Funktion alle Objekte in der Eingabe auf einmal löschen, oder? D.h. ganz am Anfang der pr-Funktion, meine ich.
 
hoz:

Ich habe selbst schon darüber nachgedacht, und gerade eben hat Ihre Antwort denselben Punkt getroffen. Das Problem verschwand mit dem Auskommentieren von Stellen mit dieser Funktion. Offenbar müssen Sie bei der Verwendung dieser Funktion alle Objekte am Eingang auf einmal löschen, oder? D.h. ganz am Anfang der pr-Funktion, ich meine...

Ich kenne die Logik Ihrer Funktion wirklich nicht. Ob es Objekte löschen oder bauen soll, weiß ich nicht. Sagen Sie mir, was es tun soll, und wir werden sehen, wo die Logik falsch ist. Wenn die Funktion jedoch versucht, ein grafisches Objekt zu erstellen, aber fehlschlägt, bedeutet dies, dass es bereits existiert. Was ist der nächste logische Schritt in Ihrem Programm? Sie können ein neues Objekt mit einem anderen Namen erstellen (z. B. fügen Sie dem Objektnamen die aktuelle Uhrzeit hinzu (TimeToStr(TimeCurrent()))) oder, wenn Sie bereits ein Objekt haben, aber seine Eigenschaften ändern müssen, erstellen Sie es nicht erneut, sondern ändern Sie einfach seine Eigenschaften. Dann wird der Fehler nicht mehr auftreten.

So einfach ist das. Die Hauptsache ist, dass Sie wissen, was Sie wollen. :)

 
vovak_85:

Hallo, ich bin neu in der mql-Programmierung. Ich habe ein Problem, ich habe einen benutzerdefinierten Indikator, nicht von mir geschrieben, es erzeugt Kauf- und Verkaufssignale in Form von Pfeilen, zu diesem Zweck gibt es zwei Puffer in den Indikator, das Problem ist, dass ich nicht richtig lesen können die Signale aus dem Indikator an den Expert Advisor zu einem Kauf oder Verkauf zu machen.

Indikator-Code:


Sind Sie sicher, dass Sie alle geschweiften Klammern richtig gesetzt haben? Sie fehlen an einigen Stellen. Deshalb ist Ihre Logik fehlerhaft. Und höchstwahrscheinlich ist das Ergebnis nicht das, was Sie erwartet haben.