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

 
Dimka-novitsek:
Ich kann keine Schleife organisieren, X und Y sind immer gleich 0.

Entrümpeln Sie zunächst den Müll in Ihrem Kopf.

Gestalten Sie Ihren Code schön und strukturiert.

Und seien Sie nicht gierig nach Kommentaren.

 

Ja, natürlich.

Ich wähle zunächst Aufträge mit der gewünschten magischen Zahl und für dieses Währungspaar aus. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Dann die Schleife for( i=OrdersTotal();i==0;i--), in der ich die Aufträge wie folgt auswähle OrderSelect(i,SELECT_BY_POS ); und dann zähle, wie viele Aufträge als OP_SELLSTOP

Wenn es keine Aufträge gibt, dann eröffnen wir einen Auftrag der Auftragsart, die es nicht gibt. Die X-Variable in der oberen Schleife und die Y-Variable in der unteren Schleife werden verwendet, um die Aufträge des erforderlichen Typs zu zählen. Beide Schleifen sind in Struktur und Zweck identisch.

Ich habe schon mit Erklärungen geschrieben, aber hier kam Papa, rief an, brachte Milch, Tee und Halva, und ich habe keine Nachricht geschickt, ich ging pinkeln, und mein Vater löschte die nicht gesendete Nachricht, sagte, aber was, du könntest in einem anderen Suchmaschinenfenster schreiben? Ich habe mich gefragt, was Brennnesselpaste ist. Ich bin ein wenig erschrocken und habe sie fast ohne Erklärung abgeschickt.

Nun, X und Y sind immer 0. Die for-Schleife muss nicht funktionieren. Ich verstehe überhaupt nicht, was daran nicht funktionieren kann, denn es werden bei jedem Tick 2 Aufträge geöffnet.


 
Dimka-novitsek:

Ja, natürlich.

Ich wähle zunächst Aufträge mit der gewünschten magischen Zahl und für dieses Währungspaar aus. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Dann die Schleife for( i=OrdersTotal();i==0;i--) in der ich die Aufträge wie folgt auswähle OrderSelect(i,SELECT_BY_POS ); und dann zähle wie viele Aufträge als OP_SELLSTOP

Wenn es keine Aufträge gibt, dann eröffnen wir einen Auftrag der Auftragsart, die es nicht gibt. Die X-Variable in der oberen Schleife und die Y-Variable in der unteren Schleife werden verwendet, um die Aufträge des erforderlichen Typs zu zählen. Beide Schleifen sind in Struktur und Zweck identisch.

Ich habe schon mit Erklärungen geschrieben, aber hier kam Papa, rief an, brachte Milch, Tee und Halva, und ich habe keine Nachricht geschickt, ich ging pinkeln, und mein Vater löschte die nicht gesendete Nachricht, sagte, aber was, du könntest in einem anderen Suchmaschinenfenster schreiben? Ich habe mich gefragt, was Brennnesselpaste ist. Ich bin ein wenig erschrocken und habe sie fast ohne Erklärung abgeschickt.

Nun, X und Y sind immer 0. Die for-Schleife muss nicht funktionieren. Kurz gesagt, ich verstehe überhaupt nicht, was dort nicht funktionieren könnte, es ist verursacht Aufträge zu öffnen 2 auf jedem Tick.


Das ist genau richtig, die for-Schleifen tun nicht das, was Sie brauchen.

Sie haben folgendes: for( i=BestellungenGesamt();i==0;i--)

1) Wenn es 0 Aufträge gibt, wird die Schleife 1 Mal ausgeführt. In diesem Fall wird das Unbekannte ausgewählt und das Unbekannte mit ihm gemacht =)

2) Wenn es mehr als 0 Aufträge gibt, wird die Schleife überhaupt nicht gestartet, da die Bedingung "i==0" nicht erfüllt ist.

 
Ich danke Ihnen!!! Ich werde den Hinweis gleich noch einmal lesen!
 
Ja! Danke!!!
 
Weißt du, ich kann es nicht richtig machen, alles ist gleich.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
 for ( i=OrdersTotal();i>0;i--){Alert ("i", i); OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+-------------------------------------------
In der Hilfe heißt es

Ausdruck2 ist eine Überprüfung der Schleifenendbedingung. Wenn er wahr ist, wird der Operator für den Körper der for-Schleife ausgeführt.

usw. Ich habe alles korrigiert und nichts hat sich geändert... ich habe auch versucht, i=5 statt i=OrdersTotal() zu setzen, nichts hat sich geändert, die Schleife funktioniert nicht.
 
Dimka-novitsek:
Der Hilfetext sagt

Ausdruck2 ist eine Überprüfung der Schleifenendbedingung. Wenn er wahr ist, wird der Operator für den Körper der for-Schleife ausgeführt.

usw. Ich habe alles korrigiert und nichts hat sich geändert... ich habe auch versucht, i=5 statt i=OrdersTotal() zu schreiben, nichts hat sich geändert, die Schleife funktioniert nicht.

Richtig, die Schleife kommt nicht in die Schleife.

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);

Sie haben geschrieben: "Wenn das Auftragssymbol (welcher Auftrag? Es gibt viele davon... oder gar keinen) gleich dem aktuellen Auftrag ist und seine Magie (welcher Auftrag?) gleich 1000 ist, dann führen Sie die Schleife aus".

und Sie müssen: "eine Schleife starten. Darin: 1) wählen Sie einen Auftrag aus. 2) und wenn Symbol =... und Magie =1000, dann X++;"

 

Einige DCs in echten Konten weisen den Symbolnamen alle möglichen Präfixe wie "." oder "FXF" zu.

Wie kann ich diese Präfixe verwenden?

Ich habe es so gemacht:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -funktioniert nicht

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -auch das funktioniert so nicht

als Ergebnis erhalte ich nur FXF anstelle von AUDCADFXF.

Können Sie mir sagen, wie ich das umsetzen kann?
 
pusheax:

Einige DCs in echten Konten weisen den Symbolnamen alle möglichen Präfixe wie "." oder "FXF" zu.

Wie kann ich diese Präfixe verwenden?

Ich habe dies getan:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -funktioniert nicht

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -auch das funktioniert so nicht

als Ergebnis erhalte ich nur FXF anstelle von AUDCADFXF.

Können Sie mir sagen, wie ich das umsetzen kann?

Nun, so funktioniert es im laufenden Betrieb:

#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD", "EURUSD"};

int init()
{
   for (int i = 0; i < ArraySize(SymbolsTrade); i++)
      SymbolsTrade[i] = SymbolsTrade[i] + DEF_SPEC;
 

Verstanden, ich werde es tun...

Außerdem funktioniert die Bedingung nicht.

OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}Alert ("Y", Y);}