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

 

Guten Tag, bitte helfen Sie mir mit der Funktion ArrayMo (sie liefert das Maximum der Dichtekurve).

double ArrayMo(double& x[], int d=4) {
  double e, s=0;
  double m[][2];             // временный массив:
                             //  столбец 1 - количество значений
                             //  столбец 2 - значения
  int    i, k=ArraySize(x);
  int    n;                  // номер строки временного массива m
  int    r;                  // количество строк во временном массиве m

  if (k>0) {
    for (i=0; i<k; i++) {
      e=NormalizeDouble(x[i], d);
      n=ArraySearchDouble(m, e);
      if (n<0) {
        r=ArrayRange(m, 0);
        ArrayResize(m, r+1);
        m[r][0]++;
        m[r][1]=e;
      } else m[n][0]++;
    }
    ArraySort(m, WHOLE_ARRAY, 0, MODE_DESCEND);
    s=m[0][1];
  } else Print("ArrayMo(): Массив пуст!");

  return(s);
}

Es haben sich folgende Fragen ergeben:

1. was ist der Zweck der Erstellung eines temporären Arrays

m[][2]

2. es ist nicht klar, woher die Werte des temporären Arrays genommen werden, und daher ist es nicht klar, wie dieses Array durchsucht werden kann:

n=ArraySearchDouble(m, e)

3. und dann ist die Wahrheit für mich im Allgemeinen tief verborgen))))) Nachdem wir festgestellt haben, dass es keinen Wert gibt, beginnen wir damit, die Größe des Feldes der "unverständlichen Werte" zu bestimmen.

Ich wäre wirklich dankbar für einen Lichtblick in dieser Geschichte))))


 
Foxy, was ist mit dem Code der Funktion ArraySearchDouble, ist es dort? Ohne sie wäre es viel schwieriger, herauszufinden, was das Programm tut.)
 

Hallo! Hier ist die Trailing-Stop-Funktion, überprüfen Sie, ob sie korrekt ist. Da sich mein Code drastisch ändern wird, wird es schwierig sein, mit Fehlern umzugehen, wenn ich anfange, ihn zu ändern.

void TrailStop(int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
    if (TStop>0)
      {
       OrderSelect(ticket, SELECT_BY_TICKET);
       if(OrderType()==OP_BUY)
         {
          if(Bid - OrderOpenPrice()>Point*TStop)
            {
             if(OrderStopLoss()<Bid-Point*TStop)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Bid-Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
            else{ }
         }
       else if (OrderType()==OP_SELL)
         {
          if(OrderOpenPrice() - Ask>Point*TStop)
            {
             if(OrderStopLoss()>Ask + TStop*Point)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Ask+Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
          else { }
         }
       else { }
      }
    else { }
    }
 
gogent:

Hallo! Hier ist die Trailing-Stop-Funktion, überprüfen Sie, ob sie korrekt ist. Ich werde meinen Code drastisch ändern, es wird schwer sein, mit Fehlern umzugehen, wenn ich anfange, ihn zu ändern.

Sie berücksichtigen das Stoplevel nicht, so dass Sie, wenn Sie nicht ECN/NDD haben, den Fehler "wrong stops" erhalten können.

Und im Allgemeinen ist es besser, nach OrderModify alle Fehler zu behandeln, nur für den Fall.

 
alsu:
Foxy, was ist mit dem Code der Funktion ArraySearchDouble, ist es dort? Ohne sie wäre es viel schwieriger zu verstehen, was das Programm tut)


Dies sind alles Funktionen von KimIV, die ich herauszufinden versuche. Hier ist der Code:


Diese Funktion sucht nach einem Element eines Arrays mit einem Wert vom Typ double und gibt den Index des gefundenen Elements oder -1 zurück. Die Funktion findet nur ein Element und bricht die Suche ab, wenn das Ergebnis positiv ist.

  • m - Das Array, in dem das Element gesucht wird.
  • e - Der Wert vom Typ double, der im Array m zu finden ist.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
 
Fachleute, können Sie mir sagen, was ich falsch mache? Ich muss das Indikatorfenster neu zeichnen, wenn ein neuer Balken erscheint. If (Bars != Prebars) WindowRedraw();
funktioniert nicht. PreBars ist gleich der Anzahl der Takte des vorherigen Ticks. Vielleicht habe ich sie an die falsche Stelle oder in die falsche Funktion gesetzt?
 
kon12:
Fachleute, was mache ich falsch? Ich muss das Indikatorfenster neu zeichnen, wenn ein neuer Balken erscheint. if (Balken != Vorbalken) WindowRedraw();
es führt zu nichts. Vielleicht habe ich sie an der falschen Stelle platziert oder etwas ist falsch?

Um etwas neu zu zeichnen, müssen Sie es zuerst zeichnen.
 
sergeev:

Um etwas neu zu zeichnen, muss man es zuerst zeichnen.


Alles ist perfekt gezeichnet, der Indikator basiert auf einem Zickzack, aber wenn neue Balken erscheinen, sollte die Kurve ganz neu gezeichnet werden, aber es wird nur der Wert des Indikators in einem neuen Balken hinzugefügt...

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

 
kon12:


Alles wird gut gezeichnet, der Indikator basiert auf einem Zickzack, aber wenn neue Balken erscheinen, sollte die Kurve ganz neu gezeichnet werden, aber es wird nur der Wert des Indikators im neuen Balken hinzugefügt...

int init() {
SetIndexPuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

WindowRedraw() zeichnet grafische Objekte neu. Das hat nichts mit Puffern zu tun.
 
Zhunko:
WindowRedraw() zeichnet grafische Objekte neu. Das hat nichts mit Puffern zu tun.

Ich hab's... Wenn ein anderer Weg mit Umzeichnung?
Grund der Beschwerde: