Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 817

 
evillive:

Vous pouvez lire l'aide, tout y est, avec des exemples.


Merci.
 

J'ai eu l'idée de dessiner un indicateur à partir des données du fichier.

J'ai pris un exemple dans le manuel. J'ai retravaillé le script pour l'adapter à mes besoins :

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

La ligne"Alerte" peut être supprimée.

La logique est de récupérer la date dans l'indicateur, de la comparer au fichier et d'affecter la valeur au tampon si elle est identique.

Mais je pense que si nous commençons à chercher chaque barre depuis le début du fichier, où les données sont déjà prises en compte, cela sera assez coûteux.

La question est de savoir comment fixer les lignes du fichier traité dans l'indicateur et commencer la recherche après elles ?

 
Forexman77:

Il y a un grand fichier avec des dates sous cette forme "20141231". Pour convertir la chaîne au formatdate, vous avez besoin des points"YYYY.MM.DD" entre l'année, le mois et le chiffre.

Comment cela peut-il être fait ?

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

Merci, j'ai déjà réglé le problème. Convertit le fichier où il était à l'origine séparé par des virgules. J'ai changé les virgules en points et j'ai ajouté une deuxième colonne, toutes avec "uniCSVed".

Maintenant je vais savoir comment le faire par programme.

Je suis maintenant confronté à une autre tâche titanesque : comment remplir l'indicateur avec ces données ? J'ai créé un script qui fonctionne correctement.

Mais dans l'indicateur, pour ne pas avoir de freins, j'ai besoin d'une manière ou d'une autre de me rappeler la ligne dans laquelle dans la dernière itération des données a été obtenue.

 
Forexman77:

Merci, j'ai déjà réglé le problème. Convertit le fichier où il était à l'origine séparé par des virgules. J'ai changé les virgules en points et j'ai ajouté une deuxième colonne, toutes avec "uniCSVed".

Maintenant je vais savoir comment le faire par programme.

Je suis maintenant confronté à une autre tâche titanesque : comment remplir l'indicateur avec ces données ? J'ai créé un script qui fonctionne correctement.

Mais dans l'indicateur, pour ne pas avoir de freins, j'ai besoin d'une manière ou d'une autre de me rappeler la ligne dans laquelle dans la dernière itération des données a été obtenue.

Probablement, c'est possible avec FileTell(Renvoie la position actuelle du pointeur de fichier du fichier ouvert correspondant) et FileSeek(Déplace la position du pointeur de fichier d'un nombre spécifié d'octets par rapport à la position spécifiée).
 
evillive:
C 'est probablement possible avec FileTell (Renvoie la position actuelle du pointeur de fichier du fichier ouvert correspondant) et FileSeek (Déplace la position du pointeur de fichier du nombre d'octets spécifié par rapport à la position spécifiée).

Merci ! J'ai également prêté attention à ces fonctions. Il y aaussiFileIsLineEnding. Je vais réfléchir davantage à la manière de procéder.

 
lexdemon:
Comment définir Ticket_first_order ?

Assignez la valeur de OrderTicket() à une variable. Par exemple : int Ticket= OrderTicket(). Et ensuite utiliser cette valeur dans OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET) ; .

Nous pouvons le faire d'une autre manière. Nous ne définissons pas le ticket, nous trouvons simplement l'ordre en essayant (SELECT_BY_POS).

Nous l'aurons :

 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:

Assignez la valeur de OrderTicket() à une variable. Par exemple : int Ticket= OrderTicket(). Et ensuite utiliser cette valeur dans OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET) ; .

Nous pouvons le faire d'une autre manière. Ne définissons pas de ticket, mais trouvons simplement la commande en essayant (SELECT_BY_POS).

Ça va s'arranger :

La méthode de la force brute est plus proche de la vérité
 

Puisque c'est un sujet pour les questions des débutants, je vais poser les miennes...

1. Existe-t-il une API logicielle pour le téléchargement des devis ? Idéalement, une requête get/post.

2. Si l'accès large n'existe pas, quelles sont les plateformes les plus faciles à analyser et qui peuvent fournir un accès en temps réel aux cotations une fois par seconde ?

3. Vous pouvez écrire des automatismes sur n'importe quoi, bien sûr. Mais j'aimerais quand même savoir quels sont les langages et les outils les plus pratiques et les plus populaires ?

 
Par exemple, le site https://iqoption.com/us/options/turbo (si quelqu'un y est connecté) est un très bon graphique en temps réel. Idéalement, je voudrais l'analyser, mais FireBug ne montre pas où le script va chercher les guillemets. Il y a un point sur le graphique toutes les secondes.
Raison: