Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 573

 
Andrey Koldorkin:

Ich werde sehen, was ich herausfinden kann. Danke. (lacht)

Bitte sehr. Es speichert einfach alle Höchstwerte in einem Array und gibt dann alle im Array gespeicherten Daten in einer Schleife in das Protokoll aus.

Dieses Skript tut nicht unbedingt genau das, was Sie von ihm erwarten. Sie zeigt lediglich, wie die Daten in dem Array gespeichert werden.

 
Artyom Trishkin:

Ganz und gar nicht. Es speichert einfach alle Höchstwerte in einem Array und gibt dann alle im Array gespeicherten Daten in einer Schleife im Logbuch aus.

Dieses Skript tut nicht unbedingt genau das, was Sie brauchen. Sie zeigt lediglich das Prinzip der Speicherung von Daten in einem Array.

Das ist genau das, wonach ich gesucht habe. Ich musste die Daten irgendwie in einem Array für den von mir gewählten Zeitraum speichern. Das ist der Teil, den ich von Ihnen verstanden habe.

Meine Frage ist nun, WIE kann ich auf die aufgezeichneten Daten im Array zugreifen und sie vergleichen?

Hier stellt sich heraus, dass man iterativ vorgeht und das Array Schritt für Schritt schreibt. Das ist gut. Aber jetzt müssen wir die Elemente miteinander vergleichen.

Ist es notwendig, eine neue Iterationszahl zu deklarieren und dann die Daten abzurufen und sie irgendwie zu vergleichen? Aber das wiederum muss die Ergebnisse irgendwo hinschreiben und ... Am Ende wiederholt sich alles.

Grob gesagt, wenn der Vergleichszeitraum 5-7 Kerzenständer umfasst, dann sollte der erste mit den anderen 6 verglichen werden, dann der zweite und so weiter.... Und wenn zwei oder mehr von ihnen den gleichen Höchststand haben, dann sollten Sie erstens diesen Höchststand berechnen und zweitens die Kerze mit dem niedrigsten Tiefststand finden. D.h. die Funktion, am Ende konkrete Kerzenständer aufzurufen, um alle ihre Parameter zu holen.

Ist dies generell möglich?

 
Andrey Koldorkin:

das ist genau das, wonach ich gesucht habe. Was ich brauchte, war eine Möglichkeit, die Daten in einem Array für den von mir ausgewählten Zeitraum zu speichern. Diesen Teil habe ich verstanden.

Meine Frage ist nun, WIE kann ich auf die aufgezeichneten Daten im Array zugreifen und sie vergleichen?

Hier stellt sich heraus, dass man iterativ vorgeht und das Array Schritt für Schritt schreibt. Das ist gut. Aber jetzt müssen wir die Elemente miteinander vergleichen.

Ist es notwendig, eine neue Iterationszahl zu deklarieren und dann die Daten abzurufen und sie irgendwie zu vergleichen? Aber das wiederum muss die Ergebnisse irgendwo hinschreiben und ... Am Ende wiederholt sich alles.

Grob gesagt, wenn der Vergleichszeitraum 5-7 Kerzenständer umfasst, dann sollte der erste mit den anderen 6 verglichen werden, dann der zweite und so weiter.... Und wenn zwei oder mehr von ihnen den gleichen Höchststand haben, dann sollten Sie erstens diesen Höchststand berechnen und zweitens die Kerze mit dem niedrigsten Tiefststand finden. D.h. die Funktion, am Ende konkrete Kerzenständer aufzurufen, um alle ihre Parameter zu holen.

Aber ist es überhaupt möglich, dies zu tun?

Hier fragen wir nur das gespeicherte Array ab und zeigen alle gespeicherten Daten im Protokoll an:

for(int i=0; i<ArrayRange(mass_high,0); i++) {
   printf("Время: %s, High: %.5f",TimeToString((int)mass_high[i][1],TIME_DATE|TIME_MINUTES),mass_high[i][0]);
   }

Lassen Sie uns die Aufgabe etwas genauer formulieren:

Wir müssen ... was genau in dem gespeicherten Array finden?

 
Artyom Trishkin:

Hier wird das gespeicherte Array abgefragt, und alle gespeicherten Daten werden protokolliert:

Lassen Sie uns die Aufgabe genau beschreiben:

Wir müssen in dem gespeicherten Array finden ... was genau?

Ich muss ein Array von Daten für alle geschlossenen Kerzen aufzeichnen (d.h. die aktuelle wird nicht gezählt) - High, Low, Open, Close Candles (4 Parameter) für den Zeitraum, der in den Einstellungen angegeben ist. - es ist.

Als nächstes muss ich die Parameter vergleichen. Angenommen, der Suchzeitraum beträgt 10 Kerzenständer. Hier müssen wir alle Hochs für den Zeitraum von 10 Kerzenständern überprüfen. Wenn es zwei oder mehr Übereinstimmungen gibt, sollten wir zurückkehren:

1. Flagge - "Es gibt eine Übereinstimmung".

1. Der Höchstwert, bei dem die Candlesticks denselben Wert haben.

2. Die Nummern dieser Candlesticks, so dass wir uns auf sie beziehen und die Parameter Low, Close, Open für sie herausfinden können.

Im Allgemeinen verstehe ich viel davon, wie man es macht.

Unklar ist, wie die Kerzen, die das Niveau bilden, bezeichnet werden sollen. Idealerweise könnte man sich bei der Neuberechnung die Anzahl der Iterationen (i) merken, aber zuerst wird eine Neuberechnung durchgeführt, nach der das Protokoll geschrieben wird und nicht angewendet werden kann.

Und in dieser Variante, wie die Ausgabe protokolliert - auch hier ist nicht, was erforderlich ist.

Ich verstehe, dass ich zuerst eine Kerze 1 nehmen und sie mit 9 anderen vergleichen muss, wenn es eine Übereinstimmung gibt, dann extrahiere ich die Nummern dieser Kerzen und ihre Parameter und schalte das Kontrollkästchen ein. Prüfen Sie dann Kerze 2 mit den anderen und so weiter bis zur Mitte der Probe, denn dann gehen Duplikate von Vergleichen nur von der anderen Seite.

Wäre die Anzahl der Candlesticks festgelegt, hätte ich es so geschrieben - etwa 5 Vergleichszyklen. Aber das ist die Frage - wie kann man eine solche Neuberechnung für jede Stichprobengröße ermöglichen.

 
Andrey Koldorkin:

Ich muss ein Array von Daten für alle geschlossenen Kerzen schreiben (d.h. die aktuelle wird nicht gezählt) - High, Low, Open, Close Candles (4 Parameter) für den in den Einstellungen angegebenen Zeitraum. - es ist.

Als nächstes muss ich die Parameter vergleichen. Nehmen wir an, der Suchzeitraum beträgt 10 Kerzenständer. Hier müssen wir alle Hochs für den Zeitraum von 10 Kerzenständern überprüfen. Wenn es zwei oder mehr Übereinstimmungen gibt, sollten wir zurückkehren:

1. Flagge - "Es gibt eine Übereinstimmung".

1. Der Höchstwert, bei dem die Candlesticks denselben Wert haben.

2. Die Nummern dieser Candlesticks, so dass wir uns auf sie beziehen und die Parameter Low, Close, Open für sie herausfinden können.

Im Allgemeinen verstehe ich viel davon, wie man es macht.

Unklar ist, wie die Kerzen, die das Niveau bilden, bezeichnet werden sollen. Idealerweise könnte man sich bei der Neuberechnung die Anzahl der Iterationen (i) merken, aber zuerst wird eine Neuberechnung durchgeführt, nach der das Protokoll geschrieben wird und nicht angewendet werden kann.

Und bei dieser Variante ist dies - wie das Ausgabeprotokoll belegt - auch nicht erforderlich.

Ich verstehe, dass ich zuerst eine Kerze 1 nehmen und sie mit 9 anderen vergleichen muss, wenn es eine Übereinstimmung gibt, dann extrahiere ich die Nummern dieser Kerzen und ihre Parameter und schalte das Kontrollkästchen ein. Dann überprüfen Sie Kerze 2 mit den anderen und so weiter bis zur Mitte der Probe, denn dann gehen die Duplikate der Vergleiche nur von der anderen Seite.

Wäre die Anzahl der Candlesticks festgelegt, hätte ich es so geschrieben - etwa 5 Vergleichszyklen. Aber das ist die Frage - wie kann man eine solche Neuberechnung für jede Stichprobengröße ermöglichen.

Übrigens ist es unwahrscheinlich, dass die Preiswerte genau übereinstimmen. Wir müssen ein gewisses Delta festlegen und betrachten es als Zufall, wenn die Preise nicht mehr als diesen Wert abweichen.

Wenn wir also für jede Kerze im Bereich eine separate Liste passender Kerzenständer benötigen, würde ich versuchen, ein Array von Strukturen zu verwenden. Ich werde darüber nachdenken und Ihnen Bescheid geben.
 
Andrey Koldorkin:

Ich muss ein Array von Daten für alle geschlossenen Kerzen schreiben (d.h. die aktuelle wird nicht gezählt) - High, Low, Open, Close Candles (4 Parameter) für den in den Einstellungen angegebenen Zeitraum. - es ist.

Als nächstes muss ich die Parameter vergleichen. Nehmen wir an, der Suchzeitraum beträgt 10 Kerzenständer. Hier müssen wir alle Hochs für den Zeitraum von 10 Kerzenständern überprüfen. Wenn es zwei oder mehr Übereinstimmungen gibt, sollten wir zurückkehren:

1. Flagge - "Es gibt eine Übereinstimmung".

1. Der Höchstwert, bei dem die Candlesticks denselben Wert haben.

2. Nummern dieser Kerzen, so dass wir uns auf sie beziehen und Low-, Close-, Open-Parameter für sie herausfinden können.

Im Allgemeinen verstehe ich viel davon, wie man es macht.

Unklar ist, wie die Kerzen, die das Niveau bilden, bezeichnet werden sollen. Idealerweise könnte man sich bei der Neuberechnung die Anzahl der Iterationen (i) merken, aber zuerst wird eine Neuberechnung durchgeführt, nach der das Protokoll geschrieben wird und nicht angewendet werden kann.

Und in dieser Variante, wie die Ausgabe protokolliert - auch hier ist nicht, was erforderlich ist.

Ich verstehe, dass ich zuerst eine Kerze 1 nehmen und sie mit 9 anderen vergleichen muss, wenn es eine Übereinstimmung gibt, dann extrahiere ich die Nummern dieser Kerzen und ihre Parameter und schalte das Kontrollkästchen ein. Prüfen Sie dann Kerze 2 mit den anderen und so weiter bis zur Mitte der Probe, denn dann gehen Duplikate von Vergleichen nur von der anderen Seite.

Wäre die Anzahl der Candlesticks festgelegt, hätte ich es so geschrieben - etwa 5 Vergleichszyklen. Aber das ist die Frage - wie kann man eine solche Neuberechnung für jede Stichprobengröße ermöglichen.

Anstelle der Flagge "Zufall" setzen Sie den Zähler, auf den Wert hoch, wo der Zähler am größten ist, gibt es eine Ebene

Der hohe Wert kann aufgerundet werden, z. B. 1,23456 auf 1,2346

und 1,23462 aufgerundet auf 1,2346

weil es unwahrscheinlich ist, dass von 10 Kerzenständern 2 einen Höchststand von 1,23456 haben werden

so tanzt von der Ebene

und die Anzahl der Candlesticks festgelegt ist, schreiben Sie eine bestimmte Menge an Daten in die Struktur

d.h. die Anzahl der in die Struktur geschriebenen Candlesticks entspricht der Anzahl der Iterationen

 
Andrey Koldorkin:

Ich muss ein Array von Daten für alle geschlossenen Kerzen schreiben (d.h. die aktuelle wird nicht gezählt) - High, Low, Open, Close Candles (4 Parameter) für den in den Einstellungen angegebenen Zeitraum. - es ist.

Als nächstes muss ich die Parameter vergleichen. Angenommen, der Suchzeitraum beträgt 10 Kerzenständer. Hier müssen wir alle Hochs für den Zeitraum von 10 Kerzenständern überprüfen. Wenn es zwei oder mehr Übereinstimmungen gibt, sollten wir zurückkehren:

1. Flagge - "Es gibt eine Übereinstimmung".

1. Der Höchstwert, bei dem die Candlesticks denselben Wert haben.

2. Nummern dieser Kerzen, so dass wir uns auf sie beziehen und Low-, Close-, Open-Parameter für sie herausfinden können.

Im Allgemeinen verstehe ich viel davon, wie man es macht.

Unklar ist, wie die Kerzen, die das Niveau bilden, bezeichnet werden sollen. Idealerweise könnte man sich bei der Neuberechnung die Anzahl der Iterationen (i) merken, aber zuerst wird eine Neuberechnung durchgeführt, nach der das Protokoll geschrieben wird und nicht angewendet werden kann.

Und bei dieser Variante ist dies - wie das Ausgabeprotokoll belegt - auch nicht erforderlich.

Ich verstehe, dass ich zuerst eine Kerze 1 nehmen und sie mit 9 anderen vergleichen muss, wenn es eine Übereinstimmung gibt, dann extrahiere ich die Nummern dieser Kerzen und ihre Parameter und schalte das Kontrollkästchen ein. Dann überprüfen Sie Kerze 2 mit den anderen und so weiter bis zur Mitte der Probe, denn dann gehen die Duplikate der Vergleiche nur von der anderen Seite.

Wäre die Anzahl der Candlesticks festgelegt, hätte ich es so geschrieben - etwa 5 Vergleichszyklen. Es stellt sich jedoch die Frage, wie eine solche Neuberechnung für jede Stichprobengröße möglich ist.

Es handelt sich um eine interessante Aufgabe, aber Ihre Vorstellung davon, wie dieses Problem zu lösen ist, ist nicht richtig, da Sie bisher nicht viel über Programmierkenntnisse verfügen.

Sehen Sie: Sie haben eine Reihe von Zitaten. Ihre Aufgabe ist es, aus dieser Menge nur die Tafeln auszuwählen, die bestimmte Bedingungen erfüllen. Sie möchten zum Beispiel eine Sammlung von Balken erhalten, deren Höchstwerte miteinander übereinstimmen. Tatsächlich kann es viele Bedingungen für die Auswahl geben, und sie können im Laufe der Zeit ergänzt werden. Sobald Sie eine Sammlung von Balken haben, können Sie alle anderen Parameter leicht analysieren.

Für Ihre Aufgabe müssen Sie also eine Funktion schreiben, die ein Array von Balken zurückgibt, die eine bestimmte Bedingung erfüllen (Pseudocode):

массив_баров = ПолучитьНужныеБары(Символ(), Таймфрейм(), Период(), УсловиеОтбора);
D.h. es ist wirklich kein Problem, sich einige Daten und Indizes zu merken und zu iterieren. Sie benötigen nicht die Indizes der Balken selbst, sondern eine bestimmte Sammlung, die eine bestimmte Bedingung erfüllt. Wenn man sie hat, kann man viele Probleme auf einen Schlag lösen.
 
Artyom Trishkin:
Wenn wir also für jede Kerze im Bereich eine andere Liste passender Candlesticks benötigen, würde ich versuchen, ein Array von Strukturen zu verwenden. Ich werde darüber nachdenken und Ihnen Bescheid geben.

Gedacht. Ich schreibe gerade ein Testskript:

//+------------------------------------------------------------------+
//|                                                     TestCopy.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Search_Period=10;   // Количество копируемых свечей
int searchPeriod=(Search_Period<1)?1:Search_Period;
input int Delta=2;            // Количество пунктов допуска
int delta=(Delta<0)?0:Delta;
MqlRates array[];             // Массив структур для копирования Open, High, Low, Close, Time
  
struct DataCandle             // Структура для хранения всех совпадений
  {
   int number_matched;           // Количество совпадений
   MqlRates reference_candle;    // Данные эталонной свечи
   MqlRates matched_candles[];   // Массив свечей, совпадающих с эталонной по нужному критерию 
  };
  DataCandle dataCandle[];    // Массив структур данных свечей и их совпадений
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period()));   // количество копируемых свечей
   int copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array);  // копируем данные
   if(copied>0) {                                                    // если скопировали
      ArrayResize(dataCandle,copied);                                // задаём размер структуры равным числу скопированных данных
      ZeroMemory(dataCandle);                                        // Обнуляем данные в структуре
      //--- основной цикл по "эталонным" свечам в массиве array. Их параметры будем искать в доп. цикле
      for(int i=0; i<copy_bars-1; i++) {                             // цикл по скопированным данным от начала до "на один меньше размера массива"
         dataCandle[i].reference_candle.high=array[i].high;          // ищем этот high
         dataCandle[i].reference_candle.low=array[i].low;            // запомнили low для сравнения
         dataCandle[i].reference_candle.time=array[i].time;          // запомнили time для вывода в журнал
         //--- поиск совпадений с эталонной свечой, индексируемой индексом основного цикла i
         int size=0;                                                 // размер массива совпадающих свечей
         ArrayResize(dataCandle[i].matched_candles,size);            // Размер массива совпадений в ноль
         dataCandle[i].number_matched=size;                          // Инициализируем количество совпадений нулём
         //--- теперь ищем совпадения по high свечей в цикле j с high эталонной свечи с индексом i
         for(int j=i+1; j<copy_bars; j++) {                          // в цикле от i+1 до copy_bars
            //--- если совпадают high эталонной свечи (i) и свечи с индексом j (с допуском на величину delta*Point)
            if(NormalizeDouble(delta*Point()-fabs(array[i].high-array[j].high),Digits())>=0) {
               size++;                                               
               ArrayResize(dataCandle[i].matched_candles,size);            // увеличим размер массива совпадающих свечей
               dataCandle[i].number_matched=size;                          // запишем количество совпадений
               dataCandle[i].matched_candles[size-1].high=array[j].high;   // запишем в массив high совпадающей свечи
               dataCandle[i].matched_candles[size-1].low=array[j].low;     // запишем в массив low совпадающей свечи
               dataCandle[i].matched_candles[size-1].time=array[j].time;   // запишем в массив время совпадающей свечи
               //Print("Время свечи ",i," :",TimeToString(dataCandle[i].reference_candle.time=array[i].time),", high=",DoubleToString(dataCandle[i].reference_candle.high=array[i].high,Digits()),". Совпадение со свечой ",TimeToString(dataCandle[i].matched_candles[size-1].time=array[j].time),", её high ",DoubleToString(dataCandle[i].matched_candles[size-1].high=array[j].high,Digits()),". Совпадений: ",(string)dataCandle[i].number_matched);
               }
            }
         }
      }

   //--- Посмотрим чего понаписали в массивы
   for(int i=0; i<ArraySize(dataCandle)-1; i++) {
      string refs_txt="";
      string matched_txt="";
      refs_txt="Свеча "+IntegerToString(i,2,'0')+": время "+TimeToString(dataCandle[i].reference_candle.time)+", high: "+DoubleToString(dataCandle[i].reference_candle.high,Digits())+" имеет совпадений: "+(string)dataCandle[i].number_matched+" шт. ";
      if(dataCandle[i].number_matched>0) {
         for(int j=0; j<ArraySize(dataCandle[i].matched_candles); j++) {
            matched_txt="Совпадение "+IntegerToString(j+1)+": "+TimeToString(dataCandle[i].matched_candles[j].time)+", high: "+DoubleToString(dataCandle[i].matched_candles[j].high,Digits());
            }
         }
      Print(refs_txt,matched_txt);
      }
  }
//+------------------------------------------------------------------+

Ich habe versucht, alle Schritte zu beschreiben.

Nach dem Eintragen aller Übereinstimmungen in der Schleife haben wir ein Array, das alle Kerzenständer und ihre passenden Kerzenständer enthält. Danach können Sie darin nach einem Tiefpunkt suchen. Und Sie können sie direkt in der Schleife organisieren. Es ist für Sie bequemer.

 

Nun, hier ist eine andere Möglichkeit: Für jede Kerze im Bereich werden Streichhölzer geschrieben. In der vorherigen Version wurden die Übereinstimmungen nur für eine Kerze geschrieben - d.h. es wurde keine Übereinstimmung für die Kerze geschrieben, die mit dieser übereinstimmt.

//+------------------------------------------------------------------+
//|                                                     TestCopy.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Search_Period=10;   // Количество копируемых свечей
int searchPeriod=(Search_Period<1)?1:Search_Period;
input int Delta=2;            // Количество пунктов допуска
int delta=(Delta<0)?0:Delta;
MqlRates array[];             // Массив структур для копирования Open, High, Low, Close, Time
  
struct DataCandle             // Структура для хранения всех совпадений
  {
   int number_matched;           // Количество совпадений
   MqlRates reference_candle;    // Данные эталонной свечи
   MqlRates matched_candles[];   // Массив свечей, совпадающих с эталонной по нужному критерию 
  };
  DataCandle dataCandle[];    // Массив структур данных свечей и их совпадений
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period()));   // количество копируемых свечей
   int copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array);  // копируем данные
   if(copied>0) {                                                    // если скопировали
      ArrayResize(dataCandle,copied);                                // задаём размер структуры равным числу скопированных данных
      ZeroMemory(dataCandle);                                        // Обнуляем данные в структуре
      //--- основной цикл по "эталонным" свечам в массиве array. Их параметры будем искать в доп. цикле
      for(int i=0; i<copy_bars; i++) {                               // цикл по скопированным данным от начала до конца
         dataCandle[i].reference_candle.high=array[i].high;          // ищем этот high
         dataCandle[i].reference_candle.low=array[i].low;            // запомнили low для сравнения
         dataCandle[i].reference_candle.time=array[i].time;          // запомнили time для вывода в журнал
         //--- поиск совпадений с эталонной свечой, индексируемой индексом основного цикла i
         int size=0;                                                 // размер массива совпадающих свечей
         ArrayResize(dataCandle[i].matched_candles,size);            // Размер массива совпадений в ноль
         dataCandle[i].number_matched=size;                          // Инициализируем количество совпадений нулём
         //--- теперь ищем совпадения по high свечей в цикле j с high эталонной свечи с индексом i
         for(int j=0; j<copy_bars; j++) {                            // в цикле от 0 до copy_bars
            if(j==i) continue;                                       // пропустим свечу "саму себя"
            //--- если совпадают high эталонной свечи (i) и свечи с индексом j (с допуском на величину Point)
            if(NormalizeDouble(delta*Point()-fabs(array[i].high-array[j].high),Digits())>=0) {
               size++;                                               
               ArrayResize(dataCandle[i].matched_candles,size);            // увеличим размер массива совпадающих свечей
               dataCandle[i].number_matched=size;                          // запишем количество совпадений
               dataCandle[i].matched_candles[size-1].high=array[j].high;   // запишем в массив high совпадающей свечи
               dataCandle[i].matched_candles[size-1].low=array[j].low;     // запишем в массив low совпадающей свечи
               dataCandle[i].matched_candles[size-1].time=array[j].time;   // запишем в массив время совпадающей свечи
               //Print("Время свечи ",i," :",TimeToString(dataCandle[i].reference_candle.time=array[i].time),", high=",DoubleToString(dataCandle[i].reference_candle.high=array[i].high,Digits()),". Совпадение со свечой ",TimeToString(dataCandle[i].matched_candles[size-1].time=array[j].time),", её high ",DoubleToString(dataCandle[i].matched_candles[size-1].high=array[j].high,Digits()),". Совпадений: ",(string)dataCandle[i].number_matched);
               }
            }
         }
      }

   //--- Посмотрим чего понаписали в массивы
   for(int i=0; i<ArraySize(dataCandle)-1; i++) {
      string refs_txt="";
      string matched_txt="";
      refs_txt="Свеча "+IntegerToString(i,2,'0')+": время "+TimeToString(dataCandle[i].reference_candle.time)+", high: "+DoubleToString(dataCandle[i].reference_candle.high,Digits())+" имеет совпадений: "+(string)dataCandle[i].number_matched+" шт. ";
      if(dataCandle[i].number_matched>0) {
         for(int j=0; j<ArraySize(dataCandle[i].matched_candles); j++) {
            matched_txt+=" Совпадение "+IntegerToString(j+1)+": "+TimeToString(dataCandle[i].matched_candles[j].time)+", high: "+DoubleToString(dataCandle[i].matched_candles[j].high,Digits());
            }
         }
      Print(refs_txt,matched_txt);
      }
  }
//+------------------------------------------------------------------+
 
Die Idee der Eröffnung von Aufträgen auf ein Kauf-oder Bärengriff Signal, wie man es so, dass es nur ein Kauf / Verkauf Handel und eine schwebende Ordnung Handel, habe ich eine offene auf jedem Tick des Handels. Helfen Sie mit, das Problem zu lösen.
Dateien:
ritfv.png  46 kb
ohs.txt  5 kb
Grund der Beschwerde: