Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Wo ist der Fehler? (http://www.expert-advisor.com/forum/showthread.php?t=4142)

Nap$ter 12.03.15 17:58

Wo ist der Fehler?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ahoi zusammen. :)

Habe hier einen einfachen Indikator der mir einen Alarm ausgibt, wenn eine Kerze größer als 15 Pips (einstellbar) ist. Leider kommt das Signal die ganze Zeit endloss sobald die 15 Pips erreicht sind.... Ein Signal pro Kerze reicht natürlich aus. Wo ist der Fehler?
Kann mal jemand drüber schauen, reatliv überschaubarer Quellcode.


Code:

....
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime
#property indicator_width1 1

extern double distance = 0.0015;
extern string Alert = "off";

double v1[];
double val1;
double whichBar;
int i;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                        |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  SetIndexArrow(0,233);
  SetIndexStyle(0,DRAW_ARROW , EMPTY);
  SetIndexDrawBegin(0, i-1);
  SetIndexBuffer(0, v1);
  SetIndexLabel(0,"Candle bigger than Distance");
 
//----

  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                      |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  i = Bars;
  while(i >= 0)
    { 
      val1 = (High[i]-Low[i]);
      //----
      if(val1 > distance) {
          v1[i] = Low[i]-0.0005;
      }
      else{
          v1[i] = 0;
      }
      //----
      i--;
    }
 
if(Alert == "on" && v1[0] != 0){
      Alert("Candle Size Alert on "+Symbol()+" at "+TimeToStr(TimeCurrent(),TIME_SECONDS));
  }     
  return(0);
  }
 
 
//----
//+------------------------------------------------------------------+

Würde mich über eine Antwort freuen.

PS: Habe den Indikator mal angehängt falls ihn jemand im MT4 anschauen möchte.

newTrader 12.03.15 22:11

Hallo,

soll der Indikator bei der aktuellen Kerze eine Meldung ausgeben sobald sie größer als 15 Pip´s ist, oder soll er eine Meldung rausgeben, sobald eine Kerze abgeschlossen ist und sie größer als 15 Pip´s war? Also bei jeder neuen Kerze gucken ob die davor größer 15 Pip´s war?

Wenn er bei der aktuellen Candle ne Meldung raus geben soll sobald sie größer 15 Pip´s ist würde es problematisch werden, da diese ja innerhalb der Periode des öffteren größer und wieder kleiner werden kann. Somit würde die Meldung auch öffters kommen, obwohl die Candle noch nicht abgeschlossen ist.

Was genau bezweckst du mit diesem Indikator? Was für ein Setup tradest du, wenn ich fragen darf?

Nap$ter 13.03.15 17:10

Liste der Anhänge anzeigen (Anzahl: 1)
Hey newTrader.:)

Danke erstmal für die Antwort. Die Meldung soll in der laufenden Kerze kommen. Vermutlich hast du Recht das es schwierig ist eine einmalige Meldung zu bekommen da sich der Kurs ja andauert ändert. Könnt ein logischer Fehler von mir sein aber....:confused:

Ich komme nur auf den Gedanken da ich einen RSI Alert Indikator besitze der mir einen Alarm ausgibt wenn sagen wir Beispielsweise Level 90 erreicht wurde. (Alarm von RSI(6) bei Level 90). Der RSI änderst sich ja auch laufend in der Kerze und dort bekomme ich zum Beispiel auch nur einen Alarm wenn der RSI das erstemal bei 90 ist obwohl der RSI auch ständig bei 89/90/91 in der selben Kerze rumspringt daher stellte ich die Frage mal in den Raum. :)

Vielleicht hatte hier jemand schonmal so ein ähnliches Problem und kennt eine Lösung. Falls nicht geb ich mich mit dem Visuellen Darstellung zufrieden.

Ich benutze ihn nur um starken Bewegungen und Kerzen zu erkennen. Mühsehliges ziehen mit der Maus und Pips zählen fällt weg. Nach einen Blick weiss man das die Kerze eine bestimme Größe erreicht hat. ;)

Im Anhang habe ich den RSI Indikator mal angehängt den ich meine.

newTrader 13.03.15 17:33

Hi,

ich fragte nur um zu wissen wo das Problem genau liegt. Sollte aber machbar sein. Werde mich später mal dran setzen! ;-)

BlackPearl 14.03.15 17:52

ergänze static int act_bars; if (Bars!=act_bars){ ... // hier
Alarm auslösen act_bars=Bars;}

Nap$ter 16.03.15 19:40

Liste der Anhänge anzeigen (Anzahl: 1)
Hey BlackPeal,

danke für den Befehl. Ich habe mich mal daran versucht aber es nicht hinbekommen. Nun kommt bei jedem Kerzen Beginn ein Alarm. Bin leider ein blutiger Anfänger wenn es um mql geht.

Hier der Code, vermutlich nicht korrekt
Code:

#property copyright "Ryan Cap"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Yellow
#property indicator_width1 3

extern double distance = 0.0010;
extern string onOff = "off";

double v1[];
double val1;
int i;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                        |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);
  SetIndexDrawBegin(0, i-1);
  SetIndexBuffer(0, v1);
  SetIndexLabel(0,"Candle bigger than Distance");
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                      |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  i = Bars;
  while(i >= 0)
    { 
      val1 = (High[i]-Low[i]);
      //----
      if(val1 > distance) {
          v1[i] = Low[i]-0.0005;
      }
      else{
          v1[i] = 0;
      }
      //----
      i--;
 
 static int act_bars;

  if(Bars!=act_bars)
  {
      if(onOff == "on" && v1[0] != 0){
      Alert("Candle Size Alert on "+Symbol()+" at "+TimeToStr(TimeLocal(),TIME_SECONDS));
      }
      act_bars=Bars;}
     
  }   
  return(0);
  }
 
//----

Würde mich freuen wenn du es oder auch newTrader es vielleicht kurz im Indicator reinschreiben könnte und den Code dann postet oder ihn wieder hochladen würde. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum