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

 
Vinin:

Aber auch der Indikatorkopf muss bearbeitet werden. Alle Puffer sollten in der Lage sein, den Wert zu speichern

Und es wäre schön, die Geschichte zu berechnen, aber das ist natürlich Geschmackssache. Und um besser mit Objekten arbeiten zu können. Bei jedem Tick werden Objekte mit denselben Namen erstellt (oder es wird ein Fehler erzeugt).

Ich habe die Kopfzeile korrigiert.

mit einem Puffer:

     UP_1Buffer[0] = uitog1v;
     UP_2Buffer[0] = uitog2v;
     UP_3Buffer[0] = uitog3v;
     DOWN_1Buffer[0] = ditog1v;
     DOWN_2Buffer[0] = ditog2v;
     DOWN_3Buffer[0] = ditog3v;

Ich hab's.

Herzlichen Dank für die Hilfe.


Was Ihre Vorschläge betrifft, so würde ich sie gerne machen, aber ich kann sie leider nicht selbst machen.

 
artmedia70:

Versuchen Sie, das, was Sie hier geschrieben haben, in Worte zu fassen:

Persönlich fand ich Ihr Rätsel auf den ersten Blick: Wenn eins nicht gleich eins ist, dann schließen Sie die Bestellung...

Danach habe ich mir den Rest nicht mehr angesehen...

SZY und versuchen Sie nicht, denken Sie nicht einmal, dass es möglich ist, einen guten EA in einem Zyklus zu schreiben...

Hier ist die Idee:

Einstiegszeitpunkt: jederzeit, wenn keine offenen oder gar schwebenden Positionen vorhanden sind.

Der Roboter eröffnet 2 schwebende Positionen mit gleichem Abstand in Pips zum aktuellen Kurs (dies ist eine benutzerdefinierte Variable PriceDistance).

Die schwebenden Aufträge haben beide den gleichen TP, SL, TS (wie das Spiegelbild des aktuellen Preises).

Und beide für dieselbe Zeit (in der Perspektive der Variablen "TimeStop").

Alle....

In der Praxis: Die vorherigen Positionen werden geschlossen (entweder beide mit der Ablaufzeit, oder auf dem SL oder TP - es spielt keine Rolle), das Terminal wird freigegeben, sofort danach werden die gleichen Positionen mit den gleichen Parametern eröffnet, aber, ausgehend vom aktuellen Preis, in einem neuen Bereich. Weiter, je nach Zyklus.

Die Idee ist primitiv, 100% pluator, aber ich plane, in diese Richtung zu bewegen und verbinden sie mit anderen Signalen, zum Beispiel Volumes bei bestimmten Werten zu bestimmten Zeitrahmen....

Deshalb brauche ich die Software auf die Schnelle....

Also habe ich mir die Aufgabe gestellt, es zu schreiben...

 
Guten Abend! Hier wurde das einfachste Konstrukt geschrieben, um den verfügbaren Gewinn für jeden Tick zu berechnen. Nun, es funktioniert nicht! Ich habe ihn mir 10 Minuten lang angesehen und den Code mit den Augen gegessen. Ich sehe keinen Fehler. Hier ist der Code.
//----
        double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 
 
//----
Die magische Zahl ist richtig. Ich habe sie viermal überprüft. Die Halterungen, alles, was ich mir ansehen konnte, scheint zu stimmen. Vielleicht schreibe/vergleiche ich die falsche Reihenfolge? Ich habe mir die Referenz angesehen. Bitte helfen Sie mir! Ich kann es nicht ohne Sie tun! Können Sie mir sagen, was falsch sein könnte?
 
Und wissen Sie, getrennt funktionieren alle drei Bedingungen!!!
 double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderType( ) ==OP_SELL ){Alert ("i ", i ," OP_SELL ", Profit);}

if( OrderSymbol()==Symbol()){Alert ("i ", i ," Symbol() ", Profit ,Symbol(), OrderSymbol());}

if( OrderMagicNumber( )==2000  ) {Alert ("i ", i ," OrderMagicNumber( ) ", Profit , OrderMagicNumber( ));}



if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
Ich bin schockiert und verwirrt!!!
 
dkfl.zrjdktdbx:
Guten Abend! Ich habe eine einfache Konstruktion zur Berechnung des verfügbaren Gewinns für jeden Tick geschrieben. Nun, es funktioniert nicht! Ich habe sie 10 Minuten lang mit meinen Augen betrachtet. Ich kann den Fehler nicht erkennen. Der Code von Magik ist richtig, ich habe ihn viermal überprüft. Die Halterungen, alles, was ich mir vorstellen kann, alles scheint richtig zu sein. Vielleicht schreibe/vergleiche ich die falsche Reihenfolge? Ich habe mir die Referenz angesehen. Bitte helfen Sie mir! Ich kann es nicht ohne Sie tun! Können Sie mir sagen, woran das liegen könnte?


Es fehlen einige Klammern.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( ( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ) ||
      
( OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY ) ){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 

Dies scheint der Fall zu sein. Obwohl es besser ist, es einfach zu halten.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ 
   OrderSelect(i-1,SELECT_BY_POS );
   if(OrderSymbol()==Symbol()) {
      if( OrderMagicNumber( )==2000 && OrderType( ) ==OP_SELL )  Profit+=OrderProfit( );
      if( OrderMagicNumber( )==1000 && OrderType( ) ==OP_BUY  )  Profit+=OrderProfit( );
   }
   Alert ("i ", i ," Profit ", Profit);
}
 

Ich habe folgende Frage - in MT4: (2/3*9 == 2*9/3) ?

         Comment(
            "\n",
            "\n", "2/3*9        = ", 2/3*9,
            "\n", "2*9/3        = ", 2*9/3,
            "\n",
         "\n" );


Ich danke Ihnen!

 
chief2000:

Ich habe folgende Frage - in MT4: (2/3*9 == 2*9/3) ?


Danke!


Was soll das bringen?

Prüfen Sie es mit einem Taschenrechner - Sie werden es herausfinden.

Siehe die Dokumentation - wie Ausdrücke berechnet werden.

Sie sollten wenigstens ein Lehrbuch lesen...

"Es ist leicht zu erkennen, dass die Reihenfolge der Berechnung von Ausdrücken in einem Programm der Reihenfolge ähnlicher Berechnungen in der Mathematik entspricht, sich aber in der Art der Berechnung der Werte von Zwischenausdrücken unterscheidet, was das Endergebnis der Berechnungen erheblich beeinflusst. Insbesondere ist (im Gegensatz zu den in der Mathematik akzeptierten Regeln) die Reihenfolge der Operanden in einem Ausdruck von nicht geringer Bedeutung. Um dies zu zeigen, nehmen wir ein kleines Beispiel: Aufgabe 6: Berechnen Sie die Werte der Ausdrücke A/B*C und A*C/B für die ganzen Zahlen A, B und C.


Intuitiv wird erwartet, dass das Ergebnis der Berechnungen in beiden Fällen das gleiche ist. Dies gilt jedoch nur für reelle Zahlen. Bei der Berechnung der Werte von Ausdrücken, die aus ganzzahligen Operanden bestehen, ist das Zwischenergebnis sehr wichtig. In einem solchen Fall ist die Reihenfolge der Operanden von grundlegender Bedeutung:

int A = 3; // Значение целого типа
int B = 5; // Значение целого типа
int C = 6; // Значение целого типа
int Res_1 = A/B*C; // Результат 0 (ноль)
int Res_2 = A*C/B; // Результат 3 (три)

Verfolgen wir den Prozess der Berechnung des Ausdrucks A/B*C:

1. Zunächst wird (von links nach rechts) der Wert des Ausdrucks A/B berechnet. Nach den obigen Regeln wird der Wert des Ausdrucks (3/5) der ganzzahlige Wert 0 (Null) sein.

2. Berechnen Sie den Ausdruck 0*C (Null multipliziert mit C). Das Ergebnis ist der ganzzahlige Wert 0 (Null).

3. das Gesamtergebnis (Wert der Variablen Res_1) ist ein ganzzahliger Wert von 0 (Null).

Schauen wir uns nun an, wie sich die Ereignisse bei der Berechnung des Ausdrucks A*C/B entwickeln.

1. Berechnung des A*C. Der Wert dieses Ausdrucks ist die ganze Zahl 18 (3*6=18).

2. Berechnung des Ausdrucks 18/B. Die Antwort liegt auf der Hand: (18/5) nach Abzug der Nachkommastellen ist das Ergebnis eine ganze Zahl 3 (drei).

Das Gesamtergebnis (Wert von Res_2) ist die ganze Zahl 3 (drei).

Dieses Beispiel zeigt ein kleines Programmfragment, das die Werte von Variablen vom Typ Integer berechnet. Wenn wir diese Variablen durch Konstanten ersetzen, aber die gleichen Werte verwenden, ist das Endergebnis dasselbe. Bei der Berechnung von Ausdrücken, in denen ganze Zahlen verwendet werden, sollten Sie sehr vorsichtig mit dem Inhalt von Programmzeilen sein. Andernfalls kann es zu einem Fehler im Programm kommen, der später nur sehr schwer zu erkennen ist (insbesondere bei großen Programmen). Dieses Problem tritt nicht auf, wenn es sich um Berechnungen handelt, bei denen nur reelle Zahlen verwendet werden. Wenn Sie jedoch Operanden unterschiedlichen Typs in einem komplexen Ausdruck verwenden, kann das Endergebnis vollständig von einem zufällig erzeugten Fragment abhängen, das die Division von ganzen Zahlen enthält.

Das Konzept und die allgemeinen Eigenschaften von Operatoren werden im Abschnitt Operatoren erörtert, und das Kapitel Operatoren zeigt die Eigeneigenschaften der einzelnen Operatoren."

 
Ist FileFlush dasselbe wie das Speichern einer Datei?
 
Roman.:


Wo liegt das Problem?

Prüfen Sie es mit einem Taschenrechner - Sie werden es herausfinden.

Ich habe nachgesehen - sowohl Casio als auch der Microsoft-Taschenrechner sagen, dass 2/3*9=6 ist.


 
chief2000:

Überprüft - sowohl Casio als auch der Microsoft-Taschenrechner sagen 2/3*9=6.



Nun. Wo liegt das Problem?