Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 22

 
Artyom Trishkin:

О! Danke. (lacht) Ich habe es am Morgen selbst nicht bemerkt... Es muss jedoch noch eine Prüfung für das Füllen von Feldern durchgeführt werden. In Quatermass nicht erfüllt, und in Fünf ganz oft nicht in den Daten das erste Mal wegen des Fehlens von historischen Daten ausgefüllt.

ZS: Sie sollten mehr schlafen - Ihre Gedanken werden in diese Richtung arbeiten.

Nun, man kann es in eine Schleife einbauen

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

oder sogar

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

um genau den gewünschten Betrag zu kopieren.


ps; Während ich ging, um Tee zu gießen, hatte ich eine andere Idee, um CopyRates() und ein Array von Strukturen MqlRates rates[] zu verwenden, aber ich bin zu faul, um etwas neu zu schreiben.

 
Alexey Viktorov:

Nun, man könnte es auch in eine Schleife einbauen

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

oder sogar

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

um genau die angeforderte Anzahl von Kopien zu erstellen.


ps; Während ich Tee trank, hatte ich eine andere Idee - CopyRates() und Array von Strukturen MqlRates rates[] zu verwenden, aber ich bin zu faul, es neu zu schreiben.

Ist es nicht so, wie ich es vorgeschlagen habe?
 
giannis1386:
Helfen Sie mir, andere Verkaufsbedingungen zu prüfen.
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

Das hat eine seltsame Logik. Aber selbst wenn man die seltsame Logik außer Acht lässt, dann:

Hier haben Sie zwei Bedingungen für Kaufen und den Rest für Verkaufen.

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

Ihre Logik ist seltsam. Aber selbst wenn man die seltsame Logik außer Acht lässt, dann:

Hier haben Sie zwei Bedingungen für Kaufen und alle anderen für Verkaufen geprüft

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

Ich habe versucht,slevel=OrderStopLoss()>Ask+Point*TS für Sell anzuhängen;

Aber da ich keine Ahnung vom Programmieren habe, ist nichts Brauchbares dabei herausgekommen. Ich habe eine Woche lang in den Foren gestöbert.

Warum diese seltsame Logik?) Der Code stammt nicht vollständig von mir.

 
giannis1386:

Ich habe versucht,slevel=OrderStopLoss()>Ask+Point*TS hinzuzufügen;

Ich habe eine Woche lang in den Foren herumgestöbert. Alle meine Versuche endeten damit, dass der Verkaufsstopp zusammen mit dem Preis verschoben wurde.

Warum die seltsame Logik?) Der Code stammt nicht ganz von mir, ich habe ihn so gut wie möglich überarbeitet.

Warum schreiben Sie nicht zuerst die Bedingungen auf, unter denen die Verkaufs- und Kaufstopps verschoben werden sollen?

Und dann, nachdem du darüber nachgedacht hast, schreibst du in deinen Code, was auf dem Zettel steht.

 
Artyom Trishkin:

Schreiben Sie zunächst mit einem Bleistift auf ein Blatt Papier, unter welchen Bedingungen Sie den Stop Buy und Stop Sell verschieben müssen.

Und dann, nachdem Sie darüber nachgedacht haben, schreiben Sie in den Code, was auf dem Zettel steht.

slevel=OrderStopLoss()>Ask+Point*TS; so sieht es bei einer Verkaufsposition aus.
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; nun, das scheint das richtige zu sein. Oder ist es falsch? Ich bin neu auf diesem Gebiet.

Verstehen Sie überhaupt, was in diesem Zustand geschrieben steht? Dies ist eine Zuweisung von Null oder Eins an eine Variable vom Typ double

Was möchten Sie bekommen?

 
Artyom Trishkin:

Verstehen Sie überhaupt, was in diesem Zustand geschrieben steht? Es ist eine Zuweisung von Null oder Eins an eine Variable vom Typ double

Was wollen Sie erreichen?

Hier ist, was ich Korrektur gelesen habe.

Bedingung prüfen - SL nicht hin und her bewegen, sondern nur in eine Richtung.

Für eine BUY-Bestellung zum Beispiel würde Ihre Formel

OrderStopLoss()<Bid-Point*TrailingStop

Anhand dieses Beispiels habe ich es für Sel gemacht.

 
giannis1386:

Hier ist, was ich gelesen habe.

Bedingung prüfen - SL nicht hin und her bewegen, sondern nur in eine Richtung

Für eine BUY-Bestellung zum Beispiel würde Ihre Formel

OrderStopLoss()<Bid-Point*TrailingStop

In diesem Beispiel habe ich es für eine Verkaufsposition eingefügt.

Sie brauchen es also so:

auf Russisch... wenn die Stop-Order unter dem Geldkurs abzüglich des Trailing-Stop-Abstands liegt, dann ... Ihr Vorgehen

Und Sie weisen der Variablen das Ergebnis dieses logischen Ausdrucks zu - also entweder Null oder Eins.

 
Artyom Trishkin:

Sie brauchen also das hier:

auf Russisch... wenn die Stop-Order unter dem Geldkurs abzüglich des Trailing-Stop-Abstands liegt, dann ... Ihre Handlungen

Und Sie weisen der Variablen das Ergebnis dieses booleschen Ausdrucks zu - also entweder Null oder Eins.

Ich bin völlig verwirrt.

double blevel=OrderStopLoss()<Bid-Point*TS; funktioniert bei mir. SL geht nach dem Preis nur im Gewinn.

double slevel=OrderStopLoss()>Ask+Point*TS; Ich weiß nicht, wie ich dies zu else hinzufügen kann

sie sind nicht bool.

Grund der Beschwerde: