[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 105

 
abolk:
siehe hier: https: //docs.mql4.com/ru/basis/operations/math
Ich habe mir alles angesehen. Wie kann ich mein Problem lösen?
 
Zhunko:
Das können Sie auch tun.

wäre dann nicht b gleich eins?

Ich habe es überprüft. Eins.

 
artmedia70:
Flaggen erstellen, z. B.

Für TP1 ist es bool TP1, für TP2 ist es bool TP2, usw...

Anfänglich sind ihre Werte falsch.

Vor dem nächsten Abschluss machen Sie einen Check:

if (!TP1) {Code für teilweises Schließen des ersten Teils, nach erfolgreichem Schließen schreiben TP1=true}

if (!TP2) {Code zum teilweisen Schließen des zweiten Teils, nach erfolgreichem Schließen schreiben TP2=true}

... und so weiter für alle Teile...

Die Flaggen signalisieren also, dass jeder Teil bereits einmal geschlossen wurde...


Danke! Habe den Code überarbeitet... TP0==false Ich habe es an den Anfang des Programms gestellt.

Das Problem bleibt bestehen: Der 1. Teil schließt und beginnt sofort den 2. zu schließen :-( ..., mit Fehler 131 für den 2., verständlich - Losgröße unterschiedlich ) Aber eine andere Nuance ist, dass für den 1. Teil ""Alert ("Closed ",Lot," Lot Buy ",Ticket);"" nicht ins Log geschrieben wird, d.h. die Verifizierung Ans==true nicht erreicht. Warum???? Nachfolgend finden Sie ein Stück Code...

Vielen Dank im Voraus!

while(true) // Horde-Schleife schließen.
{
if (TP0==false && (Cls_B0==true ||Cls_S0==true))

{
LotC=MathRound(Lot/4/Step)*Step;
Alert("Lot-",Lot, "Attempting to close-",LotC," Lot Buy ",Ticket,. Ich warte auf Antwort...");

RefreshRates(); // Daten aktualisieren
Ans=OrderClose(Ticket,LotC,Bid,5); // TicketClose Buy 1/3 lots?
if (Ans==true) // Es hat funktioniert :)
{
TP0=true;
Alert ("Closed ",Lot," Lot Buy ",Ticket);
break; // Exit from closed loop
}
if (Fun_Error(GetLastError())==1) // Fehlerbehandlung
continue; // Retry
return; // Exit from start()
}

 
Sinichka:

Liebe Programmierer!

Hilfe, bitte. Der Indikator zeichnet Werte bei einer bullischen latenten Divergenz und nicht bei einer bärischen latenten.... Er schreibt, dass Fehler 4002 - Array-Index - außerhalb des Bereichs.

Ich scheine alles in Ordnung gebracht zu haben... Ich habe einen ganzen Abend gebraucht... Und es ist eine Schande - der Code ist der einfachste... Aber es zeichnet Stiere mit Pfeilen, aber keine Bären... BITTE! Was ist der Fehler in?????????????????????


Alena,

Sie müssen Speicher für die Arrays vpadcci[], v[], hh[], ss[] zuweisen. Sie werden als dynamisch deklariert, aber ihre Größe ist nirgends angegeben. Die Größe eines dynamischen Arrays wird mit der Funktion ArrayResize() festgelegt.

P.S. Und bitte benutzen Sie die SRC-Taste, um den Code einzufügen

 
Snaf:
Frage für MT5. Wie kann ich wissen, dass der Strategietester seine Arbeit abgeschlossen hat? Außer visuell :)

Die Funktion deinit() wird ausgeführt, wenn der Auftrag abgeschlossen ist. Wenn wir dort ankommen, bedeutet das, dass die Arbeit des Experten beendet ist. Um festzustellen, ob die Arbeit im Tester in Gang ist, verwenden Sie die Funktion IsTesting().


Entschuldigung, ich habe bemerkt, dass sich diese Frage auf den MT5 bezieht.

Dort ist es dasselbe, nur OnDeinit() und MQL5InfoInteger(MQL5_TESTING).

 
alsu:

Alena,

Sie müssen Speicher für die Arrays vpadcci[], v[], hh[], ss[] zuweisen. Sie werden als dynamisch deklariert, aber ihre Größe ist nirgends angegeben. Die Größe eines dynamischen Arrays wird mit der Funktion ArrayResize() festgelegt.

P.S. Und bitte benutzen Sie die SRC-Taste, um den Code einzufügen


Vielen Dank für die Antwort, ich werde mich damit befassen!
 
eddy:

вопрос програмистам: как сделать число после запятой целым?:)

например в числе 1,128 нужно 128, в 1,12 - 12, в 1,2 - 2)

exnern double n=1,12
n-=MathFloor(n);          // 0.12 = 0.1200000..01 или 0.11999999..99
int n2=MathRound(n*1000); // 0.12 > 120 или 119
while(true)               // пока в конце 0 или 9
 if(n2%10<1)              // n2==хз*10+0
    n2/=10; else          // убираем 0
 if(n2%10==9)             // n2==хз*10+9
   {n2=MathRound(n2/10);} // округляем 9 (119 > 11.9 > 12)
 else if(n2%10>0) break;
So habe ich es gelöst. Ein Minuspunkt - man kann keine Zahl erhalten, wenn sie auf 0 oder 9 endet. Aber das ist nicht nötig, ich gebe einfach den Berechnungszeitraum ein (4,8,12,16,24,36,48 usw.)
 

Bitte geben Sie an, wie man korrekt festhält, dass sich der VininI LRMA Indikator colour.mq4 https://www.mql5.com/ru/code/8200 geändert hat.

Wenn ich double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift) verwende. Ich kann es nicht begreifen. Ich habe iCustom(NULL,0, "VininI_LRMA_color",55,0,1) geschrieben und weiß nicht, was ich damit anfangen soll))

 

Die Werte der Zeilen stehen in den Indikatorpuffern 1 (grün) und 2 (rot). Wenn eine grüne Linie auf dem Diagramm gezeichnet wird, hat die Variable up auf Balken 1 den Wert dieser Linie, und die Variable dn=EMPTY_VALUE und vice versa. EMPTY_VALUE ist ein leerer Pufferwert, sein numerischer Wert ist 2147483647.
Sie können diese Werte dann nach Belieben verwenden.

double up=iCustom(NULL,0,"VininI LRMA color",period,price,Shift,1,1); 
double dn=iCustom(NULL,0,"VininI LRMA color",period,price,Shift,2,1); 
 
Poseidon:
Können wir einen EA erstellen, der alle Aufträge schließt, wenn der Take-Profit des zuletzt geöffneten Auftrags ausgelöst wird?
Ich bin noch ein Anfänger und weiß nicht, wie man das macht. Können Sie das für mich tun, wenn es Ihnen nichts ausmacht?