L'intera idea è che diciamo che ho delle directory con dei file da processare all'indirizzo "..\MQL5\Files\00\dir_01". Usando il vostro meraviglioso codice, ottengo il percorso di queste cartelle in un array e voglio accedere a questi file, sapendo esattamente quali file devo processare, e devo impostare il percorso di questi file, per esempio "MQL5\Files\00\dir_01\A\test.csv" e il codice restituisce "MQL5\Files\00\dir_01\A\", e sto chiedendo se posso modificarlo per restituire il percorso ottimale che sarà applicabile in ulteriore codice.
L'intera idea è che diciamo che ho delle directory con dei file da processare all'indirizzo "..\MQL5\Files\00\dir_01". Usando il vostro meraviglioso codice, ottengo il percorso di queste cartelle in un array e voglio accedere a questi file, sapendo esattamente quali file devo processare, e devo impostare il percorso di questi file, per esempio "MQL5\Files\00\dir_01\A\test.csv" e il codice restituisce "MQL5\Files\00\dir_01\A\", e sto chiedendo se può essere modificato per restituire il percorso ottimale che sarà applicabile in ulteriore codice.
Semplicemente non capisci cos'è un doppio slash - è un carattere che è denotato da due nella sintassi: primo slash comando, secondo slash cosa.
\n, \r, \t, \" e \" sono caratteri che sono impostati da questa regola. Cioè c'è sempre una barra nel percorso.
Semplicemente non capisci cos'è una doppia barra - è un carattere, che nella sintassi è denotato da due: la prima barra di comando, la seconda barra cosa.
\n, \r, \t, \" e \" sono caratteri che sono impostati da questa regola. Cioè c'è sempre una barra nel percorso.
Non escludo che mi manchi qualcosa, ma ho bisogno di due slash per generare il percorso del file, non uno.
Sto cercando di passare da MQL4 a MQL5 e non riesco a trovare l'ultima posizione chiusa. In MQL5, quando inviamo un ordine, è un ordine, e quando viene aperto diventa una posizione, e logicamente dovrebbe essere messo nella cronologia delle posizioni e gli ordini pendenti cancellati dovrebbero essere messi nella cronologia degli ordini, ma tutto quello che vedo è la cronologia degli ordini delle operazioni, quindi non so dove trovare una posizione chiusa.
Ho provato in questo modo:
ulong GetLastCloseTicket()
{
datetime to=TimeCurrent();
datetime from=to-3*PeriodSeconds(PERIOD_D1);
HistorySelect(from,to);
int Htotal=HistoryOrdersTotal();
ulong lastOrders[2];
ulong ticket;
ArrayInitialize(lastOrders, 0);
for (uint j = 0; j < Htotal; j++)
{
if(ticket= HistoryOrderGetTicket(j)) {
if (HistoryOrderGetInteger(ticket,ORDER_TYPE)== ORDER_TYPE_BUY || HistoryOrderGetInteger(ticket,ORDER_TYPE)== ORDER_TYPE_SELL) {
Print("ticket = " +ticket+";");
Print("ORDER_TYPE = " +ORDER_TYPE+";");
// хранить самый последний (недавно закрытый) ордер в lastOrders[1]// а предпоследний в lastOrders[0]if (ticket > lastOrders[0]) {
if (ticket > lastOrders[1]) {
lastOrders[0] = lastOrders[1];
lastOrders[1] = ticket;
} else {
lastOrders[0] = ticket;
}
}
}
}
}
Print("lastOrders[1] = " +lastOrders[1]+";");
return (lastOrders[1]);
}
Ma mostra i numeri delle posizioni aperte e chiuse. ORDER_TYPE mostra sempre 4, anche questo non è chiaro.
Ho provato a cambiare ORDER in DEAL, ma non funziona nemmeno questo. Per favore, aiutatemi, cosa c'è che non va?
Vladimir, grazie.Ho già familiarità con la funzioneRefreshRatesdella classeCSymbolInfo .L'ho visto nelle sue opere e l'ho letto in un abbecedario.
La chiamata di questa funzione inOnTick e l' output dei valori di prezzo inComment sono anche chiari per me dall'esempio.Anche la procedura inOnInit per controllare il simbolo corrente mi è chiara.
In attesa dell'esempio con la nuova barra, cercherò di fare un po' di pratica con il tuo esempio, non l'ho usato nella pratica. Lo proverò.
Quindi, questo esempio funziona solo nel momento in cui nasce una nuova barra.
Questo esempio utilizza le variabili statichePrevBars,prev_ask eprev_bid. L'essenza delle variabili statiche è.
Levariabili locali dichiarate con la parola chiave static mantengono i loro valori pertutta la durata della funzione. In ogni chiamata successiva della funzione, queste variabili locali contengono i valori che avevano nella chiamata precedente.
Così le nostre tre variabili statiche(PrevBars,prev_ask eprev_bid) sono variabili locali dichiarate all'interno della funzione OnTick e memorizzano i loro valori, che avevano quando sono entrate nella funzione OnTick prima.
PrevBars memorizza il tempo della barra precedente. Questo tempo viene confrontato contime_0, il tempo della barra corrente. FinchéPrevBars è uguale atime_0, siamo alla barra corrente e usciamo dalla funzione OnTick. Lo stesso vale per le variabili che memorizzano i prezzi della barra precedente: prima visualizziamo i prezzi precedenti e attuali e poi scriviamo i prezzi attuali nelle variabiliprev_ask eprev_bid.
Sì, capisco che lo slash è un comando, ma ho bisogno di scrivere il percorso, e uso il doppio slash per questo.
Ecco il percorso per esempio
Ho ottenuto una stringa nell'array Folders[0]:
Voglio accedere a un file con lo stesso nome ma in directory diverse cambiando l'indice dell'array.
ma questo comando otterrà un errore, vero?
Alexey, prendi un esempio dalla documentazione
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- неправильный способ открытия файлаstringterminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
stringfilename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
if(filehandle<0)
{
Print("Неудачная попытка открыть файл по абсолютному пути");
Print("Код ошибки ",GetLastError());
}
//--- правильный способ работы в "файловой песочнице"ResetLastError();
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
FileClose(filehandle);
Print("FileOpen OK");
}
elsePrint("Операция FileOpen неудачна, ошибка ",GetLastError());
//--- еще один пример с созданием вложенной директории в MQL5\Files\string subfolder="Research";
filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
FileClose(filehandle);
Print("Файл должен быть создан в папке "+terminal_data_path+"\\"+subfolder);
}
elsePrint("Операция FileOpen неудачна, ошибка ",GetLastError());
}
e stampare le due variabili stringa evidenziate nel codice di esempio. Trovate le differenze e capite che la doppia barra è scritta solo nel codice del programma, ma solo una è lasciata al momento della compilazione e una è usata nel percorso del file.
[in] Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in] значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...
Dove potrei usarlo?
L'intera idea è che diciamo che ho delle directory con dei file da processare all'indirizzo "..\MQL5\Files\00\dir_01". Usando il vostro meraviglioso codice, ottengo il percorso di queste cartelle in un array e voglio accedere a questi file, sapendo esattamente quali file devo processare, e devo impostare il percorso di questi file, per esempio "MQL5\Files\00\dir_01\A\test.csv" e il codice restituisce "MQL5\Files\00\dir_01\A\", e sto chiedendo se posso modificarlo per restituire il percorso ottimale che sarà applicabile in ulteriore codice.
Dove potrei usarlo?
L'intera idea è che diciamo che ho delle directory con dei file da processare all'indirizzo "..\MQL5\Files\00\dir_01". Usando il vostro meraviglioso codice, ottengo il percorso di queste cartelle in un array e voglio accedere a questi file, sapendo esattamente quali file devo processare, e devo impostare il percorso di questi file, per esempio "MQL5\Files\00\dir_01\A\test.csv" e il codice restituisce "MQL5\Files\00\dir_01\A\", e sto chiedendo se può essere modificato per restituire il percorso ottimale che sarà applicabile in ulteriore codice.
Semplicemente non capisci cos'è un doppio slash - è un carattere che è denotato da due nella sintassi: primo slash comando, secondo slash cosa.
\n, \r, \t, \" e \" sono caratteri che sono impostati da questa regola. Cioè c'è sempre una barra nel percorso.
Semplicemente non capisci cos'è una doppia barra - è un carattere, che nella sintassi è denotato da due: la prima barra di comando, la seconda barra cosa.
\n, \r, \t, \" e \" sono caratteri che sono impostati da questa regola. Cioè c'è sempre una barra nel percorso.
Non escludo che mi manchi qualcosa, ma ho bisogno di due slash per generare il percorso del file, non uno.
Non escludo che sto fraintendendo qualcosa, ma ho bisogno di due slash per generare il percorso del file, non uno.
Non hai bisogno di due slash.
Prova a stampare una, due o tre barre nel registro. Forse allora capirete.Non hai bisogno di due slash.
Provate a stampare uno, due o tre slash nel registro. Forse allora capirete.Sì, capisco che lo slash è un comando, ma ho bisogno di scrivere il percorso, e uso il doppio slash per questo.
Ecco il percorso.
Ho ottenuto una stringa nell'array Folders[0]:
00\dir_01\A\Voglio accedere a un file con lo stesso nome ma in directory diverse cambiando l'indice dell'array.
ma questo comando otterrà un errore, vero?
È uno spreco.
Ciao!
Sto cercando di passare da MQL4 a MQL5 e non riesco a trovare l'ultima posizione chiusa.
In MQL5, quando inviamo un ordine, è un ordine, e quando viene aperto diventa una posizione, e logicamente dovrebbe essere messo nella cronologia delle posizioni e gli ordini pendenti cancellati dovrebbero essere messi nella cronologia degli ordini, ma tutto quello che vedo è la cronologia degli ordini delle operazioni, quindi non so dove trovare una posizione chiusa.
Ho provato in questo modo:
Ma mostra i numeri delle posizioni aperte e chiuse. ORDER_TYPE mostra sempre 4, anche questo non è chiaro.
Ho provato a cambiare ORDER in DEAL, ma non funziona nemmeno questo.
Per favore, aiutatemi, cosa c'è che non va?
Vladimir, grazie.Ho già familiarità con la funzioneRefreshRates della classeCSymbolInfo .L'ho visto nelle sue opere e l'ho letto in un abbecedario.
La chiamata di questa funzione inOnTick e l' output dei valori di prezzo inComment sono anche chiari per me dall'esempio.Anche la procedura inOnInit per controllare il simbolo corrente mi è chiara.
In attesa dell'esempio con la nuova barra, cercherò di fare un po' di pratica con il tuo esempio, non l'ho usato nella pratica. Lo proverò.
Quindi, questo esempio funziona solo nel momento in cui nasce una nuova barra.
Questo esempio utilizza le variabili statichePrevBars,prev_ask eprev_bid. L'essenza delle variabili statiche è.
Levariabili locali dichiarate con la parola chiave static mantengono i loro valori pertutta la durata della funzione. In ogni chiamata successiva della funzione, queste variabili locali contengono i valori che avevano nella chiamata precedente.
Così le nostre tre variabili statiche(PrevBars,prev_ask eprev_bid) sono variabili locali dichiarate all'interno della funzione OnTick e memorizzano i loro valori, che avevano quando sono entrate nella funzione OnTick prima.
PrevBars memorizza il tempo della barra precedente. Questo tempo viene confrontato contime_0, il tempo della barra corrente. FinchéPrevBars è uguale atime_0, siamo alla barra corrente e usciamo dalla funzione OnTick. Lo stesso vale per le variabili che memorizzano i prezzi della barra precedente: prima visualizziamo i prezzi precedenti e attuali e poi scriviamo i prezzi attuali nelle variabiliprev_ask eprev_bid.
Forum sul trading, sistemi di trading automatico e test di strategia
FAQ da principianti MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2018.12.05 00:39
So che è un comando slash, ma ho bisogno di scrivere il percorso.
Ecco il percorso, diciamo
Ho ottenuto una stringa nell'array Folders[0]:
00\dir_01\A\Voglio accedere a un file con lo stesso nome ma in directory diverse cambiando l'indice dell'array.
ma questo comando otterrà un errore, vero?
Non ci sarà un errore. Non hai ancora capito cos'è un doppio slash.
Sì, capisco che lo slash è un comando, ma ho bisogno di scrivere il percorso, e uso il doppio slash per questo.
Ecco il percorso per esempio
Ho ottenuto una stringa nell'array Folders[0]:
Voglio accedere a un file con lo stesso nome ma in directory diverse cambiando l'indice dell'array.
ma questo comando otterrà un errore, vero?
Alexey, prendi un esempio dalla documentazione
e stampare le due variabili stringa evidenziate nel codice di esempio. Trovate le differenze e capite che la doppia barra è scritta solo nel codice del programma, ma solo una è lasciata al momento della compilazione e una è usata nel percorso del file.