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

 
Per favore ditemi, lo smiley sorride ma l'advisor non si accende...come lo imposto correttamente?...grazie!
 
zorber:

Buona giornata a tutti,

Piazzo un ordine in sospeso (ora di creazione, per esempio 11:31)
Allora questo ordine scatta alle 12:01

Domanda: Come faccio a sapere la data e l'ora in cui l'ordine pendente è stato piazzato se l'ordine è già entrato nel mercato e la funzione OrderOpenTime( ) restituisce l'ora di entrata nel mercato.

Qualcuno sa come risolvere questo problema?

Grazie in anticipo.


In MT4 dalla lista degli ordini nessun modo.

Un modo è quello di ricordare il tempo di collocamento

 
Roger:
È giunto il momento di capire il file di testo, come è organizzato e in cosa consiste. Stampe la posizione del cursore dopo ogni lettura di linea, usando il tasto
int FileTell( int handle)
Sarà subito chiaro.

L'ironia della situazione è che la domanda che ho posto sopra è stata innescata da una situazione che corrisponde quasi al tuo consiglio...

Per capire come funzionano le funzioni FileIsEnding e FileIsLineEnding, ho scritto il seguente script:

//+------------------------------------------------------------------------------------------+
//|                                                                   Конец_Строки_Файла.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
#property show_inputs                                                    //выводим перед запуском скрипта окно свойств
extern int  position=0;                                                  //внешняя переменная: смещение файлового указателя ОТ НАЧАЛА ФАЙЛА (в БАЙТАХ)
//---------------------------------------------------------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   string name="Копия Запись чисел в файл.csv";                          //имя создаваемого файла
   bool h;                                                               //переменная: значение функции FileIsEnding
   bool h_l;                                                             //переменная: значение функции FileIsLineEnding
   int error;                                                            //переменная: ошибка
   int handle=FileOpen(name,FILE_CSV|FILE_WRITE,';');                    //открываем заданный файл n записываем туда данные
   int запись=FileWrite(handle,DoubleToStr(1.3584,4));                   //записываем число в файл csv (в преобразованном виде, т.е в виде текста)
   FileClose(handle);                                                    //закрываем файл
//---------------------------------------------------------------------------------------- 2 -
   handle=FileOpen(name,FILE_CSV|FILE_READ,';');                         //открываем заданный файл
   bool pos=FileSeek(handle,position,SEEK_SET);                          //смещаем от начала вправо указатель файла
   double чтение=FileReadNumber(handle);                                 //считываем число из текущей позиции (уже измененной функцией FileSeek) файлового указателя
   int size=FileSize(handle);                                            //вычисляем размер заданного файла
   h=FileIsEnding(handle);                                               //устанавливаем текущее значение переменной h
   h_l=FileIsLineEnding(handle);                                         //устанавливаем текущее значение переменной h_l
   error=GetLastError();                                                 //значение ошибки, производимой функцией FileIsEnding
   if(error!=0)Alert("Текущая ошибка ",error);                           //если код текущей ошибки не равен 0, то получаем номер текущей ошибки
   FileClose(handle);                                                    //закрываем файл
//----------------------------------------------------------------------------------------- 3 -
   Comment("Размер файла ",name," составил ",size," байт",
           "\nФункция FileSeek вернула: ",pos,
           "\nФункция FileReadNumber(handle) вернула: ",чтение,
           "\nФункция FileIsLineEnding(handle) вернула: ",h_l,
           "\nФункция FileIsEnding(handle) вернула: ",h,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 4 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 5 -

Nel blocco 1-2, ho aperto e scritto il numero 1,3584 nel file (che la funzione DoubleToStr converte in testo).

Nel blocco 3-4, ho aperto il file e ho letto il numero scritto lì.

La variabile esterna extern int position dovrebbe spostare il puntatore del file usando la funzione FileTell per cercare di capire come funzionano le funzioni FileIsEnding e FileIsLineEnding e cos'è il puntatore del file.

Il libro MQL4.community dice che il puntatore del file è un analogo del cursore del testo.

MA, eseguendo lo script diverse volte e aumentando ogni volta la variabile esterna postiton di 1 (cioè, spostando così il puntatore del file di 1 byte a destra dell'inizio del file), la funzione Comment emette una serie di messaggi, ad esempio

se postiton=7, il messaggio sarebbe come questo:

se postiton=7, il messaggio sarebbe come questo:


Capisco che siccome le costanti di stringa occupano 8 byte nella memoria del PC e c'è solo 1 numero convertito nel file, spostando il puntatore del file di 8 byte a destra mi darà un errore 4099 (che significa che è stata raggiunta la fine del file). Ho anche capito che la funzione FileIsEnding restituisce 1 (true) per lo stesso motivo (fine del file raggiunta). Ma non capisco perché la funzione FileIsLineEnding restituisce 0 (falso, che significa che il puntatore del file non ha raggiunto la fine della linea). Dopo tutto, basandomi sull'analogia data nel libro MQL (un puntatore di file è più o meno lo stesso di un cursore di testo), ho ragionato che la fine del file è anche la fine della stringa. Ma dato che FileIsEnding e FileIsLineEnding hanno valori diversi quando il puntatore del file raggiunge la fine del file, ero perplesso in termini di COSA sia un puntatore FILE? Ma siccome dovevo iniziare da qualche parte per fare la domanda, l'ho fatta come appare a pagina 433.

Quindi ho un'enorme richiesta di liberare il mio cervello riscaldato e rispondere alle seguenti domande (o almeno una che mi aiuti a capire il resto delle domande):

1. Cosa c'è di sbagliato nella mia comprensione del puntatore di file (domanda data nel mio post a p.433)

2. Il significato della frase "Se il controllo specificato (le ultime 2 righe del blocco 5-6) viene rimosso, allora un oggetto extra verrà creato in fase di esecuzione. E solo dopo che la condizione di fine del ciclo while sarà attivata e il controllo sarà trasferito al blocco 8-9" (la domanda è data nel mio post a pagina 433)

3. Perché FileIsLineEnding restituisce 0 invece di 1 quando si raggiunge la fine del file.

P.S. Per non ingombrare il forum, grazie in anticipo per la risposta.

 

Buon tempo a tutti voi

Per favore ditemi come disegnare una linea orizzontale ((Bid+Ask)/2+0.00333):)

 

Buon pomeriggio!

Signori cosa fare?

Il computer mobile non può vedere la rete "NO COMMUNICATION".

 
Ragen:

Buon pomeriggio!

Signori cosa fare?

Il computer mobile non può vedere la rete "NO COMMUNICATION".


creare un nuovo demo. quello vecchio deve essere stato cancellato per motivi di tempo.
 
sergeev:

Crea un nuovo demo per te. quello vecchio deve essere stato cancellato a causa della scadenza

Non sono su una demo, ma su tre conti reali.

Ma tutti dallo stesso dtz, questo influenza qualcosa?

 
Ragen:

Non sono su una demo, ma su tre conti reali.

Ma tutti dallo stesso dtz, questo può influenzare qualcosa?


:) bene, chiama la società di intermediazione. cosa ha a che fare questo con il forum di programmazione MQL?
 
sergeev:

Cosa ha a che fare questo con il forum di programmazione MQL?

Per qualche motivo, il terminale è stato immediatamente "rotolante" :)

Ci sono!

 

Professionisti, per favore consigliate. Se ho un ordine di stop pendente piazzato, ma il prezzo è entrato con uno spread esteso che supera lo stoploss.... Cosa succederà?

L'ordine sarà mangiato dalla diffusione... O si verificherà un errore e l'ordine non verrà attivato?