Fehler, Irrtümer, Fragen - Seite 367

 
Yedelkin:
Das Problem liegt höchstwahrscheinlich an etwas anderem. Ich habe genau die gleiche Array-Deklaration in OnInit() funktionierte gut und immer noch tut. Sie haben einen lateinischen Buchstaben m im Namen des Arrays ArrSybols ausgelassen. Vielleicht ist das ein Problem der Programmierer?

Man kann es übersehen, aber macht es einen Unterschied?

Und wenn ich es in nativer Sprache schreibe (was nicht verboten ist, wie ich es verstehe), sollte das ganze Terminal abstürzen?

Der Code funktioniert genau ohne solche Array-Deklaration, auch wenn Sie nur die Dimensionalität angeben, funktioniert alles.

//Вот так работает
string ArrSybols[10];

Die ursprüngliche Array-Deklaration sah folgendermaßen aus

//List of symbols for trade on the Championship 2010
string ArrSymbolsChampionship2010[10] = {"EURUSD","GBPUSD","USDJPY","USDCHF","USDCAD",
                                        "AUDUSD","EURJPY","EURCHF","GBPJPY","GBPCHF"};
 

Die Frage ist immer noch aktuell.

Ich habe es geschafft, den Indikator in einem separaten Fenster an OBJ_CHART anzuhängen, aber wenn ich die Größe des Indikatorfensters ändere, ist das nicht sehr schön, denn wenn die Höhe von OBJ_CHART 500 ist, dann ist die Höhe des Indikatorfensters auf maximal 493 gesetzt worden. Das Ergebnis ist ein hässliches Oberteil. Wie wird man sie wieder los?

Code:

   if(ObjectFind(0,"MW_chart")!=0)
     {
      ObjectCreate(0,"MW_chart",OBJ_CHART,0,time[0],close[0]);
      ObjectSetString(0,"MW_chart",OBJPROP_SYMBOL,_Symbol);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PERIOD,_Period);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,"MW_chart",OBJPROP_XSIZE,1000);

      ObjectSetInteger(0,"MW_chart",OBJPROP_DATE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PRICE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_SELECTABLE,1);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CHART_SCALE,2);
      ObjectSetInteger(0,"MW_chart",OBJPROP_YSIZE,500);
     }
   int h=iCCI(Symbol(),Period(),14,PRICE_TYPICAL);
   long id=ObjectGetInteger(0,"MW_chart",OBJPROP_CHART_ID);
   ChartIndicatorAdd(id,1,h);
   ChartSetInteger(id,CHART_HEIGHT_IN_PIXELS,1,493);
 
Interesting:

Vielleicht wurde es übersehen, aber macht es einen Unterschied?

Natürlich tut sie das. Ich muss es Ihnen nicht erklären :) Wenn ein Array mit einem Namen definiert ist, aber die Elemente dieses Arrays mit einem anderen Array-Namen aufgerufen werden, dann... :)

Wenn alles ohne manuelle Initialisierung des Arrays funktioniert, sollten Sie sich den Code ansehen, den Sie selbst verstehen. Das Fehlen einer expliziten Initialisierung des String-Arrays hindert das Client-Terminal nicht daran, dieses Array selbst zu initialisieren.

Ich wiederhole: ein solcher String funktionierte und funktioniert immer noch "nach bestem Wissen und Gewissen".

 
Yedelkin:

Natürlich tut sie das. Ich muss es Ihnen nicht erklären :) Wenn ein Array mit einem Namen deklariert wird, aber auf die Elemente dieses Arrays mit einem anderen Array-Namen zugegriffen wird, dann ... :)

Wenn alles ohne manuelle Initialisierung des Arrays funktioniert, sollten Sie sich den Code ansehen, den Sie selbst verstehen. Das Fehlen einer expliziten Initialisierung des String-Arrays hindert das Client-Terminal nicht daran, dieses Array selbst zu initialisieren.

Ich wiederhole: ein solcher String funktionierte und funktioniert immer noch.

Nein, nein, das Problem liegt nicht im Namen, sondern darin, dass das Array bei der Deklaration mit einer Aufzählung gefüllt wird.

Es funktioniert gut mit allen Typen, außer mit Strings. Bei Zeichenketten stürzt wirklich jedes Programm ab (ob Experte oder Skript ist nicht wichtig).

Dies ist ein offensichtlicher Fehler, der an servicedesk geschrieben wurde.

Das funktioniert folgendermaßen:

// string a[2]={"a","b"};
long   b[2]={2,3};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  Print("Работает");   
  }
//+------------------------------------------------------------------+

aber wenn Sie die String-Array-Deklaration auskommentieren, funktioniert es nicht.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Renat:
Überprüfen Sie die maximale Anzahl der Balken im Fenster in den Einstellungen
Geändert von 100000 auf 1000000. Es hat geholfen, aber erst nach einem Neustart des Terminals (in der Hilfe steht etwas über die Auswirkungen von Änderungen nach dem Drücken von OK).
 

Renat, ein weiterer wilder Toffee, sind Sie sicher, dass Sie den Fehler gefunden haben?


 
Das Verkehrsproblem ist gelöst, aber die Sache ist die, dass wir die Serverkomponenten noch nicht in Liveupdate freigegeben haben. Bisher wurden die Updates für die Client-Terminals veröffentlicht, und die Server werden im nächsten Update enthalten sein. Sie sind noch nicht getestet worden.
 
Renat:
Das Verkehrsproblem ist gelöst, aber die Sache ist die, dass wir die Serverkomponenten noch nicht in Liveupdate freigegeben haben. Bisher wurden die Updates für die Client-Terminals veröffentlicht, und die Server werden im nächsten Update enthalten sein. Sie sind noch nicht getestet worden.
Ich verstehe. Ich danke Ihnen für Ihre Antwort. Ich für meinen Teil werde Sie ebenfalls auf dem Laufenden halten.
 

Der letzte Build (430) hängt sich beim Testen mit Forward Period und Custom Max auf (scheint im Moment des Wechsels zu Forward Testing zu sein). Zuerst habe ich es auf meinen Expert Advisor geschoben, aber dann habe ich den folgenden Code überprüft:

input int a1;
input int a2;
input int a3;
int OnInit(){return(0);}
void OnDeinit(const int reason){}
void OnTick(){}
double OnTester() {
   return(rand());
}

Ich habe Parameter zur Optimierung von 1 bis 1000, alle Ticks, USDCAD, M4 vom 01.01.2011 bis heute (mit Forward - beliebiger Zeitraum) eingestellt. Einfrieren. Deaktivierte Remote-Agenten - Ich habe das Terminal neu gestartet - es hängt auch. Die Vorwärtsperiode wurde entfernt - es funktioniert. Ob Custom Max daran schuld ist - ich habe es nicht überprüft. Vor diesem Build hat alles funktioniert.

 

Was bedeutet das?

2011.04.17 15:21:22 Tester tester agent fehlgeschlagen