Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1730

 
anrei2002 #:

Die irrelevanten Pfeile sind sofort verschwunden!!!

Ich erwarte nicht, dass Sie das verstehen, ich hatte einen Kunden mit einem ähnlichen Problem, ich konnte es ihm ein Jahr lang nicht erklären, es gab einen anderen Indikator, aber auch mit einem Peek. Er scheint ein kluger Kerl zu sein, aber offenbar hat sein Profitstreben seine Logik und sein Denken ausgeschaltet... Schließlich wurde ihm alles klar, als er eine Menge Geld verjubelte. Ich weiß nicht, was ich tun soll... Wenn Sie ihn zurücksetzen, funktioniert der Indikator nicht mehr. Wenn Sie ihn zurücksetzen, bleiben nur die rechten Pfeile erhalten, aber in der Historie... Ich habe eine Menge dieser Indikatoren gesehen

 
MakarFX #:
Zeigen Sie, was Sie bereits getan haben.
#property description "Stochastischer Oszillator"
#Eigenschaft streng

#property indicator_separate_window
#property indicator_minimum 0
#Eigenschaft indicator_maximum 100
#Eigenschaft indicator_buffers 2
#property indicator_color1 LightSeaGreen
#Eigenschaft indicator_color2 Rot
#Eigenschaft indicator_level1 20.0
#Eigenschaft indicator_level2 80.0
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- Eingabeparameter
Eingabe int InpKPeriod=5; // Eingabe K Periode
Eingabe int InpDPeriod=3; // Eingabe D Periode
input int InpSlowing=3; // Verlangsamung

Eingabe String PARA_Ref = "$USDX";
//Eingabe String PARA_Ref = "ETHUSD";


//--- Puffer
double ExtMainBuffer[];
double ExtSignalBuffer[];
double ExtHighesBuffer[];
double ExtLowesBuffer[];

double cl[];
double hi[];
double lo[];



//---
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int OnInit(void)
{
string kurz_name;
//--- 2 zusätzliche Puffer werden für die Zählung verwendet.
IndikatorPuffer(4);
SetIndexPuffer(2, ExtHighesPuffer);
SetIndexPuffer(3, ExtLowesPuffer);
//--- Anzeigezeilen
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexPuffer(1,ExtSignalPuffer);
//--- Name für DataWindow und Bezeichnung des Unterfensters
short_name="Stochastic_Mult_1("+IntegerToString(InpKPeriod)+", "+IntegerToString(InpDPeriod)+", "+IntegerToString(InpSlowing)+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1, "Signal");
//---
draw_begin1=InpKPeriod+InpSlowing;
draw_begin2=draw_begin1+InpDPeriod;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//--- Initialisierung abgeschlossen
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Stochastischer Oszillator |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &Volumen[],
const int &spread[])
{
int i,k,pos,n;

//--- Prüfung der Anzahl der Balken
if(rates_total<=InpKPeriod+InpDPeriod+InpSlowing)
zurück(0);
//--- Zählung von 0 bis rates_total
ArraySetAsSeries(ExtMainBuffer,false);
ArraySetAsSeries(ExtSignalBuffer,false);
ArraySetAsSeries(ExtHighesBuffer,false);
ArraySetAsSeries(ExtLowesBuffer,false);
ArraySetAsSeries(niedrig,false);
ArraySetAsSeries(hoch,false);
ArraySetAsSeries(close,false);

//---
pos=InpKPeriod-1;
if(pos+1<prev_calculated)
pos=prev_calculated-2;
sonst
{
for(i=0; i<pos; i++)
{
ExtLowesBuffer[i]=0.0;
ExtHighesBuffer[i]=0.0;
}
}
//--- Berechnung von HighesBuffer[] und ExtHighesBuffer[]
for(i=pos; i<rates_total && !IsStopped(); i++)
{
double dmin=1000000.0;
double dmax=1000000.0;
for(k=i-InpKPeriod+1; k<=i; k++)
{
n = i-k;
if(dmin>iLow(PARA,0,n)* iLow(PARA_Ref,0,n)) // ursprünglich: if(dmin>low[k])
dmin=iLow(PARA,0,n)* iLow(PARA_Ref,0,n); // ursprünglich: dmin=low[k];
if(dmax<iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n)) // ursprünglich: if(dmax<high[k])
dmax=iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n); // Original: dmax=high[k];

}
ExtLowesBuffer[i]=dmin;
ExtHighesBuffer[i]=dmax;
}
//--- %K Zeile
pos=InpKPeriod-1+InpSlowing-1;
if(pos+1<prev_calculated)
pos=prev_calculated-2;
sonst
{
for(i=0; i<pos; i++)
ExtMainBuffer[i]=0.0;
}
//--- Hauptzyklus
for(i=pos; i<rates_total && !IsStopped(); i++)
{
double sumlow=0.0;
double sumhigh=0.0;
for(k=(i-InpSlowing+1); k<=i; k++)
{
n = i-k;
sumlow +=((iClose(PARA,0,n) * iClose(PARA_Ref,0,n))-ExtLowesBuffer[k]); // Original: sumlow +=(close[k]-ExtLowesBuffer[k]);
sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
}
if(sumhigh==0.0)
ExtMainBuffer[i]=100.0;
sonst
ExtMainBuffer[i]=sumlow/sumhigh*100.0;
}
//--- Signal
pos=InpDPeriod-1;
if(pos+1<prev_calculated)
pos=prev_calculated-2;
sonst
{
for(i=0; i<pos; i++)
ExtSignalBuffer[i]=0.0;
}
for(i=pos; i<rates_total && !IsStopped(); i++)
{
double sum=0.0;
for(k=0; k<InpDPeriod; k++)
sum+=ExtMainBuffer[i-k];
ExtSignalBuffer[i]=sum/InpDPeriod;
}
//--- OnCalculate erledigt. Return new prev_calculated.
return(rates_total);
}
//+------------------------------------------------------------------+
 
Es kann behoben werden, ohne dass die Logik verloren geht, aber es zeichnet den Pfeil am 8. oder sogar am 9. Sie brauchen es so, dass der neue und frischste Pfeil auf dem 9. Balken steht. Und die Öffnungsverzögerung beträgt ebenfalls 9 Takte.
 
Nikolay Ivanov #:

Ich erwarte nicht, dass Sie das verstehen, ich hatte einen Kunden mit einem ähnlichen Problem, ich konnte es ihm ein Jahr lang nicht erklären, es gab einen anderen Indikator, aber auch mit einem Peeping-Gerät. Er scheint ein kluger Kerl zu sein, aber offenbar hat sein Profitstreben seine Logik und sein Denken ausgeschaltet... Schließlich wurde ihm alles klar, als er eine Menge Geld verjubelte. Ich weiß nicht, was ich tun soll... Wenn Sie ihn zurücksetzen, funktioniert der Indikator nicht mehr. Wenn Sie ihn zurücksetzen, bleiben nur die rechten Pfeile erhalten, aber im Verlauf... Ich habe schon viele dieser Indikatoren gesehen.

Ich bin kein Programmierer, aber ich verstehe immer noch nicht, warum der Pfeil nicht mit dem Erscheinen einer neuen Kerze korrigiert werden kann.

Die Welt ist voll von Indikatoren mit Rückkreuzung, und bei allen funktioniert es gut! Der Pfeil bewegt sich mit dem eingestellten Crossover mit und es gibt keine Oszillation.

Sie haben alle den gleichen Code...

Dateien:
02.png  15 kb
 
asdkika1 #:

Schreiben Sie besser auf, was Sie tun wollen... Punkt für Punkt

 
anrei2002 #:

Ich bin kein Programmierer, aber ich verstehe immer noch nicht, warum der Pfeil nicht mit dem Erscheinen einer neuen Kerze korrigiert werden kann?

Die Welt ist voll von Indikatoren mit Rückkreuzung, und bei allen funktioniert es gut! Der Pfeil bewegt sich mit dem eingestellten Crossover mit und es gibt keine Oszillation.

Sie haben alle den gleichen Code.

Normales Rerolling liegt vor, wenn der Signalbalken (wo sich der Pfeil befindet) an der Berechnung des Signals beteiligt ist und den Index 0 haben kann... Das heißt, der aktuelle Balken... Es wird jeden Tick neu gezeichnet, bzw. das Signal kann auch neu gezeichnet werden...

Aber zusätzlich zum 0. Balken verwenden Sie -1 -2 -3 -4 -5 -6 -7... Woher soll der Minus-8-Balken kommen? Es ist eine Unsitte, auch nur den 0. Balken zu verwenden... und Balken mit Minus-Indizes sind einfach inakzeptabel...

Ich habe oben geschrieben, wie man es beheben kann... Es wird richtig, wenn Sie für das Signal auf der rechten Seite von 8 Balken warten, dann wird es in Ordnung sein, nicht denken, dass der Pfeil wird immer 9 Bars spät, wollen Sie, dass?

 
MakarFX #:

Schreiben Sie besser auf, was Sie tun wollen... Punkt für Punkt

Berechnung der Stochastik aus der Multiplikation von zwei Paaren.
Ich habe einfach den Standard-Stochastik-Indikator genommen und die
Eingabedaten (markierte Zeilen).
Ich habe OnCalculate nie benutzt - anscheinend ist hier der Hund begraben.
Funktioniert nicht - kann nicht herausfinden, warum.
Ich hoffte, dass ich nicht gezwungen sein würde
Ich hoffe, dass ich sie nicht selbst umgestalten muss.
 
Nikolay Ivanov #:

Normales Überschwingen liegt vor, wenn der Signalbalken selbst (wo sich der Pfeil befindet) an der Berechnung für das Erscheinen des Signals beteiligt ist und einen Index von 0... hat. Das ist die aktuelle Bar... Er wird bei jedem Tick neu gezeichnet und folglich kann auch das Signal neu gezeichnet werden...

Aber zusätzlich zum 0. Balken verwenden Sie -1 -2 -3 -4 -5 -6 -7... Woher soll der Minus-8-Balken kommen? Es ist eine Unsitte, auch nur den 0. Balken zu verwenden... und Balken mit Minus-Indizes sind einfach inakzeptabel...

Ich habe oben geschrieben, wie man es beheben kann... Es wird richtig funktionieren, wenn Sie für das Signal auf der rechten Seite von 8 Balken warten, dann wird alles in Ordnung sein, denkt nicht, dass der Pfeil immer 9 Bars spät sein wird, brauchen Sie es?

Hier ist ein Beispiel für einen weiteren solchen Indikator!

Er hat zusätzlich zu den Pfeilen auf der Karte, gibt es Kreise an den Schnittpunkten der Linien im Keller.

Und die Kreise befinden sich, im Gegensatz zu den Pfeilen, genau hinter dem Schnittpunkt der Linien! Es gibt keine zusätzlichen Kreise.

Warum gibt es keine Pfeile?

Dateien:
03.png  98 kb
EATA__Alert.mq4  20 kb
 
anrei2002 #:

Hier ist ein Beispiel für einen weiteren dieser Indikatoren!

Zusätzlich zu den Pfeilen auf dem Diagramm hat es Kreise an den Schnittpunkten der Linien im Untergeschoss.

Und die Kreise liegen im Gegensatz zu den Pfeilen genau hinter den Schnittpunkten der Linien! Es gibt keine zusätzlichen Kreise.

Warum ist mit den Pfeilen etwas nicht in Ordnung?

Lassen Sie diesen Indikator im Prüfgerät laufen und beobachten Sie die Linien und Kreise in der Visualisierung bei beschleunigter Geschwindigkeit... Wenn es auch dann noch keinen Sinn ergibt, weiß ich nicht, wie ich es sonst einfach erklären soll...

 
asdkika1 #:
Stochastische Berechnung aus der Multiplikation von zwei Paaren.
Ich habe einfach den Standard-Stochastik-Indikator genommen und die
Eingabedaten (markierte Zeilen).
Ich habe OnCalculate nie benutzt - ich denke, hier liegt das Problem.
Funktioniert nicht - kann nicht herausfinden, warum.
Ich hoffte, dass ich nicht gezwungen sein würde
Ich hatte gehofft, dass ich es nicht selbst wiederholen muss, denn es sollte sehr einfach sein.

Was multiplizieren? Offen? Nahe dran? Stoch?

Grund der Beschwerde: