Elite-Indikatoren :) - Seite 183

 

DTosc Nachricht...

Mladen,

Ich erhalte eine Meldung im Expers-Ordner, die besagt: ....... "incorrect start position 10148 for Array Maximum function" - der Indikator scheint sich jedoch perfekt zu verhalten.

Haben Sie eine Erklärung dafür?

Ich danke Ihnen im Voraus.

 

ValeoFX

Ohne zu wissen, um welchen Indikator es sich handelt, sieht es in der Regel so aus Finden Sie heraus, wo das Limit festgelegt ist, und ändern Sie es in etwas wie dieses:

limit=MathMin(Bars-counted_bars,Bars-1);

Der zweite Parameter in diesem Ausdruck (Bars-1) stellt in diesem Fall sicher, dass das Limit nicht größer ist als die Anzahl der Bars im Chart.

Aber wie Sie bereits bemerkt haben, handelt es sich um einen "harmlosen" Fehler: Er tritt nur einmal auf (beim Laden des Indikators oder beim Wechsel des Zeitrahmens) und unterbricht im Gegensatz zu anderen Fehlern nicht die Berechnung des Indikators, so dass alle anderen Berechnungen korrekt durchgeführt und die Werte richtig berechnet werden.

Mit freundlichen Grüßen

mladen

ValeoFX:
Mladen,

Ich erhalte eine Meldung im Expers-Ordner, die lautet: ....... "incorrect start position 10148 for Array Maximum function" - der Indikator scheint sich jedoch einwandfrei zu verhalten.

Haben Sie eine Erklärung dafür?

Ich danke Ihnen im Voraus.
 

Danke...

mladen:
ValeoFX

Ohne zu wissen, um welchen Indikator es sich handelt, ist es in der Regel so: Finden Sie heraus, wo das Limit festgelegt ist, und ändern Sie es in etwas wie dieses:

limit=MathMin(Bars-counted_bars,Bars-1);

Der zweite Parameter in diesem Ausdruck (Bars-1) stellt in diesem Fall sicher, dass das Limit nicht größer ist als die Anzahl der Bars im Chart.

Aber wie Sie bereits bemerkt haben, handelt es sich um einen "harmlosen" Fehler: Er tritt nur einmal auf (beim Laden des Indikators oder beim Wechsel des Zeitrahmens) und unterbricht im Gegensatz zu anderen Fehlern nicht die Berechnung des Indikators, so dass alle anderen Berechnungen korrekt durchgeführt und die Werte richtig berechnet werden.

Mit freundlichen Grüßen

mladen

======================

Entschuldigung Mladen, ich hatte den Namen des Indikators im Fenster "Titel" (DTOsc) und habe nicht daran gedacht, ihn noch einmal zu wiederholen. Aber danke für die Erklärung - ich werde es mir sofort ansehen.

In Zeile 124 habe ich gefunden:

Limit = MathMax(Limit,MathMin(Bars,iCustom(NULL,timeFrame,IndicatorFileName, "getBarsCount",0,0)*timeFrame/Period()));

Da es sich von dem unterscheidet, was Sie vorgeschlagen haben, würden Sie bitte erläutern, was ich tun sollte, um das Problem zu beheben?

Ich bin Ihnen sehr dankbar.

 

ValeoFX

Ich habe nicht auf den Untertitel der Nachricht geachtet, sorry

Wie auch immer, wenn Sie die Version aus diesem Beitrag verwenden: https: //www.mql5.com/en/forum/general dann erhalten Sie diese Meldung

Wenn Sie hingegen die Version aus diesem Beitrag verwenden: https: //www.mql5.com/en/forum/general (die neuere Version), dann erhalten Sie diese Meldung nicht.

Ich weiß nicht mehr genau, wann ich die Seite aus dem ersten Beitrag erstellt habe, aber ich habe seitdem einige Kodierungsstile geändert (daher das Fehlen der Fehlermeldung), und ehrlich gesagt war mir die Fehlermeldung vorher nicht so wichtig, da sie wirklich nichts ändert. Danach habe ich einfach beschlossen, keinen Raum für eventuelle Fehler zu lassen, daher die "Sicherheitsprüfung" bei der Festlegung des Limits

____________________________________

PS: Diese Zeile funktioniert im Multi-Zeitrahmen-Modus. Sie "fragt" den Zielzeitrahmen, wie viele Balken sich im Zielzeitrahmen geändert haben, um die genaue Anzahl der benötigten Balken im aktuellen Zeitrahmen neu berechnen zu können. Diese Zeile ist also nur im Mtf-Modus wirksam.

 

mladen,

Ich bin neu in der Codierung. Und es ist schwierig. Aber wenn ich nur CodersGuru's Buch habe, um eine EA....... zu machen, wird nicht genug sein...

siehe mein Beitrag Seite 183

 

Tradefx1

Der Tagestrend, den Sie zu finden versuchen: Sie müssen ihn neu definieren (umschreiben). Im Moment ist er wie folgt geschrieben:

int GetDailyTrend (int res){

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

BarCount=Bars;

return (res);

}[/php]and you are calling it like this :

if (GetDailyTrend(1) && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;

[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.

_________________________

Redefine the GetDailyTrend() to something like this:

[php]int GetDailyTrend ()

{

int res = 0;

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

return (res);

}

And then use it this way :

[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;

_________________________

Was Bücher und Programmierung angeht: Ich habe immer geglaubt, dass man Programmierung am besten anhand von Beispielen und funktionierenden Programmen lernt. Ob Sie es glauben oder nicht, aber von den Leuten bei Microsoft kann man hervorragend lernen (sie schreiben den Code einheitlich (was bedeutet, dass sie feste Teamregeln haben, wie der Code geschrieben werden sollte), sehr sauber und sie versuchen, ihn so effizient wie möglich zu machen).

Es gibt viele Beispiele und funktionierende EAs im Elite-Bereich, die jeder verwenden kann (ich kann Ihnen diesen empfehlen https://www.mql5.com/en/forum/180383 ), aus Gründen, die ich bereits in diesem Thread genannt habe, und ich denke, er kann leicht als "Rahmen" für andere EAs verwendet werden. Aber es gibt auch eine Menge anderer sehr nützlicher EAs, die zum Lernen und zur Erstellung funktionierender EAs verwendet werden können.

Und denken Sie immer daran, eine Sache: Codierungssprachen sind genau das: "Sprachen". Das heißt, es ist ein einfaches Gespräch wie jedes andere Gespräch. Seien Sie nur vorsichtig, was Sie "sagen", um Computer, weil Computer, im Gegensatz zu den Menschen, nicht in Frage stellen, was Sie ihm sagen, sondern führt es einfach (und dann ist es manchmal nicht das, was wir wollen, dass es zu tun ) Und dann, nach einiger Zeit, erhalten Sie daran gewöhnt, "sprechen", um PC und dann wird alles viel einfacher

 

Nur für den Fall ...

Falls sich jemand fragt, was die grundlegende Logik hinter dem adxvma-Indikator ist, hier ist ein mittlerer Schritt davon, der genauso nützlich sein könnte wie der Indikator selbst. (es gibt noch weitere Schritte nach diesem, also vergleichen Sie die 2 Indikatoren nicht, aber dieser Schritt scheint besonders interessant zu sein)

Falls es jemandem bekannt vorkommt, lautet die Antwort "ja". Es scheint, dass es sich um den Power-Trend-Indikator handelt (der "echte" Power-Trend, nicht die, die als solcher gepostet und veröffentlicht werden - da bin ich mir nicht 100%ig sicher (alles, was ich von dem "echten" Indikator gesehen habe, sind Bilder davon), aber er sieht ihm verdammt ähnlich)
Dateien:
 
mladen:
ValeoFX

Ich habe nicht auf den Untertitel der Nachricht geachtet, sorry

Wie auch immer, wenn Sie die Version aus diesem Beitrag verwenden: https: //www.mql5.com/en/forum/general dann erhalten Sie diese Meldung

Wenn Sie hingegen die Version aus diesem Beitrag verwenden: https: //www.mql5.com/en/forum/general (die neuere Version), dann erhalten Sie diese Meldung nicht.

Ich weiß nicht mehr genau, wann ich die Seite aus dem ersten Beitrag erstellt habe, aber ich habe seitdem einige Kodierungsstile geändert (daher das Fehlen der Fehlermeldung), und ehrlich gesagt war mir die Fehlermeldung vorher nicht so wichtig, da sie wirklich nichts ändert. Danach habe ich einfach beschlossen, keinen Raum für eventuelle Fehler zu lassen, daher die "Sicherheitsprüfung" bei der Festlegung des Limits

____________________________________

PS: Diese Zeile funktioniert im Multi-Zeitrahmen-Modus. Sie "fragt" den Zielzeitrahmen, wie viele Balken sich im Zielzeitrahmen geändert haben, um die genaue Anzahl der benötigten Balken im aktuellen Zeitrahmen neu berechnen zu können. Diese Zeile ist also nur im Mtf-Modus wirksam.

=========================================================

Vielen Dank für die Erklärung. Ich weiß das sehr zu schätzen und es hilft mir auch, die Kodierung besser zu verstehen.

Ich werde die 2. Version sofort herunterladen.

Beste Wünsche.

 

adxvma

mladen,

Wäre es unangebracht, Sie zu bitten, die Tradestation-Version zu posten?

Ray

mladen:
Leute, ich habe eine unlogische Sache im Indikator bemerkt (der erste Schritt, wie der adx-Teil berechnet wird) Ich habe den Tradestation-Indikator als Modell verwendet und es scheint, dass es einen Fehler darin gibt, den ich geerbt habe, ohne daran zu denken . In diesen ist der Fehler korrigiert. Auch die Ergebnisse sind auf diese Weise besser.
Diese Berechnung ist viel näher an der aus dem öffentlichen Bereich (so dass die aus dem öffentlichen Bereich ist eine ziemlich korrekte Indikator) mit viel schneller Code in 99% der Zeit und Extras, die spezifisch sind nur auf diese in der Elite-Abschnitt gebucht. Also, wenn Sie die Indikatoren aus früheren Beiträgen heruntergeladen, verwenden Sie bitte diese stattdessen. Außerdem wurde der "normalen" Version eine weitere Option hinzugefügt: MultiColorMode- wenn auf false gesetzt, wird nur eine Farbe für die Anzeige von adxvma verwendet (nützlich, wenn man ein paar adxvma verwenden möchte, um auf Kreuzungen als Signale zu prüfen)

Gruß

Mladen
 

Ray,

Hier ist es. Der Indikator :

inputs:

Price (close),

length (14);

vars:

av (0);

av = ADXVMA(Price, length);

Plot1(av, "Rising");

Plot2(av, "Falling");

Plot3(av, "Neutral");

Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));

NoPlot(1);

NoPlot(2);

NoPlot(3); [/php]and the adxvma function

[php]inputs:

Price (NumericSeries),

Length (NumericSimple);

vars:

TR(0),

DI_Diff(0),

DI_Sum(0),

ma(0),

pdm(0),

mdm(0),

pdi(0),

mdi(0),

DI_Factor(0),

VI(0),

diff(0),

HHV(0),

LLV(0),

WeightDM(Length),

WeightDI(Length),

WeightDX(Length),

ChandeEMA(Length),

out(0),

j(0);

once ma=Price;

//

// in order to make it right the "pdm=0; mdm=0;" must be added (it does not

// exist in original and that is an error, tradestation inherits values fom

// a previous loop and they must be zeroed before these calculations)

//

pdm=0; mdm=0;

if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;

pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;

mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;

TR=pdm+mdm;

if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; end

else begin

pdi=0;

mdi=0;

end;

pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;

mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;

DI_Diff=pdi-mdi;

if (DI_Diff<0) then DI_Diff= -DI_Diff;

DI_Sum=pdi+mdi;

DI_Factor=0;

if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;

out=((WeightDX-1)*out[1] + out)/WeightDX;

if (out>out[1]) then begin HHV=out; LLV=out[1]; end

else begin

HHV=out[1];

LLV=out;

end;

for j = 1 to Length-1 begin

if(out[j+1]>HHV)then HHV=out[j+1];

if(out[j+1]<LLV) then LLV=out[j+1];

end;

diff = HHV - LLV;

VI=0;

if (diff>0) then VI=(out-LLV)/diff;

ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;

ADXVMA = ma;

Ichhabe einen Kommentar und eine Code-Korrekturhinzugefügt, die im Original nicht vorhanden war (das ist die einzige Änderung, die ich vorgenommen habe). Einige der Variablennamen sind irreführend: Es gibt keine EMA-Berechnung in einem der Schritte. Es handelt sich um einen geglätteten gleitenden Durchschnitt, der in den Zwischenschritten der Glättung verwendet wird, nicht um einen EMA. Außerdem werden Sie feststellen, dass es sich, auch wenn die grundlegende Berechnungslogik vom ADX stammt, eigentlich nicht um einen ADX handelt, aber er ist nahe genug dran, um den Namen im Falle dieses "hybriden" Indikators zu verdienen

Viele Grüße

Mladen

traderduke:
mladen,

Wäre es unangebracht, wenn ich Sie bitten würde, die Tradestation-Version zu posten?

Ray
Grund der Beschwerde: