[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 77

 

Hallo zusammen

Bitte beraten Sie, warum kauft scoop, aber wenn die Bedingungen reif sind, schließt die Position nicht

/---- Eingabeparameter
extern int PerRSI=8;
extern int MagicNamber=77771;
extern double Lots=1.0;
//+------------------------------------------------------------------+
int start()
{
int
cnt, // Bestellindex
Ticket, // Bestellnummer
total; // Anzahl der bereits eröffneten Aufträge
doppelt
rsi_0, // Wert. rsi_0 aktuell
rsi_1; // Wert. rsi_1 1. Balken
wenn (Balken<100)
{
Print("Balken kleiner als 100");
zurück(0);
}
total=AuftragsSumme();
if(gesamt<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Aktueller Balken
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Aktueller Balken plus 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Wenn die Linie 30 überschritten hat
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "Mein RSI", MagicNamber,0,Green);
if(Ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice())
}
else Print("Fehler bei der Eröffnung einer SELL-Order: ",GetLastError());
zurück(0);
}
for(cnt=0;cnt<Gesamt;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // ist dies eine offene Position? OP_BUY oder OP_SELL
{
if(OrderType()==OP_BUY) // Long-Position eröffnet
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // wenn die Linie 70 überschritten hat
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // Position schließen

return(0); // exit
}}}}}}
 
KoZaNOStra >> :

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "Mein RSI", MagicNamber,0,Green);
if(Ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice())
}


Was zum Teufel ist das? Wofür ist OrderSelect()?


Der Rest ist schwer zu verstehen, weil der Code ohne Einrückungen aufgebaut ist und man den Klammern nicht folgen kann - ich will mir nicht die Sicht verderben.

 
Wie kann ich das Diagramm entfärben, um die Bewegung der Hinterkante anzuzeigen?
 
anat писал(а) >>

Herzlichen Dank für Ihre Hilfe! Und auch an Kondor - y. Nun gibt es ein weiteres Problem. So haben wir zum Beispiel 10 Kaufpositionen eröffnet. Wenn wir 1, 2, 3, usw. Positionen mit Stop oder Take schließen, beginnt der Expert Advisor zu kaufen, wenn ein Kaufsignal vorliegt. Ich möchte aber, dass zuerst ALLE Aufträge geschlossen werden, und dann, wenn keine Position mehr offen ist, ein neuer Handelszyklus gestartet wird. Mit anderen Worten: Wir brauchen einen Zähler. Öffnen Sie die Positionen zunächst bis zu einer bestimmten Zahl, und dann, wenn die Positionen geschlossen sind, bis zu Null. Ich möchte mich im Voraus bedanken.

Das ist genau die Art und Weise, wie es jetzt gemacht wird. Solange mindestens ein Auftrag offen ist, wird kein weiterer Auftrag geöffnet. Wenn Sie etwas anderes tun wollen, müssen Sie genauer sein. Dann müssen Sie wählen, ob Ihre Aufträge geöffnet werden sollen, wenn es offene Positionen gibt oder nicht.

 

Ich habe eine Frage:

Gibt es in MetaTrader irgendwelche Debugging-Tools?

Bitte teilen Sie Ihre Erfahrungen mit - wie debuggen Sie Skripte und EAs?

Es geht um Ziffern, Parameter, Visionen von Algorithmen und so weiter. Wie findet man Fehler im Algorithmus?

 
Ryan_ryan >> :

Ich habe eine Frage:

Gibt es in MetaTrader irgendwelche Debugging-Tools?

Bitte teilen Sie Ihre Erfahrungen - wie debuggen Sie Skripte und Expert Advisors?

Wenn ich eine Fehlersuche durchführen muss, tue ich das mit Print()

In den meisten Fällen ist dies jedoch nicht erforderlich.

 

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Können Sie mir bitte sagen, warum in diesem Design nach dem Schließen eines Auftrags zuerst "timeout.wav" ertönt, dann "no error", das der Anzahl der zu schließenden Aufträge entspricht (wenn 2 Aufträge geschlossen werden, wird "no error" zweimal angezeigt usw.) und dann "money.wav". Das Komische daran ist, dass dies nur für kurze Geschäfte gilt, bei langen Geschäften funktioniert alles einwandfrei. Wer weiß, was der Trick ist und wie man ihn beheben kann?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Können Sie mir bitte sagen, warum in diesem Design nach dem Schließen eines Auftrags zuerst "timeout.wav" ertönt, dann "no error", das der Anzahl der zu schließenden Aufträge entspricht (wenn 2 Aufträge geschlossen werden, wird "no error" zweimal angezeigt usw.), und dann "money.wav". Das Komische daran ist, dass dies nur für kurze Geschäfte gilt, bei langen Geschäften funktioniert alles einwandfrei. Wer weiß, was der Trick ist und wie man ihn beheben kann?

Ist die Klammer nicht erst nach dem Schließen zu sehen?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Diese Linie fällt irgendwie heraus.

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Können Sie mir bitte sagen, warum in diesem Design nach dem Schließen eines Auftrags zuerst "timeout.wav" ertönt, dann "no error", das der Anzahl der zu schließenden Aufträge entspricht (wenn 2 Aufträge geschlossen werden, wird "no error" zweimal angezeigt usw.), und dann "money.wav". Das Komische daran ist, dass dies nur für kurze Geschäfte gilt, bei langen Geschäften funktioniert alles einwandfrei. Wer weiß, was der Trick ist und wie man ihn beheben kann?


Die Bedingung im ersten bedingten "if"-Operator wirkt sich nur auf den darauf folgenden Operator (die nächste Zeile) aus.

Die anderen werden ausgeführt, WENN der Auftrag nicht geschlossen wird. D.h. auch wenn es keinen Befehl gibt, den Auftrag zu schließen, wird einer der Playsounds funktionieren.

Der richtige Weg ist der folgende:

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()== mnum) 
  {
     bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
     if ( sellclose) 
        PlaySound("money.wav");
     else 
     {
        Print("Ошибка : ", Error(GetLastError()));
        PlaySound("timeout.wav");  
     }
  }
 
infinum13 >> :

Wird die Klammer nicht nach dem ersten "wenn" geschlossen?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Diese Zeile lässt sich irgendwie nicht schließen.

Wenn(OrderType()==OP_SELL && OrderMagicNumber()==mnum, dann fällt zwar der Trick für kurze und lange Transaktionen aus, aber der Fehler "No error" mit Ton "timeout.wav" funktioniert nur bei kurzen Trades, bei langen Trades funktioniert es gut, es gibt die gleichen Klammern und alles ist gleich