[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 181

 
Activict:

Guten Tag. Ich habe eine solche Frage.

Ich habe diesen Indikator für meine eigenen Bedürfnisse mit großer Mühe aus Codestücken anderer Expert Advisors und Induktoren umgestaltet. Es ist kein großer Code, und er funktioniert so, wie ich es will.

Die Sache ist die, dass es intern einige Berechnungen durchführt und Pfeile nach oben oder unten auf dem Diagramm anzeigt.

Wie kann ich einen Expert Advisor dazu bringen, eine Order in die richtige Richtung zu öffnen, wenn ein Pfeil auf dem Chart erscheint?

Genauer gesagt, muss ich nur wissen, welcher Pfeil jetzt aktiv ist, ich denke, ich kann den Rest machen

Hier ist ein Stück Code, um es klarer zu machen, es ist eine Initialisierung im Indikator

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

Vielen Dank im Voraus an alle

Verwenden Sie die integrierte iCustom-Funktion, um die Werte des benutzerdefinierten Indikators zu erhalten, den Sie im Expert Advisor benötigen.



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Sie müssen zum Beispiel wissen, ob auf dem letzten vollständig ausgebildeten Balken ein Aufwärts- oder Abwärtspfeil zu sehen ist:


double Up=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 1, 1); // стрелка вверх
double Dw=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 2, 1); // стрелка вниз
 

Vielen Dank für die Antwort! Ja, die Pfeile gehen manchmal verloren. Wird diese Methode "0" anzeigen, wenn der Pfeil verschwindet?

Und der Pfeil wird nur auf dem entstehenden Balken gezeichnet, die vorherigen Balken werden nicht neu gezeichnet, im Moment des Auftretens muss man ein Geschäft eröffnen bzw. wenn der Pfeil verschwindet, dann schließen

 
Gibt es eine Möglichkeit, den EA mit Hilfe von Programmcode dazu zu bringen, häufiger als üblich Anfragen an den Server zu senden? Damit es statt einer Anfrage zwei gibt, oder damit man die Programm-Shell einfach wiederholen kann ... Wenn drei Anfragen statt einer, dann wiederholen Sie es zweimal ...? ?
 
Activict:

Ja, die Pfeile gehen manchmal verloren. Wird diese Methode durch Anpassung "0" anzeigen, wenn der Pfeil verschwindet?

Ja, das wird sie.

Aktivieren:

Und der Pfeil wird nur auf dem sich bildenden Balken gezeichnet, die vorherigen Balken werden nicht neu gezeichnet, im Moment des Auftretens ist es notwendig, die Position zu öffnen bzw. wenn der Pfeil verschwindet, dann zu schließen

Befindet sich der Pfeil also auf einem der fertig geformten Balken, verschwindet er nicht mehr. Der Pfeil kann mehrmals auf der aktuellen Leiste erscheinen und wieder verschwinden.
 
Aktivieren:

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

Der Wert, der im Code des Indikators als "leer" angegeben ist, wird bei iCustom berücksichtigt. In der Regel kann er 0 oder EMPTY_VALUE sein.

EMPTY_VALUE ist der Standardwert in Indikatoren, aber wenn Sie SetIndexEmptyValue in init() eingeben, wird es anders sein.

 
yellownight:
Gibt es eine Möglichkeit, den EA mit Hilfe von Programmcode dazu zu bringen, häufiger als üblich Anfragen an den Server zu senden? Damit es statt einer Anfrage zwei gibt, oder damit man die Programm-Shell einfach wiederholen kann ... Wenn drei Anfragen statt einer, dann zweimal wiederholen ...? ?
Das wird Ihnen nicht gut tun. Wenn Sie den Server mit Anfragen bombardieren, kann Ihr Konto ganz gesperrt werden. Ich weiß, dass dies Leuten passiert, die "zu viele Anfragen" stellen und den Server mit zu vielen Anfragen "bombardieren".
 

Ich habe einen einfachen Indikator geschrieben. Hier ist der Code:

//+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки";
extern int     maTF = 0;
extern int     maPeriod = 50;
extern int     maShiftByPrice = 0;
extern int     maMethod = 0;
extern int     maPrice = 0;
extern int     shiftBarsBack1 = 2;                       // Первое значение shift
extern int     shiftBarsBack2 = 7;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Другие переменные";
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[1000];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400) limit = 400;
        
    for(i = limit;i > 1;i--)
    {
      pointOfMaFirst = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print("varsAngle[i] = ", varsAngle[i]);
    }

    return(0);
  }
Es ist nur ein Puffer vorhanden. Die Indikatorwerte sind vom Typ double.

Im Expert Advisor habe ich beschlossen, den Wert des Indikators zu ermitteln und ihn als Filter auf den Handel anzuwenden.

Hier habe ich einen einfachen Funktionsaufruf dieses Indikatorpuffers auf den letzten gebildeten Balken geschrieben:

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
Der Wert der Steigung ist im Prüfgerät nicht korrekt:
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

Und warum? Der Typ ist korrekt. Der Aufruf ist auch richtig. Der Indikator funktioniert überhaupt nicht. Hier ist das Protokoll des Testers, aber von einem echten aktuellen Markt:

2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

Warum wird immer wieder eine Zahl 2147483647 anstelle der gewünschten Zahl zurückgegeben ?

 
hoz:

Ich habe einen einfachen Indikator geschrieben. Hier ist der Code:

Er hat nur einen Puffer. Die Indikatorwerte sind vom Typ Double.

Im Expert Advisor habe ich beschlossen, den Wert des Indikators zu ermitteln und ihn als Filter auf den Handel anzuwenden.

Hier habe ich einen einfachen Funktionsaufruf dieses Indikatorpuffers auf den letzten gebildeten Balken geschrieben:

Der vom Prüfgerät zurückgegebene Wert für die Steigung ist nicht korrekt:

Und warum? Der Typ ist korrekt. Der Aufruf ist auch richtig. Der Indikator funktioniert überhaupt nicht. Hier ist das Protokoll des Testers und des realen Strommarktes:

Warum wirdimmer wieder eine Zahl2147483647 anstelleder gewünschten Zahl zurückgegeben?

Im Tester gibt es zu Beginn der Arbeit nicht genügend Balken in der Historie für die korrekte Berechnung des Indikators.

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF)<maPeriod) { Print("Недостаточно баров в истории для корректного расчёта значений индикатора!"); return(-1.0); }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF) < maPeriod)
   {
      Print("Недостаточно баров в истории для корректного расчёта значений индикатора!");
      return(0);
   }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   Print ("iBars(NULL, i_TF) = ", iBars(NULL, i_TF));
   
   return(slope);
}

Ich habe seit 2007 eine Geschichte von Dukascopy heruntergeladen... Es ist unmöglich, dass es nicht genug Bars gibt. MA-Periode beträgt nur 50.

Ich habe Ihre Zeile eingefügt, aber ich habe return(0) korrigiert ... und die Ausgabe der Anzahl der Balken im Diagramm hinzugefügt:

Hier im Protokoll:

2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz:

Ich habe seit 2007 eine Geschichte von Dukascopy heruntergeladen... Es ist unmöglich, dass es nicht genug Bars gibt. MA-Periode beträgt nur 50.

Hier ist Ihre Zeile, aber ich habe return(0) korrigiert ...

Hier steht es im Protokoll:


Das Problem scheint in dem Indikator zu liegen

 if (limit > 400) limit = 400;