Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 126

 
hoz:

Ich wiederhole die Frage, die ich gestern gestellt habe. Ich möchte sie nicht in einem separaten Thread veröffentlichen. Sollte etwas unklar sein, werde ich alle Fragen beantworten.

Ich habe immer noch Schwierigkeiten, die erforderlichen Positionen zu schließen. Die Situation stellt sich wie folgt dar:

1. die Schließung von Positionen wird verfolgt.

2. Sobald die letzte Position an der Take Line geschlossen wurde... ...sollten alle offenen und schwebenden Positionen sofort geschlossen werden. Alles wird nach Losen sortiert geschlossen, d.h. große Lose auf einmal, dann kleinere. Dies ist nur dazu gedacht, Erfahrungen mit Aufträgen zu sammeln.

Die Umsetzung erfolgt wie folgt:

In start() bei jedem Tick:

Wir sind an der Schließung von Marktaufträgen interessiert, da die anhängigen Aufträge bei Bedarf gelöscht werden. Hier ist, was wir haben:

Aus irgendeinem Grund werden einige der Aufträge nicht abgeschlossen. Ich drucke einige Segmente aus, wenn ich sie sehe, verstehe ich nichts. Hier ist ein Beispiel:

Im Kommentar ist zu sehen, dass lastOOTHist = 01:30:00 ist, obwohl dies eigentlich nicht stimmt. Wenn wir lastOOTHist im Ergebnisfenster überprüfen, werden wir sehen, dass

ihre Schließzeiten sind unterschiedlich...

Was ist hier falsch?

Du verwechselst da was...

genau hier:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Drucken Sie die Werte aller Zellen im Array vor der Schleife aus - vielleicht ist da ein Hund drin?

 
Forexman77:
Können Sie mir sagen, wie ich die Größe des Spreads herausfinden kann, wenn ein Handel eröffnet wird, oder besser noch, wie ich sie im Protokoll angezeigt bekomme?

Unmittelbar nach der Eröffnung eines Geschäfts:

ticket=OrderSend(......);
if(ticket>=0)Print("ticket #",ticket," Spread=",doubleToStr(Ask-Bid,Digits)); 
Ihre Streuung steht im Protokoll.
 
Sepulca:

Unmittelbar nach der Eröffnung des Geschäfts:

Ihre Streuung steht im Protokoll.



Herzlichen Dank! Habe einen EA gemacht, auf dem Tester macht er Geld, auf der Demo ist er schlechter. In Wirklichkeit wird es wahrscheinlich noch schlimmer sein. Ich habe nicht bemerkt, wie oft ich mir das Bildmaterial angesehen habe.

Als ich den Spread visuell beobachtete, sah ich nicht mehr als drei Pips. Meine Idee ist, dass sie während der stärksten Bewegungen überhaupt nicht angezeigt wird oder sich vergrößert, so dass ich nicht genug Zeit habe, sie zu bemerken.

Alpari hat einen niedrigen Spread, aber ich nehme an, dass er sich bei starken Bewegungen deutlich erhöht. Bei DukasCopi ist der Spread sogar noch kleiner, aber die Provisionen sind groß, sie werden kleiner, wenn das Konto mehrere Millionen Dollar beträgt.

Haben Sie eine Untersuchung über die Spread-Größe durchgeführt, mit Bewegungen über 50 Pips pro Minute? Auf welchen Wert steigt der durchschnittliche Spread bei diesen Bewegungen?

Ich habe Alpari gefragt, sie haben nichts gesagt.

 
FAQ:


Wenn Sie eine Variable (Array) als Wert an eine Funktion übergeben, wird eine lokale Variable innerhalb der Funktion erstellt, die Sie im Header deklarieren: myFunct(int my_var). Auf diese Weise sind Änderungen dieser Variablen außerhalb der Funktion nicht zu sehen. Und im Falle eines Arrays wird der Compiler Sie daran erinnern.

Wenn Sie möchten, dass die Änderungen der Variablenwerte außerhalb der Funktion sichtbar sind, übergeben Sie die Variablen als Referenz: myFunct(int & my_var)


Aber ja. Schließlich wird ein Array global deklariert. Aber die Änderung innerhalb der Funktion ist lokal. Deshalb gibt es Funktionen, als Mikrostrukturen. Zur lokalen Umsetzung von Mikroproblemen.
 

Guten Gewinn für alle! Bitte sagen Sie mir, wie ich OrderOpenPrice() dazu bringen kann, den Preis mit fünf Dezimalstellen zurückzugeben. Wenn das Terminal 4 Ziffern zurückgibt, wenn es 5 sind, gibt es immer noch 4 zurück, wobei die fünfte abgerundet wird.

 
ivan180976:

Guten Gewinn für alle! Bitte sagen Sie mir, wie ich OrderOpenPrice() dazu bringen kann, den Preis mit fünf Dezimalstellen zurückzugeben. Wenn das Terminal 4 Ziffern zurückgibt, wenn es 5 sind, gibt es immer noch 4 zurück, wobei die fünfte abgerundet wird.


DoubleToStr(Zahl, Genauigkeit)
 

Forexman77:
Forexman77:



Herzlichen Dank! Ich habe einen EA entwickelt, der mit dem Tester Geld verdient, mit der Demo ist er noch schlechter. In der Realität wird sie wahrscheinlich noch schlechter abschneiden. Ich habe mir das Bildmaterial dreimal angesehen.

Als ich den Spread visuell beobachtete, sah ich nicht mehr als drei Pips. Meine Idee ist, dass sie während der stärksten Bewegungen überhaupt nicht angezeigt wird oder sich vergrößert, so dass ich nicht genug Zeit habe, sie zu bemerken.

Alpari hat einen niedrigen Spread, aber ich nehme an, dass er sich bei starken Bewegungen deutlich erhöht. Bei DukasCopi ist der Spread sogar noch niedriger, aber die Provisionen sind groß, sie werden kleiner, wenn das Konto mehrere Millionen Dollar beträgt.

Haben Sie eine Untersuchung über die Spread-Größe durchgeführt, mit Bewegungen über 50 Pips pro Minute? Auf welchen Wert steigt der durchschnittliche Spread bei diesen Bewegungen?

Ich habe bei Alpari nachgefragt, sie haben nichts gesagt.


Ich habe den Spread gerade am Freitag analysiert, übrigens nur auf Alpari:

Die dünnen gelben Linien stellen die maximale Spanne pro Balken dar (ich habe eine Minute verwendet). Fettes Rot - Mindestspanne pro Balken. Wie Sie sehen können, reicht der Spread tagsüber von 5 bis 14 Pips im fünfstelligen Bereich. Nach 21:00 Uhr Serverzeit sinkt der Spread jedoch nicht unter 10 Punkte, und am Ende des Tages steigt er im Allgemeinen auf 52 Punkte. Ich habe einen interessanten Moment vor der starken Preisänderung erwischt, der Spread steigt stark an:

 
artmedia70:

Es ist ein ziemliches Durcheinander...

genau dort:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Das dient nur der besseren Übersichtlichkeit. Wenn ich geschrieben habe, aber sonst, ja, das muss man nicht. Aber es wird mich auch nicht stören.

Es werden überhaupt keine Array-Werte ausgegeben:

artmedia70:

Den Wert aller Zellen eines Arrays vor der Schleife ausdrucken - vielleicht gräbt das Hündchen dort?



//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

Die Ausgabe ist überhaupt leer...

 
hoz:

Es werden überhaupt keine Array-Werte ausgegeben:


Es gibt überhaupt nichts aus...

Wie leer? Wird überhaupt nichts gedruckt, oder befinden sich in den Array-Zellen immer noch Nullen?
 

Warum erhöhen Sie i im Hauptteil der Schleife?

 for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;    // ??????????????????????????????????????
      }

und dies: i<=p, warum "oder gleich" ?