Sie müssen in der Beschreibung angeben, was der Indikator zeichnet.
Können Sie akustische Warnungen hinzufügen, wenn sich der Trend ändert?
Hallo Diogo,
hast du zufällig die MT4-Version verfügbar? Danke
Mit Farben:
//properties
#property copyright "Copyright 2016, quebralim"
#property link "https://www.mql5.com/en/users/quebralim"
#property version "1.4"
#property description "Trends Accumulator"
#property indicator_separate_window
#Eigenschaft indicator_buffers 4
#Eigenschaft indicator_plots 1
#property indicator_type1 DRAW_COLOR_HISTOGRAM
#property indicator_colour1 clrBlue,clrRed
#property indicator_width1 10
#property indicator_label1 "Trends Akkumulator"
//Eingaben
input uint Schwellenwert =40; //Schwellenwert (in Punkten)
input uint MA_Period =10; //MA Periode (in Balken)
input ENUM_MA_METHOD MA_Methode =MODE_EMA; //MA Methode
input ENUM_APPLIED_PRICE MA_Price =PRICE_TYPICAL; //MA Preis
//globals
double bTA[]; // TA-Puffer
double bMA[]; // MA-Puffer
int hMA; // MA-Bearbeiter
double cTA[]; // Clr-Puffer
double xTA[]; // Clr TA-Puffer
//+------------------------------------------------------------------+
//| Indikator Initialisierungsfunktion |
//+------------------------------------------------------------------+
int OnInit()
{
//Eingangsüberprüfungen
if(MA_Periode<1)
return INIT_PARAMETERS_INCORRECT;
//Index-Inits
SetIndexPuffer(0,xTA,INDICATOR_DATA);
SetIndexBuffer(1,cTA,INDICATOR_COLOR_INDEX);
SetIndexBuffer(2,bMA,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,bTA,INDICATOR_CALCULATIONS);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,MA_Period);
//Indikatorname init
IndicatorSetString(INDICATOR_SHORTNAME, "Trend Accumulator ("+(string)Threshold+", "+(string)MA_Period+")");
//MA-Einleitung
hMA=iMA(_Symbol,_Periode,MA_Periode,0,MA_Methode,MA_Preis);
if (hMA == INVALID_HANDLE){
Print("Der MA-Indikator konnte nicht initialisiert werden!");
return INIT_FAILED;
}
//Erfolg!
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Berechnungsfunktion |
//+------------------------------------------------------------------+
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[])
{
//Gibt es genug Daten?
if(rates_total<=(int)MA_Period)
{
0 zurückgeben;
}
//ist MA bereit zum Kopieren?
ResetLastError();
if(BarsCalculated(hMA)<rates_total)
{
Print("Nicht alle Daten des MA sind berechnet. Fehler #",GetLastError());
return prev_calculated;
}
//Wie viel von MA sollen wir kopieren?
int to_copy;
if(prev_calculated>Raten_gesamt || prev_calculated<=0)
{
to_copy=Raten_Gesamt;
}
sonst
{
to_copy=trates_total-prev_calculated+2;
}
//Test, ob vor der großen Operation angehalten wurde
if(IsStopped())
{
0 zurückgeben;
}
//Kopieren des MA-Puffers
ResetLastError();
if(CopyBuffer(hMA,0,0,to_copy,bMA)<=0)
{
Print("Failed getting MA! Fehler #",GetLastError());
return prev_calculated;
}
//Berechnung des Starts
int i;
if(prev_calculated<=(int)MA_Period)
{
i=(int)MA_Zeitraum;
}
sonst
{
i=vorher_berechnet-1;
}
//Berechnung von TA durch start...i...rates_total
int iMax;
while(i<Raten_Gesamt-1)
{
//Stop-Klausel
if(IsStopped())
{
0 zurückgeben;
}
//erster Wert
bTA[i]=bTA[i-1]+bMA[i]-bMA[i-1];
xTA[i]=bTA[i];
if(xTA[i]<0)
{
xTA[i]=xTA[i]*(-1);
}
cTA[i]=0;
if(bTA[i]<0)
{
cTA[i]=1;
}
//letzter Maximalwert
if(bTA[i]*bTA[i-1]>0)
{
iMax=MaxAround(i);
}
sonst
{
iMax=MaxAround(i-1);
}
//bei Bedarf umschreiben
if((bTA[iMax]>0 && bTA[iMax]-bTA[i]>=Schwellenwert*_Point) //wenn er zu tief gefallen ist
|| (bTA[iMax]<0 && bTA[i]-bTA[iMax]>=Schwellenwert*_Punkt))
{ //wenn sie zu hoch gestiegen ist
bTA[iMax+1]=bMA[iMax+1]-bMA[iMax];
xTA[iMax+1]=bTA[iMax+1];
if(xTA[iMax+1]<0)
{
xTA[iMax+1]=xTA[iMax+1]*(-1);
}
cTA[iMax+1]=0;
if(bTA[iMax+1]<0)
{
cTA[iMax+1]=1;
}
for(int k=iMax+2; k<=i;++k)
{
bTA[k]=bTA[k-1]+bMA[k]-bMA[k-1];
xTA[k]=bTA[k];
if(xTA[k]<0)
{
xTA[k]=xTA[k]*(-1);
}
cTA[k]=0;
if(bTA[k]<0)
{
cTA[k]=1;
}
}
}
//inkrementieren
++i;
}
//nur das letzte Signal schätzen
bTA[i]=bTA[i-1]+bMA[i]-bMA[i-1];
xTA[i]=bTA[i];
if(xTA[i]<0)
{
xTA[i]=xTA[i]*(-1);
}
cTA[i]=0;
if(bTA[i]<0)
{
cTA[i]=1;
}
//done
return i;
}
//+------------------------------------------------------------------+
//| Max Around | |
//+------------------------------------------------------------------+
//Rückgabe: Index zum absoluten Maximalwert innerhalb des aktuellen Trends
int MaxAround(int i)
{
int iMax=i;
//positive Version
if(bTA[i]>0)
{
while(i > 0 && bTA[--i]>0)
{
if(bTA[i]>bTA[iMax])
{
iMax=i;
}
}
}
//negative Version
else if(bTA[i]<0)
{
while(i > 0 && bTA[--i]<0)
{
if(bTA[i]<bTA[iMax])
{
iMax=i;
}
}
}
//zurück
gibt iMax zurück;
}
//+------------------------------------------------------------------+

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Trends Accumulator:
Akkumulator von Preisbewegungen. Bestimmt Beginn und Ende eines Trends.
Autor: Diogo Seca