[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 367

 
LOA:


Drei Höchstwerte für den Zeitraum, nicht der jüngste. Oder besser gesagt, nicht unbedingt der letzte.

Sehen Sie: Sie haben ein Array mit Werten. Sie müssen drei Maxima in dieser Reihe finden. Sie müssen nicht die letzten oder die ersten in der Zeitreihenanordnung sein. Sie müssen nur die drei Maxima finden.

1. Kopieren wir Ihr Array in ein temporäres Array (wir werden in dem temporären Array nach ihnen suchen):

int ArrayCopy( object &dest [], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

Kopiert ein Array in ein anderes. Die Arrays müssen vom gleichen Typ sein. Arrays vom Typ double[], int[], datetime[], color[] und bool[] können als Arrays desselben Typs kopiert werden.
Gibt die Anzahl der kopierten Elemente zurück.
Parameter:
dest[] - Array-Empfänger.
Quelle[] - Quelle: Array.
start_dest - Startindex für das Ziel-Array. Standardmäßig ist der Startindex 0.
start_quelle - Startindex für das Quell-Array. Der Standardstartindex ist 0.
zählen - Anzahl der zu kopierenden Elemente. Standardmäßig wird das gesamte Array(WHOLE_ARRAY) verwendet.


2. Suche nach dem Maximalwert im temporären Array:

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Suche nach dem Element mit dem höchsten Wert. Die Funktion gibt die Position des maximalen Elements im Array zurück.
Parameter:
array[] - Numerisches Array, in dem gesucht werden soll.
zählen - Anzahl der zu durchsuchenden Elemente.
Start - Start - Index für die Suche starten.


3. Gefundenen Index in Array speichern (z. B. MassIndexMaxValue[])

4. Nullen Sie den Wert des gefundenen Maximums im Zeitfeld - schreiben Sie einfach Null dorthin

5. Erneute Suche nach dem nächsten Maximalwert im temporären Array (der Index des ersten gefundenen Wertes ist bereits in MassIndexMaxValue[] gespeichert und der Wert dieses Maximalwertes wird auf Null gesetzt)

Diese Schleife wird so lange fortgesetzt, bis die erforderliche Anzahl von Maximalwerten im temporären Array gefunden wurde.

MassIndexMaxValue[] enthält nun die Indizes der erforderlichen Anzahl von Maximalwerten in Ihrem Array.
Setzen wir die Größe des temporären Arrays auf Null zurück - es gibt keinen Grund, den Speicher zu verstopfen

So läuft das...

ZS... Ich habe gerade eine schnelle Skizze gemacht... Vielleicht habe ich einen Fehler gemacht - ich war wach, als ich schrieb, und habe nichts überprüft, aber die Funktion hat in etwa diesen Inhalt:

void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize(ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize(tmp,ArraySize(ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy(tmp, ms);                 // копируем ваш массив во временный
   for (i=0; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax=ArrayMaximum(tmp);        // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]=0;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize(tmp,0);                 // обнуляем размер временного массива
   return;   
}

Wenn es angerufen wird:

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);

... Das zuvor definierte Array int MassIndexMaxValue[] muss die Indizes der drei in your_Array_Value[] gefundenen Maximalwerte enthalten;

 

Ich kann nicht herausfinden, wie der Prozentsatz des Gewinns pro Handel und der Prozentsatz des Verlusts pro Handel berechnet wird. Können Sie mir das sagen?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70:

Sehen Sie: Sie haben ein Array mit Werten. Sie müssen drei Maxima in dieser Reihe finden. Sie müssen nicht die letzten oder die ersten in der Zeitreihenanordnung sein. Sie müssen nur die drei Maxima finden.


Artem, ich danke Ihnen vielmals!

Ich bin froh, dass meine Idee mit dem Nullen des Maximalwerts des Arrays richtig war, und Sie haben alles im Detail beschrieben, mit dem Kopieren in ein anderes Array, jetzt werde ich mich mit den Kleinigkeiten beschäftigen

Und Vladimirs Rat folgend werde ich mit dem Algorithmus des Programms beginnen, ich werde Ihre Informationen verarbeiten und ich bin sicher, dass alles klappen wird - gute Lehrer.

BESONDEREN DANK FÜR DEN ARTIKEL https://www.mql5.com/ru/articles/1357

 

Guten Tag!

Können Sie mir bitte sagen, wie ich Signale von einem benutzerdefinierten Indikator in einen Expert Advisor bekomme?

Ich habe iCustom verwendet, aber die Eulen empfangen das Signal immer noch nicht

double Signal_I=iCustom(NULL,0,"FL",0,0);
 
skyjet:

Guten Tag!

Können Sie mir bitte sagen, wie ich Signale von einem benutzerdefinierten Indikator in einen Expert Advisor bekomme?

Ich habe iCustom verwendet, aber die Eulen bekommen das Signal immer noch nicht.


Vielleicht eignet sich der Code des iCustom-Indikators nicht dafür... Ihre Frage enthält zu wenig Informationen, um sie zu beantworten.
 
skyjet:

Guten Tag!

Können Sie mir bitte sagen, wie ich Signale von einem benutzerdefinierten Indikator in einen Expert Advisor bekomme?

Ich habe iCustom verwendet, aber die Eulen empfangen das Signal immer noch nicht.


Ist das auch bei anderen Indikatoren der Fall? Wenn ja, verwenden Sie fälschlicherweise die Funktion iCustom(). Wenn nein, versuchen Sie, den Code des Indikators zu überprüfen - es kann sein, dass Ihr Indikator überhaupt keinen Indikatorpuffer verwendet - er arbeitet mit der Konstruktion von grafischen Objekten.
 

Hallo, es gibt eine Funktion:

bool Trade()
{
  if(!IsConnected())
  {
     Print("Связь отсутствует.");
     return(false);
  }

  if(!IsExpertEnabled())
  {
     Print("Торговля экспертами выключена.");
     return(false);
  }
  
  if(DayOfWeek()==0 || DayOfWeek()==6)
  {
     Print("В выходные не торгуем.");
     return(false);
  }
  
  if(!IsTradeAllowed())
  {
     Print("Торговля запрещена? WTF???.");
     return(false);
  }
  return(true);
}

Aber aus irgendeinem Grund funktioniert es nicht. Sie wird im EA gleich zu Beginn nach int start() wie folgt aufgerufen:

  if(!Trade())
  {
    Sleep(5000);
    return;
  }

Der Expert Advisor wird auf den Registerkarten Protokoll und Experten erfolgreich geladen, und es wird nichts anderes angezeigt. Allerdings sollte es heißen: "Wir handeln nicht am Wochenende", denn der 26.11.2011 ist ein Samstag.

Wo liegt der Fehler und was mache ich falsch?

 
Roman.:

Vielleicht eignet sich der Code des iCustom Indikators nicht für... Ihre Frage enthält zu wenig Informationen, um sie zu beantworten.
Der Indikator zeichnet Unterstützungs- und Widerstandslinien, was er während der Visualisierung tut. Der Indikator selbst gibt beim Überschreiten ein Signal LT_1 == 1 oder -1.
if((Close[i] > BuyLevel) 
         {
    
          LT_1=1;
               
         }                                 
       if((Close[i] < CloseLevel)
         {
           
           LT_1=-1;
               
         }
 
ivan2k2:

Hallo, es gibt eine Funktion:

Aber aus irgendeinem Grund funktioniert es nicht. Sie wird im EA gleich zu Beginn nach int start() wie folgt aufgerufen:

Der Expert Advisor wird auf den Registerkarten Protokoll und Experten erfolgreich geladen, und es wird nichts anderes angezeigt. Allerdings sollte es heißen: "Wir handeln nicht am Wochenende", denn der 26.11.2011 ist ein Samstag.

Wo liegt der Fehler und was mache ich falsch?


Heute ist Samstag - ein freier Tag. Sie starten Expert Advisor, die Initialisierung findet statt, aber da es sich um einen freien Tag handelt und kein Tick vorhanden ist, wird die Startfunktion nicht gestartet (d.h. Trade() wird nicht aufgerufen). Um zu überprüfen, ob sie korrekt funktioniert, müssen Sie den Aufruf dieser Funktion in den Initialisierungsblock einfügen oder im Tester testen.
 
skyjet:
Der Indikator zeichnet Unterstützungs- und Widerstandslinien, was er während der Visualisierung tut. Der Indikator selbst gibt beim Überschreiten ein Signal LT_1 == 1 oder -1.

Dann machen Sie sich nicht die Mühe - verschieben Sie einfach den Code des Indikators in den Expert Advisor, so wie er die Handelskriterien erfüllen soll, und das ist alles - dann öffnen Sie im Board, entsprechend dieser vom Indikator übertragenen Handelsbedingungen, Positionen durch den Expert Advisor und das war's ...