Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 411

 
Leanid Aladzyeu:

Ich habe angefangen, Arrays zu studieren.

Ich habe eine Pro-Order-Funktion mit Arrays geschrieben, 3 Arrays = 0 Kauf, 1= Verkauf, 2= Summe der Kauf- und Verkaufstransaktionen.

Dann schrieb ich eine Bedingung zu kaufen, wenn ( die erste Bedingung & & array [0] == 0 )dann öffnen wir einen Kauf

und beim Verkauf, wenn ( die erste Bedingung && array [1]== 0) dann eröffnen wir eine Verkaufsposition.

Aber der Tester gibt einen Fehler aus und der Test bricht ab. Wo liegt das Problem? ( Fehler " array exit " )

Das bedeutet, dass der Index, den Sie ansprechen, außerhalb des Array-Layouts liegt. Zum Beispiel, wenn array[ 3 ]; können Sie nur Elemente von 0 bis 2 ansprechen. Überprüfen Sie Ihren Code.

Eine andere Möglichkeit ist, dass Sie das Array nicht partitioniert haben (mit ArrayResize()), sondern versuchen, auf einige seiner Elemente zuzugreifen.

 
Code...
void Oher(int Mag,string Symb, int &mas[2])
{
ArrayInitialize( mas,0);

int tip;
int ticket3 =-1;
  for (int pos=OrdersTotal()-1; pos>=0; pos--)
     {
     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Mag && OrderSymbol()==Symb && OrderTicket()!=ticket3)
          {
          ticket3=OrderTicket();
          tip=OrderType();
          
          switch(tip)
              {
              case 0:mas[0]++; mas [2]++;break;// 0 покупка
              case 1:mas[1]++; mas [2]++;break;// 1 продажа
              }
          }
          continue;
     }

}
Чудо код вставил ) 2 раз получилось за все время что я на сайте)
 
Leanid Aladzyeu:
Code...
Versuchen Sie, es selbst herauszufinden. Der Tester sollte angeben, in welcher Zeile und an welcher Stelle in der Zeile der Fehler aufgetreten ist.
 
Tapochun:
Versuchen Sie, es selbst herauszufinden. Der Tester sollte angeben, in welcher Zeile und an welcher Stelle in der Zeile der Fehler aufgetreten ist.

o_oops wusste nicht, dass das Terminal auch dort stochert, wo der Fehler ist, beim ersten Mal bin ich auf einen kritischen Fehler gestoßen.

   case 1:mas[1]++; mas [2]++;break;// 1 продажа

Es spuckt auf sie.

 
Fixiert. es waren insgesamt 2 Arrays und ich brauchte 3. in der Initialisierung des Arrays und in der Funktion machte die Zahl +1. und es funktionierte)
 

Bitte teilen Sie mir mit, wie ich überprüfen kann, wie der Indikator funktioniert.

Die Idee ist die folgende: Wenn der EA einen neuen Balken bildet, ruft er den Indikator auf, aber der Indikator hat in diesem Moment keine Daten und ich erhalte die Daten des vorherigen Balkens (er hatte keine Zeit zu berechnen).

Wie Sie dieses Problem vermeiden können. Außerdem ist im Strategy Tester alles in Ordnung. Bei der Demo geht es entweder gut oder gar nicht!

Das ist alles, es ist nicht relevant. Gelöst.

 

Hallo, ich habe ein Anfängerproblem...

Ich kann das System nicht dazu bringen, den letzten Bar-Close-Wert mit den Höchst- und Tiefstwerten eines bestimmten Zeitraums zu vergleichen, z. B.

die letzten 20 Takte. Was mache ich falsch?

extern int     MAGIC             = 90324752;
extern int     START_HOUR        = 7;
extern int     FINISH_HOUR       = 18;
extern int     TRADE_LIMIT       = 3;
extern int     SMMA_PERIOD       = 100;
extern int     BB_PERIOD         = 50;
extern double  BB_DEV            = 1;
extern double  LOT               = 1;
extern double  StopLoss          = 400;
extern double  TakeProfit        = 2000;

void OnTick()
{
static int    TICKET;

double SMMA                 = iMA (Symbol(),0,SMMA_PERIOD,0,MODE_SMMA,PRICE_CLOSE,0);
double BB_UP                = iBands(Symbol(),0,BB_PERIOD,BB_DEV,0,PRICE_CLOSE,MODE_UPPER,0);       

double HIGHEST              = High[iHighest(Symbol(),0,MODE_HIGH,20,0)];

if(Hour() >= START_HOUR && Hour() <= FINISH_HOUR && TRADE_COUNT < TRADE_LIMIT && POS_OPENED == FALSE && Seconds() >= 55)
if(Minute() == 29 || Minute() == 59)
{     
  if(Close[0] > SMMA && Close[0] > BB_UP && Close[0] >= HIGHEST)

  {
   TICKET = OrderSend(Symbol(),OP_BUY,LOT,Ask,0,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,MAGIC,0,Blue);
   if(TICKET < 0)
      {
         Alert("Order Send failed, error # ", GetLastError() );
      } 
  }
}
}


Überprüft mit Alert und aus irgendeinem unbekannten Grund Tester gibt den maximalen Wert aus der Berechnung von der allerletzten tick, aber es gibt diesen Wert

Sie entspricht der Anzahl der Ticks, so dass der Auftrag nicht eröffnet wird.


Das zweite Problem ist, wie meine EA warten, bis der nächste bar öffnet (30m Periode)? Wenn ich mit Kontrollpunkten testen alles in Ordnung ist, aber wenn ich Ticks verwenden,

dann öffnet sich mein Expert Advisor im selben Balken, direkt nachdem er mit einem Stop-Loss geschlossen wurde...


Und wie kann ich ein Geschäft abschließen, unabhängig davon, ob es ein Tick war oder nicht? z.B. bei einer Periode von 30m möchte ich den Auftrag 5 Sekunden vor Ende des Balkens (29.55, 59.55) schließen

Auf der Grundlage aller zu diesem Zeitpunkt vorliegenden Daten. In diesem Stadium besteht das Problem darin, dass, wenn ein Tick nicht innerhalb von 5 Sekunden auftritt, also kein

(Theoretisch ist das Blödsinn, aber in der Realität kann der nächste Tick aus irgendeinem Grund in einigen Kerzen erscheinen.

kann sich aus irgendeinem Grund in einigen Kerzen wiederfinden.


Vielen Dank im Voraus!
 

Hilfe bei den Kommentaren. Zu jedem Balken werden Kommentare erstellt. Bei jedem Häkchen möchte ich dem bestehenden Kommentar weiteren Text hinzufügen.

Ich rufe den Code auf:

void UserMarketComment( )

{

   string com=ChartGetString(0,CHART_COMMENT);  // Получаем текст существующего комментария

   string st="Целевой убыток="+DoubleToStr(-inpTargetLoss,2)+" "+AccountCurrency()+"  Текущ";

   if(AccountProfit()<0) st=st+"ий убыток=";

   else st=st+"ая прибыль=";

   st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Целевая прибыль="+DoubleToStr(inpTargetProfit,2)+" "+AccountCurrency();

   Comment(com+"",TimeToStr(TimeCurrent(),TIME_SECONDS),"    Spread = ",MarketInfo(Symbol(),MODE_SPREAD),

           "\n ",st);

  }

Fügt einen neuen Kommentar hinzu und bei jedem Häkchen wird eine neue Zeile eingefügt und der Text nach unten verschoben.

Wie kann ich die letzten Zeilen vor der Ausgabe löschen lassen?

 
ForTorg ZEVs:

Hilfe bei den Kommentaren. Zu jedem Balken werden Kommentare erstellt. Bei jedem Häkchen möchte ich dem bestehenden Kommentar weiteren Text hinzufügen.

Ich rufe den Code auf:

void UserMarketComment( )

{

   string com=ChartGetString(0,CHART_COMMENT);  // Получаем текст существующего комментария

   string st="Целевой убыток="+DoubleToStr(-inpTargetLoss,2)+" "+AccountCurrency()+"  Текущ";

   if(AccountProfit()<0) st=st+"ий убыток=";

   else st=st+"ая прибыль=";

   st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Целевая прибыль="+DoubleToStr(inpTargetProfit,2)+" "+AccountCurrency();

   Comment(com+"",TimeToStr(TimeCurrent(),TIME_SECONDS),"    Spread = ",MarketInfo(Symbol(),MODE_SPREAD),

           "\n ",st);

  }

Fügt einen neuen Kommentar hinzu und bei jedem Häkchen wird eine neue Zeile eingefügt und der Text gleitet nach unten.

Wie kann ich die letzten Zeilen vor der Ausgabe löschen lassen?

Es scheint mir, dass Sie nur Comment() vollständig ersetzen können

Wenn Sie also bei jedem Häkchen einen Teil des Kommentars ändern wollen, müssen Sie den Kommentar bei jedem Häkchen vollständig ändern.

 
ForTorg ZEVs:

Hilfe bei den Kommentaren. Zu jedem Balken werden Kommentare erstellt. Bei jedem Häkchen möchte ich dem bestehenden Kommentar weiteren Text hinzufügen.

Ich rufe den Code auf:

void UserMarketComment( )

{

   string com=ChartGetString(0,CHART_COMMENT);  // Получаем текст существующего комментария

   string st="Целевой убыток="+DoubleToStr(-inpTargetLoss,2)+" "+AccountCurrency()+"  Текущ";

   if(AccountProfit()<0) st=st+"ий убыток=";

   else st=st+"ая прибыль=";

   st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Целевая прибыль="+DoubleToStr(inpTargetProfit,2)+" "+AccountCurrency();

   Comment(com+"",TimeToStr(TimeCurrent(),TIME_SECONDS),"    Spread = ",MarketInfo(Symbol(),MODE_SPREAD),

           "\n ",st);

  }

Fügt einen neuen Kommentar hinzu und bei jedem Häkchen wird eine neue Zeile eingefügt und der Text gleitet nach unten.

Wie kann ich die letzten Zeilen vor der Ausgabe löschen lassen?

Sie haben also ein Steuerzeichen "\n" in Ihrem Kommentar - es ist ein Zeilenvorschubzeichen. Wenn Sie sie entfernen, gibt es nicht mehr mehrere Zeilen.
Grund der Beschwerde: