[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 419

 
melnikas:

Ist mein Fall so schwierig?

double ExtVolumesBuffer[];

Sie haben Recht, was den Standort betrifft. Sie sollten die Größe des Arrays angeben, bevor Sie es verwenden. Oder machen Sie einen anderen Puffer daraus

 
//+------------------------------------------------------------------+
int deinit()
  {    
  return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
  f1(); //Как сделать, что-бы после вызова функции, программа могла остановиться?
  Alert("Есть сигнал"); // И до этого места работа программы бы не дошла
  return(0);
  }
//+------------------------------------------------------------------+  
  int f1()
    {
    return(f2());
    }
//+------------------------------------------------------------------+    
  int f2()
    {  
    return(deinit()); //Тут, по задумке, нужно остановить работу всей программы
    }
//+------------------------------------------------------------------+  
Oder kann der Betrieb des Programms durch eine aufgerufene Funktion nicht gestoppt werden? (Beispielcode, der im Indikator zu verwenden ist)
 
fore-x:
Oder kann das Programm bei einer aufgerufenen Funktion nicht gestoppt werden? (Beispielcode, der im Indikator zu verwenden ist)
return(deinit());

Was meinen Sie mit Stopp? den EA/Indikator aus dem Diagramm entfernen?


über deinit():

der Aufruf von deinit führt nicht zur Deaktivierung des Indikators/Indikators, sondern die Deaktivierung führt zum Aufruf von deinit

 
ilunga:

Was meinen Sie mit Stopp? den EA/Indikator aus dem Diagramm entfernen?


über deinit():

nicht der Aufruf von deinit bewirkt, dass der Indikator/Experte deaktiviert wird, sondern die Deaktivierung bewirkt, dass deinit aufgerufen wird

Stop bedeutet, dass die Ausführung der Startfunktion - von der aufgerufenen Funktion aus - gestoppt wird. Wie return(0).

Über deinit bin ich mir im Klaren, deshalb weiß ich auch nicht, wie ich dieses Rätsel lösen soll. Offensichtlich kann man das so nicht machen.

 
fore-x:

Stop bedeutet, dass die Ausführung der Startfunktion - von der aufgerufenen Funktion aus - gestoppt wird. Wie return(0).

Über deinit, ich weiß, deshalb weiß ich auch nicht, wie ich dieses Rätsel lösen soll. Offensichtlich kann man das so nicht machen.

Was hindert Sie dann daran, mit dieser Funktion (-1) oder etwas anderes zurückzugeben und diese Funktion in start() mit einer Prüfung aufzurufen? zum Beispiel so:

int start()
  {
  if (f1() == -1) return (0);
  Alert("Есть сигнал"); // И до этого места работа программы бы не дошла
  return(0);
  }
//+------------------------------------------------------------------+  
  int f1()
    {
if (все плохо) return (-1); else return(0);
    }
 
ilunga:

Was hindert Sie dann daran, mit dieser Funktion (-1) oder etwas anderes zurückzugeben und diese Funktion in start() mit einer Prüfung aufzurufen? zum Beispiel so:

//+------------------------------------------------------------------+
int start()
  {
  if(f1() < 0) return(0);
  Alert("Есть сигнал"); // И до этого места работа программы бы не дошла
  return(0);
  }
//+------------------------------------------------------------------+  
  int f1()
    {
    return(f2());
    }
//+------------------------------------------------------------------+    
  int f2()
    {  
    return(-1); //Тут, по задумке, нужно остановить работу всей программы
    }
//+------------------------------------------------------------------+  
Ich verstehe Sie, wollte nur unnötige Bewegungen im Code vermeiden, klargestellt. Danke für das Beispiel!
 
ilunga:

Sie haben Recht, was den Standort betrifft. Sie sollten die Größe des Arrays angeben, bevor Sie es verwenden. Oder machen Sie einen anderen Puffer daraus

Herzlichen Dank!
 


dkfl.zrjdktdbx 09.12.2011 16:56

Guten Abend, ich bin darauf gestoßen, dass der Handelsroboter die Positionen nicht schließt, etwa einmal in 50, wenn er einen Gewinn erreicht. Dann muss er alles schließen, auch die ausstehenden Aufträge, und alles neu einrichten. Das Nicht-Schließen führt zu Verwirrung bei den Aufträgen und zu einem Rückstand.


Stellen Sie sich also vor, es stellt sich manchmal heraus, dass eine Order zum Take-Profit geschlossen wurde, Clowes Price - Order-Schlusskurs - ist gleich Null!!!!!

Siehe die fünfte Zeile im Screenshot unten, es ist die fünfte Zeile, der Auftrag wurde bei Take Profit geschlossen. Und in der neunten Zeile von unten ist der Schlusskurs des Auftrags gleich null!!!!!

Es scheint, dass der Code nicht besonders kompliziert ist... Ich zeige es Ihnen gleich.

Wenn ich eine Bestellung aufgebe, speichere ich die Zeit im Fenster wremjapomnim. Sobald eine Bestellung bei currentprofit geschlossen wird, lösche ich alle Bestellungen und erinnere mich wieder an die Zeit in der wremjapomnim pyrimen und setzen sie.

for ( i=OrdersHistoryTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
Alert( "wremjapomnim " ,wremjapomnim, "  OrderCloseTime(        )   ",  OrderCloseTime( ),  " ",i , " OrderTakeProfit( ) " ,OrderTakeProfit( ),
  " OrderClosePrice(    )  ",OrderClosePrice(   ) );
if ( OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<2*Point)
   &&wremjapomnim<OrderCloseTime(       )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)>-2*Point)&&wremjapomnim<OrderCloseTime(       )){C=0;A=1 ;  Alert("C",C,"A",A);
   for ( int ii=OrdersTotal();ii>0;ii--){ OrderSelect(ii-1,SELECT_BY_POS );
   if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()){ 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); stsBUY=0;stsSELL=0;
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }     }              }
   
                                                      } 
 
Der Alarm befindet sich in der zweiten und dritten Zeile des Codes und schreibt alles in das Protokoll, einschließlich der Tatsache, dassOrderClosePrice( ) der Order 49 gleich Null ist.
 

Sagen Sie mir, wie ich die Bildung eines Fraktals im EA verfolgen kann. Ich muss einen Auftrag nach der Bildung eines neuen Fraktals eröffnen. Ich weiß nicht, wie dieser Indikator funktioniert; er hat eine Art obere Linie und eine Art untere Linie.

Wenn zum Beispiel ein Fraktal gebildet wird und der Kurs dieses Minimum durchbricht, wird das Fraktal dann neu gezeichnet oder erhalte ich nur ein weiteres Fraktal?

 
Hallo, könnten Sie mir bitte sagen, wie ich den Tiefst- und Höchststand der letzten Kerze finden kann, zum Beispiel