[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 617

 
xant:

rigonich

Ich könnte Ihnen Punkt für Punkt auf jedes Ihrer Worte antworten, aber ich sehe keinen Sinn mehr darin. Wenn jemand stur ist, hat es keinen Sinn, etwas zu erklären. Die Frage war, wie man sich organisieren sollte. Als Sie dann den Hinweis gaben, dass globale Variablen besser sind als das Schreiben in eine Datei, kam die Frage auf, wie man es richtig macht. Dann gab Ihr nervöser Mitunterzeichner einen Code ein, wobei er keine Gelegenheit ausließ, einen Witz zu machen. Es ist ganz einfach: Ein Teil des Codes geht in den Initialisierungsblock, ein Teil des Blocks geht in den Haupt-EA-Block.

Dies ist der Inhalt des Initialisierungsblocks:

Dies ist der Inhalt des Hauptblocks

Wie Sie sehen können, habe ich die Variablen umbenannt.

Also fügte ich nacheinander den zweiten Teil des Codes ein, beginnend unmittelbar nach der Variablenberechnung und bis zum Ende des Startblocks, wobei ich versuchte, ihn vor der letzten geschweiften Klammer einzufügen.

Nach Ihrer hochprofessionellen Erklärung zu urteilen, hätte ich genau das tun sollen, denn es ist für jeden Anfänger klar. Ihrer Meinung nach sollte es funktionieren. Aber das ist nicht der Fall. Das ist das Beste, was ich bisher erreicht habe:


Lesen Sie sorgfältig. Diese beiden Blöcke werden als Funktionsbeschreibungen bezeichnet und können nicht innerhalb anderer Funktionsbeschreibungen platziert werden. In der Init sollte platziert werden

{
fGet_MineGV();
}

und in start ein ähnlicher Aufruf der zweiten Funktion. Die Funktionen selbst müssen separat in Ihrem EA platziert werden, weder in init noch in start in einer eigenen Funktion.

UndIhr nervöser Mitunterzeichner hat Ihnen nicht einen Teil des Codes gegeben, sondern zwei fertige Funktionen, die er für Sie geschrieben hat.

 
lottamer:

Sind solche Ketten erlaubt?

if ( (A==1 && B==2) && (C==2 || D==3) && E==4)

d.h. sowohl AND als auch OR in einer Zeile?


Ja, alles, was in Klammern steht, wird vom Compiler als separater Vergleich behandelt.
 
drknn:

Schreiben Sie es selbst - es gibt 1 einzige Schleife. Versuchen Sie einfach, es zu tun. Und wenn Sie scheitern, zeigen Sie uns den Code Ihrer Schleife - wir werden Ihnen helfen.


Ich habe ein Problem mit Zyklen.

Ich habe den Anfang schon oft gesehen...

als nächstes ist es neblig....

for (i=0; i<k; i++) {

wenn(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)

Ich kann höchstens verstehen, dass jedem i etwas zugeordnet ist...

Aber was soll man mit dieser Mischung aus "i" machen... Ich habe keine Ahnung...

 

rigonich

Nun, das ergibt endlich einen Sinn. Die kurzen Zeichenfolgen in geschweiften Klammern sind also Funktionsaufrufe, und die Funktionen selbst müssen irgendwo untergebracht werden.

Nun der Reihe nach.

Ich füge einen Aufruf der ersten Funktion zu den init, ich tue es sofort nach dem Start der init-Funktion, d.h. einfach so, wird es richtig sein, oder?

int init()
{
    fGet_MineGV();
}
//... и далее мой код, который был ранее

In ähnlicher Weise füge ich den Aufruf der zweiten Funktion in den Startblock ein. Wäre es korrekt, wenn ich dies unmittelbar nach der Berechnung der Variablen tue? Zum Beispiel so:

     if ((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV>V_NN)&&(SUA==0))
{
SUA=100;
SUA1+=1;
}
if((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV<2)&&(VVV>0)) 
SUA=0;
if ((BUA==100)&&(A5<-4.5))
{
SUA=0;
SUA1=0;
}

     if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV>V_NN)&&(BUA==0))
{
BUA=100;
BUA1+=1;
}
if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV<2)&&(VVV>0)) 
BUA=0;
if ((SUA==100)&&(A5>4.5))
{
BUA=0;
BUA1=0;
}
//...сюда вставляю...
{
    fSave_MineGV();
}
//...и далее опять мой код...

Sind diese ersten 2 Schritte korrekt?

И нервный ваш согестник  дал вам не часть кода, а две готовые функции, которые он дя вас написал. 
Nun, ich habe ihm dafür sofort gedankt.
 

Wie kann ich aus einer if-Reihe aussteigen, wenn die Bedingung if=true ist?

wenn

wenn

if (TRUE) - aber von vorne anfangen müssen und nicht weitergehen

wenn

wenn

.......

 
lottamer:

konnte die richtige Funktion in der Bibliothek nicht finden

Die Gewinngröße der zuletzt geschlossenen Position.

Vielleicht hat jemand eine?


Die Take-Profit-Größe in der Einzahlungswährung wird von OrderProfit() zurückgegeben, in Pips - Schlusskurs minus Eröffnungskurs, und wie man die letzte geschlossene Position findet oder wo man eine fertige Funktion dafür bekommt, wurde Ihnen, glaube ich, schon mehrmals erklärt.
 
lottamer:

Wie kann ich aus einer if-Reihe aussteigen, wenn die Bedingung if=true ist?

wenn

wenn

if (TRUE) - aber von vorne anfangen müssen und nicht weitergehen

wenn

wenn

.......


wenn

wenn

if (TRUE) - aber Sie müssen wieder von vorne anfangen und können nicht weiter nach oben gehen

sonst {

wenn

wenn

.......

}//if (TRUE) - aber wir müssen wieder von vorne anfangen und dürfen nicht weiter nach oben gehen

In etwa 99,9 % der Fälle bedeutet dies, dass Sie sich nicht genügend Gedanken über die Implementierung des Algorithmus gemacht haben.

 
VladislavVG:

wenn

wenn

if (TRUE) - aber Sie müssen wieder von vorne anfangen und können nicht weiter nach oben gehen

sonst {

wenn

wenn

.......

}//if (TRUE) - aber wir müssen wieder von vorne anfangen und dürfen nicht weiter nach oben gehen

In etwa 99,9 % der Fälle bedeutet dies, dass Sie die Implementierung des Algorithmus nicht ausreichend durchdacht haben.


:))) scheint bereits eine Lösung gefunden zu haben

return (0) - und wunderbar kommt alles heraus, wenn

 
VladislavVG:

wenn

wenn

if (TRUE) - aber Sie müssen wieder von vorne anfangen und können nicht weiter nach oben gehen

sonst {

wenn

wenn

.......

}//if (TRUE) - aber wir müssen wieder von vorne anfangen und dürfen nicht weiter nach oben gehen

In etwa 99,9 % der Fälle bedeutet dies, dass Sie sich nicht genügend Gedanken über die Implementierung des Algorithmus gemacht haben.

Mit },else, return, oder break oder continue (for-Schleifen).
 
rigonich:

Die Take-Profit-Größe in der Einzahlungswährung wird von der Funktion OrderProfit() zurückgegeben, in Punkten - Schlusskurs minus Eröffnungskurs. Ich glaube, es wurde Ihnen schon mehrmals erklärt, wie man die letzte geschlossene Position findet oder wo man eine fertige Funktion dafür bekommt.


Ganz genau. Sie müssen zuerst das Ticket der letzten geschlossenen Position GetTicketLastPos nehmen und dann die Standardfunktionen verwenden, um aus diesem Ticket zu entnehmen, was Sie benötigen.

Ich danke Ihnen.