HELP !!!! einen Indikator von MT4 zu MT5 konvertieren. - Seite 5

 

Hallo, ich versuche, einen Indikator von mql4 nach mql5 zukonvertieren. Im Grunde brauche ich nur eine akustische Benachrichtigung im MFI, wenn ein roter Balken erscheint. Wie füge ich diesen Soundcode nun dem neuen mfi zu?

Ich habe ein Beispiel für die alte Arbeitsversion beigefügt:

Dateien:
 

Sagen Sie mir den richtigen Weg, dies ist eine Heiken Ashi Berechnung

Das ist ein Ausschnitt aus dem Standard

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Es stellt sich die Frage: Wenn Open nach dem vorherigen Balken gesucht werden sollte, warum wird dann nach dem nächsten Balken im Code gesucht?

Ist das wahrscheinlich richtig so, oder habe ich etwas falsch verstanden?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Ich danke Ihnen!
 
Vitaly Muzichenko:

Sagen Sie mir den richtigen Weg, dies ist eine Heiken Ashi Berechnung

Das ist ein Ausschnitt aus dem Standard

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Es stellt sich die Frage: Wenn Open nach dem vorherigen Balken gesucht werden sollte, warum wird dann nach dem nächsten Balken im Code gesucht?

Das muss doch richtig sein, oder verstehe ich da etwas falsch?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Ich danke Ihnen!
In mql5 wird die Richtung der Taktindizierung standardmäßig festgelegt. Daher ist [i-1] nur der erste Balken auf der rechten Seite.
 
Vitaly Muzichenko:

Sagen Sie mir den richtigen Weg, dies ist eine Heiken Ashi Berechnung

Das ist ein Ausschnitt aus dem Standard

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Es stellt sich die Frage: Wenn Open nach dem vorherigen Balken gesucht werden sollte, warum wird dann nach dem nächsten Balken im Code gesucht?

Wahrscheinlich ist das der richtige Weg, oder habe ich etwas falsch verstanden:

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Ich danke Ihnen!

Um genau zu sehen, welcher Index den ganz rechten und den ganz linken Balken im Diagramm hat, verwenden Sie diese einfache Methode:

Setzen Sie in jedem Indikator im MetaEditor einen Haltepunkt bei der ersten Operation innerhalb von OnCakculate() (Schritt 1):

Indizierungsprüfung

Starten Sie die Fehlersuche an historischen Daten. Sobald Sie mit dem Debugging an Ihrem Haltepunkt beginnen, wird das Debugging angehalten. Fügen Sie dann der Beobachtung zwei Ausdrücke hinzu: "time[rates_total-1]" und "time[0]" (Schritte 2 und 3). Jetzt können wir leicht sehen, dass in dieser Situation (das time[]-Array hat die Standard-Indexierungsrichtung, ArrayAsSeries wurde nicht angewandt), das Element time[rates_total-1] der Balken ganz rechts im Diagramm sein wird (Schritt 4).

Ich hoffe, diese einfache und klare Methode wird Ihnen helfen, die Richtung der Indizierung in Indikatoren schnell zu überprüfen.

 
Alexey Viktorov:
In mql5 ist die Richtung der Balkenindizierung standardmäßig festgelegt. Daher wird [i-1] der erste Balken von rechts sein.

Ich grob verstehen, so dass ich nicht vergessen, über die Verwendung von ArraySetAsSeries.

Die Frage ist, dass sowohl im mql4- als auch im mql5-Code dieselbe "i-1"-Berechnung angewandt wird. Warum wird subtrahiert, wenn die Formel "previous bar" und nicht "future bar" sagt?

Wladimir Karputow:

Um genau zu sehen, welcher Index den rechten und linken Balken im Diagramm hat, können Sie diesen einfachen Trick anwenden:

Setzen Sie in jedem Indikator im MetaEditor einen Haltepunkt bei der ersten Operation innerhalb von OnCakculate() (Schritt 1):

Starten Sie die Fehlersuche an historischen Daten. Sobald Sie mit dem Debugging an Ihrem Haltepunkt beginnen, wird das Debugging angehalten. Fügen Sie dann der Beobachtung zwei Ausdrücke hinzu: "time[rates_total-1]" und "time[0]" (Schritte 2 und 3). Jetzt können wir leicht sehen, dass in dieser Situation (das time[]-Array hat die Standard-Indexierungsrichtung, ArrayAsSeries wurde nicht angewandt), das Element time[rates_total-1] der Balken ganz rechts im Diagramm sein wird (Schritt 4).

Ich hoffe, dass diese einfache und klare Methode dazu beiträgt, die Richtung der Indizierung in Indikatoren schnell zu überprüfen.

Vielen Dank, das war mir nicht bewusst.

Hat jemand eine Vermutung, ob die Berechnung korrekt ist?

 
Hallo.
Ich muss eine Warnmeldung für den CCI ARROWS Indikator erstellen.
Das Signal muss sofort nach Erscheinen des Pfeils erfolgen.
MT5
 

Hallo zusammen!!! Ich begann, den Indikator in MT5 zu ändern, aber ich kann nicht verstehen, die iTime-Funktion, ich kann nicht bekommen, es zu arbeiten, kann jemand dopilize den Indikator zu einem funktionierenden Zustand?????

Der Indikator liest die Datei, die sich in dem Ordner MQL5\Files\evolution-dvoid\ befindet.

Nach dem Herunterladen benennen Sie die Datei in .csv um.

Vielen Dank im Voraus.

Dateien:
 

Guten Tag zusammen, ich bin kein Programmierer, aber einer meiner Freunde sagt, dass im Code des Indikators Bill Williams'Market Facilitation Index (BW MFI) die Berechnungen nicht streng nach der klassischen Formel durchgeführt werden: BW MFI = (HOCH - NIEDRIG) / VOLUMEN Darüber hinaus wird eine zusätzliche Datenkorrektur vorgenommen. Dies ist in der Tat ein Fehler, und folglich ist der Indikator zeigt falsche Daten an!

Bitte teilen Sie mir mit, wie ich diesen Fehler im Indikator beheben kann (entfernen Sie die zusätzliche Datenkorrektur) und erhalten Sie
Indikator, der streng nach der Formel funktioniert: BW MFI = (HOCH - NIEDRIG) / VOLUMEN ?????


//+------------------------------------------------------------------+

//| MarketFacilitationIndex.mq5 |

//| Copyright 2009, MetaQuotes Software Corp.

//| http://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "2009, MetaQuotes Software Corp.

#property link "http://www.mql5.com"

//--- Indikatoreinstellungen

#property indicator_separate_window

#Eigenschaft indicator_buffers 2

#property indicator_plots 1

#property indicator_type1 DRAW_COLOR_HISTOGRAM

#property indicator_color1 Limette,Sattelbraun,Blau,Rosa

#Eigenschaft indicator_width1 2

//--- Eingabeparameter

input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; //Lautstärken

//---- Puffer

double ExtMFIBuffer[];

double ExtColorBuffer[];

//+------------------------------------------------------------------+

//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |

//+------------------------------------------------------------------+

void OnInit()

{

//---- Indikatoren

SetIndexPuffer(0,ExtMFIBuffer,INDICATOR_DATA);

SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);

//--- Name für DataWindow

IndicatorSetString(INDICATOR_SHORTNAME, "BWMFI");

//--- Genauigkeit einstellen

IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//----

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

void CalculateMFI(const int start,const int rates_total,

const double &high[],

const double &low[],

const long &Volumen[])

{

int i=start;

bool mfi_up=true,vol_up=true;

//--- Berechnung der ersten Werte von mfi_up und vol_up

if(i>0)

{

int n=i;

while(n>0)

{

if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }

if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; break; }

//--- wenn mfi-Werte gleich sind weiter

n--;

}

n=i;

while(n>0)

{

if(volume[n]>volume[n-1]) { vol_up=true; break; }

if(volume[n]<volume[n-1]) { vol_up=false; break; }

//--- wenn die tatsächlichen Mengen gleich sind, weiter

n--;

}

}

//---

while(i<rates_total && !IsStopped())

{

if(Volumen[i]==0)

{

if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];

sonst ExtMFIBuffer[i]=0;

}

sonst ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i];

//--- Änderungen berechnen

if(i>0)

{

if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;

if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;

if(volume[i]>volume[i-1]) vol_up=true;

if(volume[i]<volume[i-1]) vol_up=false;

}

//--- Farben einstellen

if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;

if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;

if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;

if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;

i++;

}

}

//+------------------------------------------------------------------+

//| Benutzerdefinierte Indikator-Iterationsfunktion |

//+------------------------------------------------------------------+

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 start=0;

//---

if(start<prev_calculated) start=prev_calculated-1;

//--- Berechnung mit Tick- oder Realvolumen

if(InpVolumeType==VOLUME_TICK)

CalculateMFI(start,rates_total,high,low,tick_volume);

sonst

CalculateMFI(start,rates_total,high,low,volume);

//--- letzten mfi-Wert normalisieren

if(rates_total>1)

{

datetime ctm=TimeTradeServer(),lasttm=time[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds());

if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)

{

double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);

ExtMFIBuffer[rates_total-1]*=correction_koef;

}

}

//---

return(rates_total);

}

//+------------------------------------------------------------------+

 

Bitte sagen Sie mir, welche Art von Code dies ist und wie man dies in einen MT5-Indikator zu machen?


//Dies ist ein volumenbasierter Indikator. Achten Sie auf die richtige Eingangslautstärke.


//Squatbars sind ein Kampf zwischen Bullen und Bären, mit vielen Käufen und Verkäufen, aber wenig Kursbewegung.
// Ein Kniebeugen-Barren wird am Ende eines Trends in 85 % der Fälle einer der drei oberen ODER der drei unteren Barren sein.
//Während alle Trends mit einer Kniebeuge enden, sind alle Kniebeugen NICHT das Ende eines Trends.

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((hoch-tief)/Volumen,1)
r_v=roc(Volumen,1)
squat_f=(r_hl < 0) und (r_v > 0)
barcolor(squat_f ? blau : na)
 
Olexiy Polyakov:

Bitte sagen Sie mir, welche Art von Code dies ist und wie man dies in einen MT5-Indikator zu machen?


//Dies ist ein volumenbasierter Indikator. Achten Sie auf die richtige Eingangslautstärke.


//Squatbars sind ein Kampf zwischen Bullen und Bären, mit vielen Käufen und Verkäufen, aber wenig Kursbewegung.
// Ein Kniebeugen-Barren wird am Ende eines Trends in 85 % der Fälle einer der drei oberen ODER der drei unteren Barren sein.
//Während alle Trends mit einer Kniebeuge enden, sind alle Kniebeugen NICHT das Ende eines Trends.

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((hoch-tief)/Volumen,1)
r_v=roc(Volumen,1)
squat_f=(r_hl < 0) und (r_v > 0)
barcolor(squat_f ? blau : na)

BW MFI Squat bar , 3 Puffer (wenn ich mich recht erinnere)