Fehler, Irrtümer, Fragen - Seite 2531

 
Aleksey Vyazmikin:

Es ist schade, dass wir uns nicht einmal getraut haben, an den Tests teilzunehmen. Das Thema ist meiner Meinung nach interessant, da sich herausstellt, dass verschiedene Prozessoren verschiedene Aufgaben unterschiedlich erledigen, aber es gibt noch nicht genügend Statistiken.

Mein Raritätenprozessor befindet sich nur noch in meinem Besitz und in einem Museum, er ist für kaum jemanden von Interesse.

 
Aleksey Vyazmikin:

Es ist schade, dass Sie sich nicht einmal getraut haben, an den Tests teilzunehmen.

Wollte am ersten Tag einen Test durchführen, aber der Thread ist auf mehrere Seiten angewachsen, einige Fehler in der ersten Version des Testcodes ... habe nicht weiter gelesen, meine eigenen Interessen

Ich denke, ich brauche ein klares Handbuch (mit Bildern) und ein Minimum an Überlegung, was ich für den Benutzer tun kann, dann kann die Benutzeraktivität erscheinen

 
Igor Makanu:

Ich wollte den Test am ersten Tag durchführen, aber der Thread wuchs auf mehrere Seiten an, einige Fehler mit der ersten Version des Testcodes... Ich wollte nicht weiter lesen, sondern interessierte mich für meine eigenen Interessen

Ich denke, ich brauche eine klare Anleitung (mit Bildern) und ein Minimum an Überlegungen, was ich für den Benutzer tun kann, dann kann die Benutzeraktivität erscheinen

Und das Forum selbst ist sehr unbequem für so etwas, wir brauchen die Möglichkeit für den Autor des Themas, den ersten Beitrag am Ende eines jeden Zeitraums zu bearbeiten, wo alle notwendigen, relevanten Informationen zu finden sind, anstatt in der Masse der Nachrichten zu suchen. In diesem Format ist es nur ein Thread für Flubbing.

 

Ich habe eine Frage.

Ich muss einen Zeiger auf ein Array vom Typ double[] (üblich, Indikator) speichern, damit es innerhalb des Programms referenziert werden kann.

Die Standardentwickler schlagen vor, entweder einen Verweis auf dieses Array in der gesamten Funktionshierarchie zu übergeben und damit die Eingabeparameter zu überfrachten, wo dies absolut unnötig ist, oder das gesamte Array beijedem Tick in sich selbst zu kopieren und dann einen Verweis auf sein internes Array zu verwenden, das übergeben und gespeichert und innerhalb der Funktionshierarchie verwendet werden kann.

Beide Lösungen scheinen mir sehr hässlich zu sein. Die Übergabe eines Verweises durch den gesamten Aufrufbaum ist bereits hässlich, und wenn man bedenkt, dass wir nicht wissen, an welchem Punkt wir auf das Array zugreifen müssen, wird es wirklich dumm.

Das Kopieren des gesamten Arrays bei jedem Tick, wenn es eine Quelle gibt, ist auch etwas umständlich, und vor allem verliert es an Produktivität.

Ist jemand auf dieses Problem gestoßen? Wie lässt sich diese dumme Einschränkung umgehen?

Ich erinnere mich, dassfxsaber einmal, ich glaube, eine Funktion zum Kopieren von Adressen mit Hilfe einer schamanischen Aktion vorgeschlagen hat, aber ich kann sie nicht mehr finden.

Wer kann was vorschlagen?

 
Vict:

Mein Raritätenprozessor befindet sich nur in meinem Besitz und in einem Museum, er ist kaum für jemanden interessant.

Es ist immer interessant, den Fortschritt zu bewerten.


Igor Makanu:

Ich wollte den Test am ersten Tag durchführen, aber der Thread ist auf mehrere Seiten angewachsen, einige Fehler mit der ersten Version des Testcodes... Ich habe nicht weiter gelesen und war mit meinen eigenen Interessen beschäftigt

Ich denke, ich brauche ein klares Handbuch (mit Bildern) und ein Minimum an Überlegung, was ich für den Benutzer tun kann, dann kann die Benutzeraktivität erscheinen

Dort sollte es keine Fehler geben, die anderen laufen einwandfrei. Jetzt gibt es einen Screenshot, der zeigt, wie der Strategietester eingerichtet werden sollte.

Ich hätte nicht gedacht, dass es so schwierig sein würde, den Optimierer einzurichten... Was da jetzt nicht klar ist - ich gebe Ihnen einen Hinweis.


Sieg:

Und das Forum selbst ist sehr unbequem für so etwas, wir brauchen die Möglichkeit für den Autor des Themas, den ersten Beitrag am Ende eines jeden Zeitraums zu bearbeiten, wo alle notwendigen, relevanten Informationen zu finden sind, anstatt in der Masse der Beiträge zu suchen. In diesem Format ist es nur ein Thread für Flubbing.

Wir haben kein weiteres Forum, ich aktualisiere die Ergebnisse regelmäßig, wenn es Informationen gibt - es ist nicht schwer, sie zu finden.

 
Georgiy Merts:

Ich habe eine Frage.

Ich muss einen Zeiger auf ein Array vom Typ double[] (üblich, Indikator) speichern, damit es innerhalb des Programms referenziert werden kann.

Die Standardentwickler schlagen vor, entweder einen Verweis auf dieses Array in der gesamten Funktionshierarchie zu übergeben und damit die Eingabeparameter zu überfrachten, wo dies absolut unnötig ist, oder das gesamte Array beijedem Tick in sich selbst zu kopieren und dann einen Verweis auf sein internes Array zu verwenden, das übergeben und gespeichert und innerhalb der Funktionshierarchie verwendet werden kann.

Beide Lösungen scheinen mir sehr hässlich zu sein. Die Übergabe eines Verweises durch den gesamten Aufrufbaum ist bereits hässlich, und wenn man bedenkt, dass wir nicht wissen, an welchem Punkt wir auf das Array zugreifen müssen, wird es wirklich dumm.

Das Kopieren des gesamten Arrays bei jedem Tick, wenn es eine Quelle gibt, ist auch etwas umständlich, und vor allem verliert es an Produktivität.

Ist jemand auf dieses Problem gestoßen? Wie lässt sich diese dumme Einschränkung umgehen?

Ich erinnere mich, dassfxsaber einmal, ich glaube, eine Funktion zum Kopieren von Adressen mit Hilfe einer schamanischen Aktion vorgeschlagen hat, aber ich kann sie nicht mehr finden.

Wer kann was vorschlagen?

Wenn wir über mql5 sprechen, könnten wir den Indikator in eine Klasse verpacken und, wenn nötig, ihn ziehen, und in dieser Klasse organisieren wir das Kopieren und Speichern der notwendigen Daten in das benötigte ngbin und steuern seine einzelne Aktualisierung bei jedem Tick. Ich mache es so.
 
Vladimir Simakov:
Wenn es sich um mql5 handelt, können wir alternativ den Indikator in eine Klasse umwandeln und ihn, falls erforderlich, abrufen und für die Speicherung und das Kopieren der erforderlichen Daten in das benötigte ngbin und die Steuerung seiner einzelnen Aktualisierung bei jedem Tick verwenden. Ich mache es so.

Das ist es, was ich normalerweise selbst tue...

Aber es funktioniert nicht mit Indikatorpuffern. Oder habe ich etwas übersehen und es ist irgendwie machbar?

 
Georgiy Merts:

Aber bei Indikatorpuffern bleibt die Umhüllung bestehen.

Das war schon immer so.
 
Georgiy Merts:

Bei den Indikatorpuffern wird die Umhüllung jedoch nicht durchgeführt. Oder habe ich etwas übersehen, kann man das irgendwie machen?

alles funktioniert, aber Arrays, die als Indikatorpuffer dienen sollen, sollten mit dem öffentlichen Modifikator

Ich habe einen HMA-Indikator für MQL4 erstellt - 4 Indikatoren in einem Unterfenster:

CHMA *hma[4];
int OnInit()
  {
//--- indicator buffers mapping
   int i=0;
   hma[0] = new CHMA(4,PeriodInd1,Method1,Price1,Shift1);
   hma[1] = new CHMA(3,PeriodInd2,Method2,Price2,Shift2);
   hma[2] = new CHMA(2,PeriodInd3,Method3,Price3,Shift3);
   hma[3] = new CHMA(1,PeriodInd4,Method4,Price4,Shift4);

   IndicatorBuffers(16);
   IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,5.0);
   IndicatorSetInteger(INDICATOR_HEIGHT,IndHeight);
   while(i<8)       { SetIndexBuffer(i,hma[int(i/2)].Uptrend); SetIndexBuffer(i+1,hma[int(i/2)].Dntrend); i+=2; 			}
   for(i=0;i<4;i++) { SetIndexBuffer(i+8,hma[i].ExtMapBuffer); SetIndexBuffer(i+12,hma[i].vect); 					}
   for(i=0;i<8;i++) { SetIndexStyle(i,DRAW_ARROW,EMPTY,ArrowWidth, i%2==0 ? ArrowColor1 : ArrowColor2); SetIndexArrow(i,ArrowCode); 	}
   for(i=8;i<17;i++){ SetIndexStyle(i,DRAW_NONE);											}
   IndicatorShortName("");
   IndicatorDigits(0);
//---
   return(INIT_SUCCEEDED);
  }

und die Klasse selbst, in die der Körper des alten Indikators einfach kopiert wurde:

class CHMA
  {
private:
   int               period_,shift_,p,level_;
   ENUM_APPLIED_PRICE price_;
   ENUM_MA_METHOD    method_;
   double            GetWMA(int x,int per){ return(iMA(NULL,0,per,0,method_,price_,x+shift_)); }
public:
   double            ExtMapBuffer[],vect[],Uptrend[],Dntrend[];
                     CHMA(int level,int period,ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int shift);
   void              calcind(int lim,int prevcalculated);
   int               lastvalue();
  };

Die gelbe Farbe ist der alte Indikatorpuffer, ich wollte den Code des alten Indikators überhaupt nicht ändern, ich habe ihn einfach in die Klasse kopiert, es hat mich etwas weniger als eine Stunde gekostet

 
TheXpert:
immer getan.

Wie meinen Sie das? Sie können ein Klassenmitglied als Indikator-Array deklarieren.

Ich werde es jetzt überprüfen.

Hmmm... Ganz genau...

Nun denn - alles ist viel einfacher, und die Frage ist problemlos gelöst - wir deklarieren die Klassenmitglieder als Indikator-Arrays und übergeben einen Zeiger auf eben diese Klasse, um sie sich zu merken. Die Lösung ist natürlich nicht sehr schön, aber in Ermangelung von Zeigern auf das Array ist es in Ordnung.