Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 817

 
evillive:

Sie können die Hilfe lesen, dort steht alles drin, mit Beispielen.


Dankeschön
 

Ich hatte die Idee, einen Indikator aus den Dateidaten zu erstellen.

Ich habe ein Beispiel aus dem Lernprogramm genommen. Ich habe das Skript für meine Bedürfnisse überarbeitet:

int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       shift,Text;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return(0);                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      //--------------------------------------------------------- 7 --
      shift=iBarShift(NULL,0,Dat_DtTm);
      Alert("Время=",TimeToString(Time[shift]),"Text=",Text); 
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
      break;                        // Выход из чтения и рисования
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   return(0);                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Die Zeile"Alert" kann entfernt werden.

Die Logik besteht darin, das Datum im Indikator abzurufen, es mit der Datei zu vergleichen und den Wert dem Puffer zuzuweisen, wenn er identisch ist.

Aber ich denke, wenn wir die Suche nach jedem Balken am Anfang der Datei beginnen, wo die Daten bereits berücksichtigt sind, wird es ziemlich teuer.

Die Frage ist, wie man die verarbeiteten Dateizeilen im Indikator fixieren und die Suche danach starten kann.

 
Forexman77:

Es gibt eine große Datei mit Daten in dieser Form "20141231". Um die Zeichenkette in dasDatumsformat umzuwandeln,benötigen Sie die Punkte"JJJJ.MM.TT" zwischen dem Jahr, dem Monat und der Zahl.

Wie lässt sich das bewerkstelligen?

string sdt="20141231"
string dt=StringSubstr(sdt,0,4)+"."+StringSubstr(sdt,4,2)+"."+StringSubstr(sdt,6,2)
 
vicmos:

Danke, ich habe das schon erledigt. Konvertiert die Datei, wo sie ursprünglich durch Kommas getrennt war. Ich habe die Kommas in Punkte umgewandelt und eine zweite Spalte hinzugefügt, die alle mit "uniCSVed" beginnen.

Jetzt weiß ich, wie ich es programmatisch machen kann.

Jetzt stehe ich vor einer weiteren gigantischen Aufgabe: Wie kann ich mit diesen Daten einen Indikator erfüllen? Ich habe ein Skript erstellt, das korrekt funktioniert.

Aber in den Indikator, um nicht zu haben Bremsen, muss ich irgendwie zu erinnern, die Zeile, in der in der letzten Iteration der Daten erhalten wurde.

 
Forexman77:

Danke, ich habe das schon erledigt. Konvertiert die Datei, wo sie ursprünglich durch Kommas getrennt war. Ich habe die Kommas in Punkte umgewandelt und eine zweite Spalte hinzugefügt, die alle mit "uniCSVed" beginnen.

Jetzt weiß ich, wie ich es programmatisch machen kann.

Jetzt stehe ich vor einer weiteren gigantischen Aufgabe: Wie kann ich mit diesen Daten einen Indikator erfüllen? Ich habe ein Skript erstellt, das korrekt funktioniert.

Aber in den Indikator, um nicht zu haben Bremsen, muss ich irgendwie zu erinnern, die Zeile, in der in der letzten Iteration der Daten erhalten wurde.

Wahrscheinlich ist es mit FileTell(Gibt die aktuelle Position des Dateizeigers der entsprechenden geöffneten Datei zurück) und FileSeek(Verschiebt die Position des Dateizeigers um eine bestimmte Anzahl von Bytes relativ zur angegebenen Position)möglich .
 
evillive:
Dies ist wahrscheinlich mit FileTell (gibt die aktuelle Position des Dateizeigers der entsprechenden geöffneten Datei zurück) und FileSeek (verschiebt die Position des Dateizeigers um die angegebene Anzahl von Bytes relativ zur angegebenen Position) möglich .

Ich danke Ihnen! Ich habe auch auf diese Funktionen geachtet. Außerdem gibt esFileIsLineEnding. Ich werde weiter darüber nachdenken, wie man das macht.

 
lexdemon:
Wie definieren wir Ticket_first_order?

Weisen Sie den Wert von OrderTicket() einer Variablen zu. Zum Beispiel: int Ticket= OrderTicket(). Und verwenden Sie dann diesen Wert in OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET); .

Wir können es auch anders machen. Wir werden das Ticket nicht definieren, sondern nur die Bestellung finden, indem wir es versuchen (SELECT_BY_POS).

Wir werden sie bekommen:

 string Symb=Symbol();

for(i=0;i<=OrdersTotal() ;i++)

   if(OrderSelect(i,SELECT_BY_POS)==true)

 {

   if(OrderSymbol()!=Symb)continue;

   if(OrderType()==OP_BUY)

     {

   break;

     }

   }

}

 

  if(OrderOpenPrice()+10*Point<=Ask)

 OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

 

 
CJIeCaPb:

Weisen Sie den Wert von OrderTicket() einer Variablen zu. Zum Beispiel: int Ticket= OrderTicket(). Und verwenden Sie dann diesen Wert in OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET); .

Wir können es auch anders machen. Definieren wir kein Ticket, sondern suchen wir einfach die Bestellung durch Ausprobieren (SELECT_BY_POS).

Es wird schon klappen:

Die Brute-Force-Methode ist näher an der Wahrheit
 

Da dies ein Thema für Fragen von Anfängern ist, werde ich meine stellen...

1. Gibt es eine Software-API für das Herunterladen von Kursen? Idealerweise eine get/post-Anfrage.

2. Wenn es so etwas wie einen breiten Zugang nicht gibt, welche Plattformen sind am einfachsten zu analysieren und können einen Echtzeit-Zugang zu Kursen pro Sekunde bieten?

3. Sie können natürlich für alles eine Automatisierung schreiben. Aber ich würde trotzdem gerne wissen, welche Sprachen und Tools am bequemsten und beliebtesten sind?

 
Zum Beispiel ist hier https://iqoption.com/us/options/turbo (falls jemand dort angemeldet ist) eine sehr gute Echtzeitgrafik. Idealerweise würde ich es gerne analysieren, aber FireBug zeigt nicht, wohin das Skript geht, um die Anführungszeichen zu erhalten. Jede Sekunde erscheint ein Punkt auf dem Diagramm.