Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   struct Problem (http://www.expert-advisor.com/forum/showthread.php?t=6640)

AVT 23.04.20 22:51

struct Problem
 
Bin grade völlig verwirrt wie ich das unter einen Hut bringe und brauche einen Denk-Anstubser.
Situation:
Je nachdem, ob eine ATR, ADR oder der Mittelwert aus beiden benutzt werden soll, wird dieser Wert ausgerechnet:
Code:

...
if(UseADR)  ApairADTR[i]=ApairADR[i];
if(UseATR)  ApairADTR[i]=ApairATR[i];
if(UseADTR) ApairADTR[i]=(int)MathRound( ( iATR(Apairnames[i],PERIOD_D1,ATRperi,0)/APip[i]
                                          +ApairADR[i] )/2 );

Ich hatte zu Anfang 3 Structs definiert:
Code:

struct Werte
{
  int    SpairAtr;    //PairsATRvalue
  int    SpairAdr;    //PairsADRvalue
  int    SpairAdtr;    //PairsAverageOfATRandADR
}

Es gibt aber nur eine Spalte, die nachher den Wert in den Chart pinselt:
Code:

... in OnInit
// === put a placeholder for the ATR
CreatePairValue("pATRd1"+IntegerToString(i),xOffset+1*BoxWidth,pOffset+i*LineHeight,"---");

Frage:
Wie gehe ich mit den Structs um?
Danke. AVT

AVT 24.04.20 10:48

Ich habe beschlossen, die ersten beiden aus dem struct rauszuschmeißen und nur den "allgemeinsten" Adtr zu behalten.
Code:

//int    SpairAtr;
//int    SpairAdr;
int    SpairAdtr;

Das ist schließlich, was im Endeffekt in der Tabelle auftaucht; und wenn ich einen der anderen Werte brauche, sind die ja in den Berechnungsbuffern vorhanden. AVT

AVT 24.04.20 17:23

Sortierung versus Kalkulation
 
Ich krieg die Sortierung im laufenden Betriebe einfach nicht hin (bei festen Werten funktioniert es ja).
Meine Tabelle sieht so aus:
Code:

Name  ATR  Moved Spread
EURUSD  69  71    5
GBPUSD 100  62    12

Der "Name" steht fest, "ATR" ist ein d1 Wert, den lasse ich nur bei IsNewDay berechnen (also auch quasi-fest).
"Moved" und "Spread" ändern sich ständig, werden also in OnCalculate neu berechnet.

Ich habe schon versucht, eine bool CalcIsStopped in OnCalculate einzusetzen, aber sobald die Tabelle sortiert ist, bringt mir die Kalkulation alles wieder durcheinander.
Hat jemand einen Hinweis, worauf ich achten muß?
Danke. AVT

Bayreuther 30.04.20 21:51

Nimm doch für jede Spalte ein Array, das ist einfacher als struct :rolleyes:

AVT 01.05.20 23:23

Zitat:

Zitat von Bayreuther (Beitrag 43577)
Nimm doch für jede Spalte ein Array, das ist einfacher als struct :rolleyes:

Danke Dir :), ich habe 3 Arrays (1. FixTabelle, wird nie geändert, 2. dasselbe als variable ArbeitsTabelle, und 3. ein einfaches SortierArray mit 2 Spalten). Es wird nur die ArbeitsTabelle verwendet, da kommen die neusten berechneten oder sortierten Werte rein, und raus gehen ihre Werte zum Pinseln im Chart. Auf diese Weise kann ich alles quer durch die ArbeitsTabelle miteinander vergleichen.

Nun habe ich rausgefunden, wo der Fehler lag => ein Loop zu viel im Loop :eek: . Nu ist alles gut. AVT :D


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:26 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum