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

 
Top2n:
Das verstehe ich nicht.

Lernen Sie die Flaggen kennen.
 
welche Länder) Bitte schreiben Sie auf, um welche Flaggen es sich handelt. Was sind die Schlüssel zur Eingabe in die Suchmaschine und lesen Sie sie.
 
Wenn Sie "false true" meinen, verstehe ich nicht, wie Sie jeweils nur einen Auftrag öffnen können.
 
Können Sie mir sagen, wie ein EA ein Raster von Aufträgen öffnet? Ich habe eine Funktion geschrieben, die den Auftrag mit dem höchsten und dem niedrigsten Preis ermittelt. Ich brauche aber auch Informationen über die zweite Bestellung mit dem niedrigsten oder höchsten Preis.
 
Top2n:
Wenn Sie falsch wahr meinen, dann verstehe ich nicht, wie es möglich ist, genau einen Auftrag zu eröffnen.
Warum wird nicht geprüft, ob es bereits eine offene Position der Art gibt, die durch das Signal geöffnet werden soll?
Wenn sie bereits existiert, dann öffnen Sie sie nicht.

Wenn es keine Position dieser Art auf dem Markt gibt, dann eröffnen Sie sie.

Zusammen mit dieser Prüfung können Sie auch alle anderen Bedingungen überprüfen. Zum Beispiel: Wenn es bereits eine solche Position gibt, aber eine bestimmte Zeit nach ihrer Eröffnung verstrichen ist, kann eine weitere Position eröffnet werden... usw. usw. ...

 
DimaMA:
Können Sie mir sagen, wie ein EA ein Raster von Aufträgen öffnet? Ich habe eine Funktion geschrieben, die den Auftrag mit dem höchsten und dem niedrigsten Preis ermittelt. Aber ich brauche mehr Informationen über die zweite Bestellung mit dem niedrigsten Preis oder dem höchsten. Hier im Allgemeinen die 2. und nicht die letzte. sagen Sie mir die Funktion.

Gehen Sie alle Aufträge durch und speichern Sie sie in einem zweidimensionalen Array. Erfassen Sie in der ersten Dimension des Arrays den Zeitpunkt, zu dem die Bestellung aufgegeben wurde, und in der zweiten Dimension das Ticket. Sortiert das Array nach dem Platzierungsdatum (nach der ersten Dimension) in absteigender Reihenfolge. Das zweite Element des Arrays in der ersten Dimension enthält das Datum der Installation der vorletzten Bestellung (die zweite vom Ende), und die zweite Dimension enthält das Ticket der notwendigen Bestellung. Sie wählen die Bestellung über dieses Ticket aus und... Sie können damit machen, was Sie wollen.


Ich habe einmal eine Funktion zur Berechnung des Breakeven für die N-te Anzahl der letzten Positionen für einen benutzerdefinierten EA geschrieben. Die Berechnung sollte für die letzten mehreren Positionen durchgeführt werden, beginnend mit der vorletzten Position. Sie können sich ansehen, wie es umgesetzt wird, und etwas daraus mitnehmen:

//+----------------------------------------------------------------------------+
// Уровень безубытка по символу для N последних позиций, начиная с предпоследней
double LevelPreWLforNpos(int op, int mn1, int mn2, int num) { 
   double lots=0;
   double sum=0;
   int n=0;
   int mass[1][2];
   ArrayInitialize(mass,0);
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()!=op)    continue;
         if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
            n++;
            if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
            mass[n-1][0]=OrderOpenTime();
            mass[n-1][1]=OrderTicket();
            }
         }
      }
   ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
   if (ArrayRange(mass,0)>num+1)  ArrayResize(mass,num+1);
   for (i=1; i<ArrayRange(mass,0); i++) {
      if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
         if (OrderCloseTime()==0) {
            if (OrderType()==OP_BUY) {
               lots+=OrderLots();
               sum+=OrderLots()*OrderOpenPrice();
               }
            if (OrderType()==OP_SELL) {
               lots-=OrderLots();
               sum-=OrderLots()*OrderOpenPrice();
               }
            }
         }
      }   
   double price=0;
   if (lots!=0) price=sum/lots;  
   return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
 
Top2n:
Wenn Sie "false true" meinen, verstehe ich nicht, wie Sie jeweils nur einen Auftrag öffnen können.


Ja, das ist es, was ich meine. Sehen Sie sich die Anleitung hier an. Sie werden einige weitere Bedingungen haben, wie Sie schreiben: "Achtung Frage!) Und wie man es einmal für (sig1) öffnen, kann es so sein, sig1-open BAY, der nächste Befehl, sig0-admit Einbeziehung. trall (es spielt keine Rolle), der nächste Befehl wieder, sig1-open zweiten BAY." - ist es nicht viele Male? Es scheint, dass Sie es nicht brauchen ... Spielen Sie im Allgemeinen mit Flaggen.

 
Roman.:


Ja, ich meine sie. Sehen Sie sich die Anleitung hier an. Sie werden einige weitere Bedingungen haben, wie Sie schreiben: "Achtung Frage!) Und wie man es einmal für (sig1) öffnen, während es so sein kann sig1-open BAY, der nächste Befehl, sig0-admit on. trawl (es spielt keine Rolle), der nächste Befehl wieder, sig1-open zweiten BAY" - ist es nicht viele Male? Es scheint, dass Sie es nicht brauchen ... Spielen Sie im Allgemeinen mit Flaggen.

Hat Kimi zufälligerweise eine geeignete Funktion? Um das Programm nicht zu überladen. Es ist notwendig, dass er öffnete die Reihenfolge und zu beruhigen, aber "tausend" in einer Sekunde.
 
Top2n:
Hat Kim I.V. zufällig eine geeignete Funktion? Um das Programm nicht zu überladen. Ich möchte, dass er eine Bestellung öffnet und sich entspannt, weil er in einer Sekunde "tausend" öffnet.
Wählen Sie aus.
 

Ich möchte die Testergebnisse (Transaktionen) nach dem Testen in eine Datei schreiben

Ich füge die Funktion tofile () in den deinit()-Block ein (sie schreibt, nachdem die Arbeit beendet ist)

aber die Funktion selbst

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
funktioniert nicht, es wird nur die Kopfzeile aufgezeichnet
Grund der Beschwerde: