[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 452

 
7777877:

Mit anderen Worten, wenn ich richtig verstehe: was auch immer Array (einschließlich Zeitreihen-Array) ich mit ArrayCopy-Funktion zu einem USER-Array kopieren, ich habe zu "verarbeiten" es mit ArraySetAsSeries-Funktion mit Wert gleich true für diese Benutzer-Array zu einem Zeitreihen-Array zu setzen?

genau
 

Sehr geehrte Programmierer. bitte helfen Sie mir, einen Code mit dem folgenden Prinzip zu schreiben - BUY Signal - öffnen BUY 1Position.SL.TP.transfer to no-loss

SELL-Signal - Position SELL 1 öffnen. SL.TP.transfer zu verlustfrei . KAUFEN - wenn es eine offene Position KAUFEN 1 und VERKAUFEN 1 gibt, eröffnen wir KAUFEN 2. SELL-Signal - wenn es offene Positionen BUY 1 und BUY 1 gibt, öffnen wir SELL 2. BUY-Signal - wenn es offene Positionen gibt SELL 1. BUY 1. SELL 2. dann SELL 2. schließen. BUY 2. öffnen. SELL-Signal - wenn es offene BUY 1. SELL 1. BUY 2. dann schließen wir BUY 2. öffnen SELL 2. Der Markt sollte nicht mehr als 3 Aufträge arbeiten. wenn jemand helfen kann, vielen Dank.

 
Sepulca:

Machen Sie sich nicht die Mühe mit dynamischen Arrays, geben Sie im Voraus, mit einer Reserve, oder Sie haben nicht genug Speicher?

Mein Gedächtnis ist akzeptabel, aber darum geht es hier nicht :)

Was nützt es, ein Array mit einer potenziell großen Anzahl von Elementen anzugeben, wenn es um ein Vielfaches weniger Elemente gibt?

Schließlich wird durch die Erstellung eines Arrays bereits ein Teil des Arbeitsspeichers in Anspruch genommen.

 
ilunga:
genau

Ich habe das Skript ein wenig geändert:

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

Das Ergebnis ist wie folgt:


Es stellte sich natürlich eine Frage: In diesem Fall habe ich die Daten der Balken im aktuellen Diagramm mit der Funktion ArrayCopyRates(array1) in ein zweidimensionales Array1 kopiert. Dann habe ich in der nächsten Zeile mit der Funktion ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) die Daten von array1 in array2 kopiert. Dann habe ich mit der Funktion ArrayGetAsSeries überprüft, ob array2 eine Array-Zeitreihe ist. Und es stellte sich heraus (wie Sie auf dem Screenshot sehen können), dass das Array ein Zeitreihen-Array ist, obwohl ich es vorher nicht mit der Funktion ArraySetAsSeries "verarbeitet" hatte.

Frage: warum im ersten Fall (vorherige Frage) ich brauchte, um ArraySetAsSeries-Funktion zu verwenden (um mein Array als eine Zeitreihe Array organisiert werden), während in diesem Fall ich nicht solche Verarbeitung benötigen.

P.S. Entschuldigen Sie, dass ich darauf bestehe, aber ich möchte es einfach vollständig verstehen, damit keine "Lücken in der Geschichte" entstehen. Vielen Dank für alle bisherigen Antworten.

 

Ich kann es nicht herausfinden, oder ich bin dumm ....

Theoretisch sollte es 0,3 sein, aber aus irgendeinem Grund ist es 0,00 ....

  Comment(3/10);

Gibt auch 0... Wie erhält man also gebrochene Zahlen ?????

int start()
  {
double t;
t=3/10;
   Comment(t);

   return(0);
  }

auch null ....

Ich weiß nicht, was für ein Tamburin ich mit ....... springen soll.

 
VOLDEMAR:

Ich kann es nicht herausfinden, oder ich bin dumm ....

Theoretisch sollte es 0,3 sein, aber aus irgendeinem Grund ist es 0,00 ....

Gibt auch 0... Wie erhält man also gebrochene Zahlen ?????

auch null ....

Ich weiß nicht, was für ein Tamburin ich mit ....... springen soll.

Lesen Sie die Dokumentation 3-mal täglich 4-5 Stunden lang. Und erst dann mit einem Tamburin springen.

3.0/10.0

 

Haben Sie eine Ahnung, warum?

Vielleicht sollten wir angemessene Lehrbücher erstellen.

Vielleicht eine angemessene Ausbildung machen?

Vielleicht sollten Sie diese Dinge irgendwo aufschreiben?

Vielleicht werden dann die Fragen verschwinden?

Und Sie müssen nicht wieder 100500 dumme Fragen beantworten!

Wenn es solche Fragen gibt, ist das nicht die Schuld des Schülers, sondern Ihre Schuld! Sie haben es nirgendwo beschrieben!!!

Es steht nicht in der Hilfe, es steht nicht geschrieben, wie man von int nach double umwandelt.

Es heißt aber, dass die Nachkommastellen gelöscht werden, wenn Sie den Typ double dem Typ int zuweisen,

Ein normaler Mensch würde logischerweise zu dem Schluss kommen, dass bei der Zuweisung von int an double nur ein Punkt mit einer bestimmten Anzahl von Nullen hinzugefügt wird...

So sieht es also aus ....

 
Roger:

Ersetzen Sie

zu


Vielen Dank, ich werde es ausprobieren!
 
VOLDEMAR:

Irgendeine Idee, warum das so ist?
Vielleicht sollten wir entsprechende Tutorials erstellen?
Vielleicht eine angemessene Lehrtätigkeit?


Diese Fragen sind nicht für mich bestimmt. Ich bin ein Benutzer, genau wie Sie.

Vielleicht sollten Sie diese Dinge irgendwo aufschreiben.

Nun, ich habe Ihnen gezeigt, wo das steht.

Vielleicht werden die Fragen dann verschwinden?

Nein, sie werden nicht verschwinden. Das versichere ich Ihnen.

Und Sie müssen nicht wieder 100500 dumme Fragen beantworten!
Wenn es solche Fragen gibt, ist das nicht die Schuld des Schülers, sondern Ihre Schuld! Sie haben es nirgendwo beschrieben!!!

Diese Fragen sind nicht für mich bestimmt. Ich bin ein Benutzer, genau wie Sie.

Es steht nicht in der Hilfe, es steht nicht geschrieben, wie man von int nach double umwandelt.
aber es heißt, dass die Nachkommastellen gelöscht werden, wenn Sie den Typ double dem Typ int zuweisen,

ein normaler Mensch käme logischerweise auf die Idee, dass, wenn man eine int-Zahl einer double-Zahl zuordnet, nur ein Punkt mit einer bestimmten Anzahl von Nullen hinzugefügt wird...


Ja, die Zuweisung funktioniert in beide Richtungen.

Nur haben Sie Ihre Logik nicht weiter ausgeführt.

Wenn man logisch sein will, kann man nicht zwei Dinge gleichzeitig tun. Sie hätten dem Pasch zuerst eine Zahl zuordnen und erst dann durch eine andere Zahl teilen müssen. Aber es ist genau umgekehrt: Früher oder später wären Sie darauf gekommen.