Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 817

 
evillive:

Potete leggere l'aiuto, è tutto lì, con esempi.


Grazie
 

Ho avuto un'idea per disegnare un indicatore dai dati del file.

Ho preso un esempio dal libro di testo. Ho rielaborato lo script per adattarlo alle mie esigenze:

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 linea"Alert" può essere rimossa.

La logica è quella di ottenere la data nell'indicatore e confrontarla con il file e assegnare il valore al buffer se è lo stesso.

Ma penso che se iniziamo a cercare ogni barra dall'inizio del file, dove i dati sono già presi in considerazione, sarà abbastanza costoso.

La domanda è come fissare le linee di file elaborate nell'indicatore e iniziare la ricerca dopo di esse?

 
Forexman77:

C'è un grande file con date in questa forma "20141231". Per convertire la stringa in formatodatetime hai bisogno dei punti"YYYY.MM.DD" tra l'anno, il mese e il numero.

Come si può fare?

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

Grazie, ho già risolto il problema. Ha convertito il file in cui era originariamente separato da virgole. Ho cambiato le virgole in punti e poi ho aggiunto una seconda colonna, tutto con "uniCSVed".

Ora saprò come farlo programmaticamente.

Ora devo affrontare un altro compito titanico: come soddisfare l'indicatore con questi dati? Ho fatto uno script e funziona correttamente.

Ma nell'indicatore, per non avere freni, ho bisogno in qualche modo di ricordare la linea in cui nell'ultima iterazione i dati sono stati ottenuti.

 
Forexman77:

Grazie, ho già risolto il problema. Ha convertito il file dove originariamente era separato da virgole. Ho cambiato le virgole in punti e poi ho aggiunto una seconda colonna, tutto con "uniCSVed".

Ora saprò come farlo programmaticamente.

Ora devo affrontare un altro compito titanico: come soddisfare l'indicatore con questi dati? Ho fatto uno script e funziona correttamente.

Ma nell'indicatore, per non avere freni, ho bisogno in qualche modo di ricordare la linea in cui nell'ultima iterazione i dati sono stati ottenuti.

Probabilmente, è possibile con FileTell(Restituisce la posizione corrente del puntatore del file aperto corrispondente) e FileSeek(Sposta la posizione del puntatore del file di un certo numero di byte relativamente alla posizione specificata).
 
evillive:
È probabilmente possibile con FileTell (restituisce la posizione corrente del puntatore del file aperto corrispondente) e FileSeek (sposta la posizione del puntatore del file del numero di byte specificato rispetto alla posizione specificata).

Grazie! Ho anche prestato attenzione a queste funzioni. C'èancheFileIsLineEnding. Penserò ulteriormente a come farlo.

 
lexdemon:
Come definiamo Ticket_first_order?

Assegna il valore di OrderTicket() a una variabile. Per esempio: int Ticket= OrderTicket(). E poi usare questo valore in OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET); .

Possiamo farlo in un altro modo. Non definiremo il biglietto, troveremo solo l'ordine provando (SELECT_BY_POS).

Lo otterremo:

 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:

Assegna il valore di OrderTicket() a una variabile. Per esempio: int Ticket= OrderTicket(). E poi usare questo valore in OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET); .

Possiamo farlo in un altro modo. Non definiamo un biglietto, ma semplicemente troviamo l'ordine con il metodo della forza bruta (SELECT_BY_POS).

Si risolverà:

Il metodo della forza bruta è più vicino alla verità
 

Visto che questo è un topic per le domande dei principianti, farò la mia...

1. Esiste un software API per scaricare le quotazioni? Idealmente una richiesta get/post.

2. Se non esiste un accesso ampio, quali sono le piattaforme più facili da analizzare e che possono fornire un accesso in tempo reale alle quotazioni una volta al secondo.

3. Si può scrivere l'automazione su qualsiasi cosa, naturalmente. Ma vorrei comunque sapere quali linguaggi e strumenti sono i più convenienti e popolari?

 
Per esempio, qui https://iqoption.com/us/options/turbo (se qualcuno è loggato lì) è un ottimo grafico in tempo reale. Idealmente vorrei analizzarlo, ma FireBug non mostra dove lo script va a prendere le citazioni. C'è un punto sul grafico ogni secondo.