[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 203

 
Hallo, könnten Sie mir bitte einen Befehl geben (wenn es einen gibt), um zufällig eine Zahl entweder 0 oder 1 zu wählen, danke im Voraus?
 
hoz:


Gewöhnen Sie sich zunächst daran, die Klammern dort anzubringen, wo Sie sie brauchen. Zum Beispiel so:

Und im Allgemeinen sollten Sie eine Zeitspanne angeben, nicht einen festen Wert. Ihre Logik ist überhaupt nicht korrekt. Nicht 1 Stunde ODER 3 Stunden, sondern 1 Stunde bis 3 Stunden!!!
Danke, ich habe mich geirrt.
 
stater:
Hallo, könnten Sie mir bitte einen Befehl geben (wenn es einen gibt), um zufällig eine Zahl entweder 0 oder 1 zu wählen, danke im Voraus?
int x =MathRand() % 2;
 

Beim Testen des Expert Advisors habe ich Fehler bei der Codeausführung gefunden:
- Die Ausführung der Schleife for(i=0;i<OrdersTotal();i++) wird mit dem nächsten Tick unterbrochen (unten in Fettdruck),
- Kaufaufträge werden in beliebiger Reihenfolge ausgewählt und abgeschlossen.

Können Sie mir bitte sagen, wie ich die Ursache finden und das Problem beheben kann?
Der Code des Programms und der Bericht aus dem Tagebuch des Testers.

Programm-Code.

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp.
//| Test des Schleifenoperators.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link ""
//+------------------------------------------------------------------+
//Deklarierte Variablen|
//+------------------------------------------------------------------+
int Mn=357;//Magische Zahl
int i;//Index des Wiederholungszählers
double PriTP;//TP-Serie
int Tick;//Tick-Zähler
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion|
//+------------------------------------------------------------------+
int init()
{
//----Einstellungsaufträge
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0:",OrdersTotal=",OrdersTotal());//
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion|
//+------------------------------------------------------------------+
int start()
{
//----Tick-Zähler
Tick++;//Tick
//----Close BUY-Aufträge
for(i=0;i<OrdersTotal();i++)//Initialisierung der Schleife
{
Print("Kc1:"," Tick=",Tick," i=",i);//Meldung
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Auftrag i auswählen
{
if(AuftragSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//Identifikationsnummer
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Die Transaktionsart des aktuell ausgewählten Auftrags
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Schließen der Position
}/Geschlossen if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}// Geschlossen if(OrderMagicNumber()==Mn)
}// Geschlossen if(OrderSymbol()==Symbol()
}// Geschlossen if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}// Geschlossen for(i=0;i<OrdersTotal();i++)
//----
zurück(0);
}

Einträge aus dem Logbuch des Testers.

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=0
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 at price 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD bei 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 PM Poligon1 Test gestartet
2013.03.01 12:11:21 18 18:30 Poligon1 EURUSD, M15: erfolgreich geladen

Herzliche Grüße. Shurkin

 
Shurkin:

Beim Testen des Expert Advisors haben wir einige Fehler im Code entdeckt:
- Die Ausführung des Schleifenoperators for(i=0;i<OrdersTotal();i++) wird durch den nächsten Tick unterbrochen (unten in Fettdruck dargestellt),
- Die Kaufaufträge werden in zufälliger Reihenfolge ausgewählt und geschlossen.

Herzliche Grüße. Shurkin


1. Orders können nicht in der init()-Funktion geöffnet werden (im Strategy Tester, aber in der Demo funktioniert es nicht)

2. Wenn Sie Aufträge schließen, zählen Sie vom Ende zum Anfang und nicht umgekehrt, wie Sie es getan haben.

 
Shurkin:

Beim Testen von Expert Advisor wurden Fehler bei der Codeausführung festgestellt:
- die Ausführung der Schleifenanweisung for(i=0;i<OrdersTotal();i++) wird durch den nächsten Tick unterbrochen (unten in Fettdruck hervorgehoben),
- Kaufaufträge werden in zufälliger Reihenfolge ausgewählt und geschlossen.

Können Sie mir bitte sagen, wie ich die Ursache finden und das Problem beheben kann?
Ich stelle Ihnen den Code des Programms und den Bericht aus dem Tagebuch des Testers zur Verfügung.

Der Code des Programms.

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| Schleifenoperator-Test.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#Eigenschaftslink ""
//+------------------------------------------------------------------+
//|Deklarierte Variablen|
//+------------------------------------------------------------------+
int Mn=357;//Magische Zahl
int i;//Iterationszähler
double PriTP;//TP-Serie
int Tick;//Tick-Zähler
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----Aufträge setzen
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE)//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0:"," OrdersTotal=",OrdersTotal());//PriTP
//----
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----Zähler Tick
Tick++;//Tick
//----Close BUY Orders
for(i=0;i<OrdersTotal();i++)//Initialisierung der Schleife
{
Print("Kc1:"," Tick=",Tick," i=",i);//Sende Nachricht
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Auftrag i auswählen
{
if(OrderSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//Identifikationsnummer
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Die Vorgangsart des aktuell ausgewählten Auftrags
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Schließung der Position
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}/Closed if(OrderMagicNumber()==Mn)
}// Geschlossen if(OrderSymbol()==Symbol()
}// Geschlossen if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}// Geschlossen for(i=0;i<OrdersTotal();i++)
//----
return(0);
}

Tester-Protokolleinträge.

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=0
2013.03.01 12:12:09 2012.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD bei 1.25773 sl: 1.25516 tp: 1.26023 zum Preis 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 zu Preis 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD bei 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD bei 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00:00 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 Poligon1 test started
2013.03.01 12:11:21 Poligon1 EURUSD,M15: erfolgreich geladen

Herzliche Grüße. Shurkin

Ich habe mir nicht Ihr ganzes Durcheinander angesehen (Sie müssen die SRC-Schaltfläche über dem Eingabefeld verwenden, um es anzuhängen) - es ist nicht angenehm, in dem über die ganze Seite verstreuten Code zu kratzen, aber das erste, was mir ins Auge fiel, ist eine Zeile for(i=0; i<OrdersTotal() ; i++) . Um sie zu schließen, verwenden Sie die umgekehrte Schleife: for(i=OrdersTotal()-1; i>=0; i -- )
 
Roger:
int x =MathRand() % 2;


Warum sollte es 0 oder 1 anstelle einer anderen Zahl zurückgeben? Laut Hilfe gibtMathRand() eine pseudozufällige Ganzzahl zwischen 0 und 32767 zurück
 
hoz:

Und warum sollte es 0 oder 1 anstelle einer anderen Zahl zurückgeben? Schließlich gibtMathRand() eine pseudozufällige Ganzzahl im Bereich von 0 bis 32767 zurück.

Dies ist der Rest der Division! Schauen Sie in die Rechenschritte und in Ihren Drucker!

Legen Sie sie ein, und Sie werden nur zwei Ergebnisse sehen, die sich abwechseln:

  int x =MathRand() % 2;
  Print("x =",x);
 
Grüße an alle! Ich möchte wissen, wie man den Expert Advisor stoppt, wenn die Bedingungen für den Markteintritt erfüllt sind, beginnt er in die Logdatei zu schreiben "Order triggered!" und tut dies mehrere Dutzend Mal pro Minute, als Ergebnis wird die Logdatei kosmisch riesig. Wie kann ich dafür sorgen, dass nur einmal geschrieben wird, und nicht bevor die Position geschlossen wird, denn das kann ein paar Stunden dauern...
 
Allis:
Grüße an alle! Ich möchte wissen, wie der Expert Advisor zu stoppen, wenn die Bedingungen für den Eintritt in den Markt erfüllt sind, beginnt es in der Log-Datei zu schreiben "Order triggered!" und tut es mehrere Dutzend Mal pro Minute, als Ergebnis der Log-Datei wird kosmisch riesig. Wie schaffe ich es, dass nur ein einziges Mal geschrieben wird, und zwar nicht vor dem Schließen der Position, denn das kann ein paar Stunden dauern...
Hallo, Allis! Druck sollte vorgeschrieben werden, wo es keine Lesung durch Zecken gibt! Ich setze in den Druck, wenn es einen Fehler gibt, und wenn es geöffnet wird, und so wird in der Zeitschrift, die geöffnet wird, und nur einmal geschrieben werden!