Multi-Timeframe-Indikatoren - Seite 1204

 
greenpar :

Nochmals vielen Dank für Ihre Hilfe. Ich habe die von Ihnen beschriebenen Änderungen vorgenommen, aber ich habe immer noch Probleme/Fehler (siehe beigefügte Datei). Es wäre toll, wenn ich eine weitere Anleitung erhalten könnte.

Ich danke Ihnen.

Ich habe ein korrigiertes Programm und ein vollständiges Beispiel hochgeladen.
Dateien:
 
Naguisa Unada:
Ich habe ein festes Programm und ein komplettes Beispiel heruntergeladen.

Vielen Dank noch einmal für Ihre Hilfe, ich habe die Änderungen in wie vorschlagen gerollt (siehe angehängte Datei und Code unten). Ich bin immer noch zahlreiche Fehler beim Kompilieren (siehe angehängte Bild der Kompilierung Fehler), ich vermute, es ist zu tun mit hervorgehobenen Zeilen im Code unten.

Bitte bedenken Sie, dass ich andere Zeitrahmen, Währungspaare und auch andere Indikatoren (z. B. ADX) in diese Indikatordatei einbinden möchte.

Für jede weitere Hilfe wäre ich sehr dankbar.

#property description   "Indicator alerts when candle size is larger than CandlePoint value for specified period"
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0


//+------------------------------------------------------------------+
//| Declaring Constants                                         |
//+------------------------------------------------------------------+
#define  RESET 0

//+------------------------------------------------------------------+
//| Enumeration for the indication of operation                                         |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Input parameters of the indicator                                           |
//+------------------------------------------------------------------+
//--- Candle point size
input uint CandlePointM1 = 5;                   // Minimum candle points for Period M1
input uint CandlePointM5 = 5;                   // Minimum candle points for Period M5
int timeFrame[] = {PERIOD_M1, PERIOD_M5, PERIOD_H1};
string currencyPairs[] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"}

//+------------------------------------------------------------------+
//| Custom indicator initialisation function                                            |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Deinitialisation                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Custom iteration function                                           |
//+------------------------------------------------------------------+
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 &volume[],
const int &spread[])


//+------------------------------------------------------------------+
//| Candle size indicator                                               |
//+------------------------------------------------------------------+
{
int range;
static datetime alertBar[] = {0, 0, 0}; // used for one alert/bar
datetime candleTime[3];

for(int i=0; i<3; i++)
        {
        for (int j=0 ;j<3 ;j++)
                {
                double candleLow, candleHigh;
                candleLow = iLow(currencyPairs[i],timeFrame[j],0);
                candleHigh = iHigh(currencyPairs[i],timeFrame[j],0);
                range = int((candleHigh-candleLow)/_Point);
                candleTime[j] = iTime(currencyPairs[i],timeFrame[j],0);

if (alertBar[j] != candleTime[j])
        {
        if (timeFrame[j] == PERIOD_M1 && range>int(CandlePointM1))
                {
                        Alert(currencyPairs[i], "PERIOD_M1", "candle >", CandlePointM1, "points");
                        alertBar[j] = candleTime[j];
                }
                if (timeFrame[j] == PERIOD_M5 && range>int(CandlePointM5))
                        {
                        Alert(currencyPairs[i], "PERIOD_M5", "candle >", CandlePointM5, "points");
                        alertBar[j] = candleTime[j];
                        }
                }
        }
}


Dateien:
 
greenpar :

Vielen Dank noch einmal für Ihre Hilfe, ich habe die Änderungen in wie vorschlagen gerollt (siehe angehängte Datei und Code unten). Ich bin immer noch zahlreiche Fehler beim Kompilieren (siehe angehängte Bild der Kompilierung Fehler), ich vermute, es ist zu tun mit hervorgehobenen Zeilen im Code unten.

Bitte bedenken Sie, dass ich andere Zeitrahmen, Währungspaare und auch andere Indikatoren (z. B. ADX) in diese Indikatordatei einbinden möchte.

Für jede weitere Hilfe wäre ich Ihnen sehr dankbar.


1. Am Ende der Zeile fehlte ;.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Die folgenden Zeilen fehlten.

Return (rates_total);
}

3. Ich habe die Array-Dimension falsch platziert. Sie wurde wie folgt geändert und in den globalen Bereich verschoben.

datetime alert_bar [3] [3];
datetime candleTime [3] [3];

Dateien:
 
Naguisa Unada:

1. Am Ende der Zeile fehlte ;.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Die folgenden Zeilen fehlten.

Return (rates_total);
}

3. Ich habe die Array-Dimension falsch platziert. Sie wurde wie folgt geändert und in den globalen Bereich verschoben.

datetime alert_bar [3] [3];
datetime candleTime [3] [3];


Nochmals vielen Dank. Es wird jetzt über alle aufgeführten Zeitrahmen und Währungspaare hinweg alarmiert.

Es wird jedoch nicht mehr einmal pro Bar alarmiert, sondern bei jedem Anstieg der Kerzenpunkte über die Mindestgröße der Kerzenpunkte. Die Zeilen 78, 84 und 90 in der Datei "Sample.mq4", die Sie an Ihre vorherige Nachricht angehängt haben, sorgen nicht dafür, dass nur einmal pro Kerze Alarm geschlagen wird. Ich habe versucht, die Werte innerhalb der '[]' zu ändern, aber das hat das Problem offensichtlich nicht behoben. Wie kann man das Problem beheben?

Wie immer wäre ich für jede weitere Hilfe sehr dankbar. Vielen Dank!

 
greenpar :

Es wird jedoch nicht mehr einmal pro Balken alarmiert, sondern bei jedem Anstieg der Kerzenpunkte über die Mindestgröße der Kerzenpunkte. Die Zeilen 78, 84 und 90 in "Sample.mq4", die Sie Ihrer vorherigen Nachricht beigefügt hatten, sorgen nicht dafür, dass nur einmal pro Kerze Alarm geschlagen wird. Ich habe versucht, die Werte innerhalb der '[]' zu ändern, aber das hat das Problem offensichtlich nicht behoben. Wie kann man das Problem beheben?

Das ist klar. Ich sollte die folgenden Zeilen in "OnInit" schreiben.

 //ArrayResize(candleTime, CPNO); 
 //ArrayResize(alert_bar,  CPNO); 
 //ArrayInitialize(alert_bar, 0); 
int OnInit ()
{
         //--- indicator buffers mapping 
        TFNO = ArraySize (timeFrame);
        CPNO = ArraySize (currencyPairs);
        
         ArrayResize (candleTime, CPNO);
         ArrayResize (alert_bar,  CPNO);
         ArrayInitialize (alert_bar, 0 );
        
         if ( StringLen ( Symbol ()) > 6 )
        {
                sufix = StringSubstr ( Symbol (), 6 , 0 );
                 for ( int i = 0 ; i < CPNO; i++)
                        currencyPairs[i] += sufix;
        }
         //--- 
         return ( INIT_SUCCEEDED );
}

Die Zahlen in [ ] werden mit "ArrayResize" oben angepasst. Auch wenn sich die Anzahl der Währungspaare erhöht, wird sie hier automatisch angepasst, aber wenn Sie einen weiteren Zeitrahmen hinzufügen wollen, müssen Sie das Programm direkt ändern. Das liegt daran, dass dies die Spezifikation von MQL4 ist.

 
Naguisa Unada:

Sicher ist es das. Ich sollte die folgenden Zeilen in "OnInit" schreiben.

Die Zahlen in [ ] werden mit "ArrayResize" oben angepasst. Auch wenn sich die Anzahl der Währungspaare erhöht, wird sie hier automatisch angepasst, aber wenn Sie einen weiteren Zeitrahmen hinzufügen möchten, müssen Sie das Programm direkt ändern. Das liegt daran, dass dies die Spezifikation von MQL4 ist.


Nochmals vielen Dank. Ich habe den Code eingefügt.

Der Alarm wird immer noch bei jedem Anstieg der Kerzenpunkte über die Mindestgröße der Kerzenpunkte ausgelöst - auch nach dem Löschen des Indikators aus dem Chart, dem Neukompilieren, dem Beenden von MT usw. Wie kann ich das beheben?

Wie immer wäre ich für jede weitere Hilfe sehr dankbar. Ich danke Ihnen.

 
greenpar :

Der Alarm wird immer noch bei jedem Anstieg der Kerzenpunkte über die Mindestgröße der Kerzenpunkte ausgelöst - auch nachdem ich den Indikator aus dem Chart gelöscht, neu kompiliert, MT beendet habe usw. Wie kann ich das beheben?

Auf meinem PC funktioniert er normalerweise ohne Probleme. Ich denke, dass etwas nicht stimmt, aber ich weiß nicht, was es ist.

 
Naguisa Unada:

Auf meinem PC funktioniert es normal und ohne Probleme. Ich denke, dass etwas nicht stimmt, aber ich weiß nicht, was es ist.


Ich verwende MT4 Build 1090. Ich bin mir nicht sicher, was das Problem ist. Vielleicht kann jemand anderes helfen?

Danke für die Hilfe

 

Kann jemand diesen Indikator ändern, wenn Stoch kreuzen einander die Pfeile zeigt auf zweite Kerze, aber ich brauche, dass der Pfeil zeigt auf aktuelle Kerze, sofort jedes Mal, wenn Stoch kreuzen einander


Danke

 
fxprogramer:

Kann jemand diesen Indikator ändern, wenn Stoch kreuzen einander die Pfeile zeigt auf zweite Kerze, aber ich brauche, dass der Pfeil zeigt auf aktuelle Kerze, sofort jedes Mal, wenn Stoch kreuzen einander

//for(i=1; i<=limit; i++) 
  for(i=0; i<=limit; i++) 

Es ist sehr einfach. Korrigieren Sie i = 1 zu i = 0 in Zeile 77.