Errori, bug, domande - pagina 2634

 

Ciao!

Voglio eseguire alcuni MT4 con un file batch.

Potete per favore dirmi come fare questo e perché il mio codice non funziona:

SET MY_PATH=C:\"Program Files (x86)"
%MY_PATH%\001\terminal.exe
TIMEOUT /T 160
%MY_PATH%\002\terminal.exe
TIMEOUT /T 160
%MY_PATH%\003\terminal.exe
TIMEOUT /T 160
%MY_PATH%\004\terminal.exe
TIMEOUT /T 160
%MY_PATH%\005\terminal.exe
TIMEOUT /T 160
%MY_PATH%\006\terminal.exe
TIMEOUT /T 160
%MY_PATH%\007\terminal.exe
TIMEOUT /T 160
%MY_PATH%\008\terminal.exe
TIMEOUT /T 160
%MY_PATH%\009\terminal.exe
TIMEOUT /T 160
%MY_PATH%\010\terminal.exe
TIMEOUT /T 160
%MY_PATH%\011\terminal.exe
TIMEOUT /T 160
%MY_PATH%\012\terminal.exe
TIMEOUT /T 160

Nel migliore dei casi esegue alcuni MT4, poi si blocca.

Naturalmente non c'è carenza di RAM.

Inoltre, ho provato su diversi computer

 
Igor Zakharov:

No, non è così.

il tempo del server, a proposito, non si ferma il sabato. ecco il contrario: nel terminale, il tempo del server viene aggiornato con l'arrivo di una nuova quotazione. Per esempio, avete solo un simbolo aperto nella panoramica del mercato (non solo nel tester, ma anche nella realtà). e non ci sono tick per cinque secondi - per tutto questo tempo il timer del tempo del server non si muoverà. questo è vero per il sabato: il tempo del server è in esecuzione, ma il terminale non lo sa, perché non ci sono tick. il tester mancherà semplicemente questo periodo.

Ho già controllato. Nel tester,TimeLocal funziona nei fine settimana,TimeTradeServer anche, maTimeCurrent ovviamente no. Non ci sono ticchettii, ma il tempo del server è ancora lì.

int OnInit()
{
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());

    EventSetTimer(3*3600);
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer()
{
  Print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());
}
 
Igor Zakharov:

https://www.mql5.com/ru/forum/328008/page2#comment_14166682

Come sempre, le biciclette.

La domanda qui è perché non passa.
Dopo tutto, le variabili dei parametri hanno valori iniziali.

void MxResize(int row=1, int col=1)
{
   int A[row][col];    
      
}

E se si specifica la dimensione delle misure in numeri

void MxSize(int row=1, int col=1)
{
   int A[1][1];    
      
}

Il compilatore lo salta, qual è il trucco?

Lo sviluppatore potrebbe commentare questo?

 
Andrey Khatimlianskii:

A quale scopo? Per eseguire l'auto-ottimizzazione nel fine settimana? Quindi l'impostazione di un timer da OnTick a distanza di qualche minuto funzionerebbe. Se funziona, allora i ticchettii si sono fermati e si può ottimizzare.

Se per altri scopi, formulateli.

No, non per altri scopi.

Non pensavo che TimeLocal funzionasse nei fine settimana, quindi ho fatto così: ho aggiunto qualche ora a TimeCurrent e ho controllato il giorno della settimana. Se è sabato, allora inizia a ottimizzare.

Naturalmente non posso essere sicuro dell'inizio del sabato, perché il mercato chiude diversamente il venerdì o nei giorni festivi.

Inoltre, non ho trovato da nessuna parte un mezzo per determinare se il mercato è chiuso o no.

 
Petros Shatakhtsyan:

No, non per altri scopi.

Non pensavo che TimeLocal funzionasse nei fine settimana, quindi ho fatto così: ho aggiunto qualche ora a TimeCurrent e ho controllato il giorno della settimana. Se è sabato, allora inizia a ottimizzare.

Naturalmente non posso essere sicuro dell'inizio del sabato, perché il mercato chiude diversamente il venerdì o nei giorni festivi.

Inoltre, non ho trovato da nessuna parte un mezzo per determinare se il mercato è chiuso o no.

Avete provato?

SymbolInfoSessionTrade

o

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Qualcosa di loro dovrebbe essere buono

 
Aleksey Mavrin:

L'avete provato?

SymbolInfoSessionTrade

o

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Uno di loro dovrebbe essere buono, ricordo.

No, non l'ho fatto. Il manuale non specifica come determinare se il mercato è aperto o no.

Il fatto è che quando il mercato "apre" il lunedì, per esempio presso un broker le quotazioni iniziano ad arrivare alle 02:05 ma le transazioni non vengono accettate per alcuni minuti e viene visualizzato "Mercato chiuso".

Non so se questo aiuterà o meno.

TEMPO D'INIZIO DEL SIMBOLO

Data di inizio dello strumento (di solito usata per i futures)

 
Petros Shatakhtsyan:

No, non l'ho fatto. La guida non dice specificamente come determinare se il mercato è aperto o no.

Il fatto è che quando il mercato si "apre" il lunedì, per esempio in un broker le quotazioni iniziano ad arrivare alle 02:05, ma le operazioni non vengono accettate per qualche minuto in più, viene fuori "Mercato chiuso".

Non so se questo aiuterà o meno.

TEMPO D'INIZIO DEL SIMBOLO

Questo è il symbol_start_time (di solito usato per i futures)

IlSymbolInfoSessionTrade mostra quando inizia il commercio e ilSymbolInfoSessionQuote quando arrivano le quotazioni.

su: questo dovrebbe aiutare

boolIsTradeAllowed(
const string symbol// simbolo
datetimetested_time//time
);

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

Come sempre, le biciclette.

La domanda qui è perché una tale voce non passa.
Dopo che tutte le variabili dei parametri hanno valori iniziali.

E se si specifica la dimensione delle misure in numeri

allora il compilatore lo salta, qual è la fregatura?

Lo sviluppatore commenterà questo?

Roman, questa è la seconda volta che sei caduto in una elementare mancanza di volontà di leggere la documentazione.

Solo unintero può essere un indice di matrice. Non sono ammesse più di quattro matrici dimensionali. La numerazione degli elementi della matrice inizia con 0. L'ultimo elemento di una matrice unidimensionale è numerato 1 meno della dimensione della matrice, cioè l'accesso all'ultimo elemento di una matrice di 50 interi sarà come a[49]. Lo stesso vale per gli array multidimensionali, con una dimensione indicizzata da 0 alla dimensione 1. L'ultimo elemento dell'array bidimensionale nell'esempio sarebbe come m[6][49].

Gli array statici non possono essere rappresentati come serie temporali, cioè la funzione ArraySetAsSeries() che imposta l'accesso agli elementi dell'array dalla fine di un array al suo inizio non è applicabile ad essi. Se volete fornire l'accesso a un array come nelle serie temporali, usate un oggetto array dinamico.

Se si accede al di fuori dell'array, il sottosistema di esecuzione genererà un errore critico e l'esecuzione del programma si fermerà.

E nella documentazione di mql4, se la memoria non mi inganna, si diceva chiaramente che le variabili non dovrebbero essere usate come dimensione di un array.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов...
 
Roman:

Come sempre, le biciclette.

La domanda qui è perché una tale voce non funziona.
Dopo tutto, le variabili da parametri, hanno valori iniziali.

E se si specifica la dimensione delle misure in numeri

Allora il compilatore lo salta, qual è il trucco?

Lo sviluppatore potrebbe commentare questo?

Non sono uno sviluppatore, ma commenterò.

Per un array statico, il compilatore deve allocare un certo numero di byte in memoria già al momento della compilazione.

Quanta memoria deve essere allocata dal compilatore se non conosciamo riga e colonna al momento della compilazione?

I valori iniziali sono utilizzati solo se i parametri sono omessi durante la chiamata. I parametri effettivi sono noti solo in fase di esecuzione.

Quindi, niente trucchi, imparate la lingua.

 
Aleksey Mavrin:

No, non è così,SymbolInfoSessionTrade mostra quando c'è trading eSymbolInfoSessionQuote quando arrivano le quotazioni.

ap: questo dovrebbe aiutare.

boolIsTradeAllowed(
const string symbol// simbolo
datetimetested_time//time
);

Penso che non sia quello giusto. C'è un argomento speciale qui: https://www.mql5.com/ru/forum/40295

Non l'ho guardato fino in fondo, soprattutto perché è per MQL4.

Non credo che il server debba inviare le quotazioni dei simboli se il mercato è chiuso.

Il mio robot non è realmente influenzato da questo perché dopo che il mercato "apre" quando arrivano i tick analizza la tendenza, le loro inversioni, e questo richiede un po' di tempo. Durante questo periodo il mercato si apre.

Ma è d'intralcio se vogliamo eseguire manualmente alcuni trade durante questo periodo. Se l'esecuzione è basata sul mercato, la richiesta è in attesa fino all'apertura del mercato e viene naturalmente eseguita al prezzo corrente.

La funzione diretta che riceve il nome del simbolo e restituisce vero/falso (mercato aperto/chiuso) è chiaramente mancante.

Как правильно выяснить, что рынок закрыт? (mql4)
Как правильно выяснить, что рынок закрыт? (mql4)
  • 2015.01.31
  • www.mql5.com
Перевел советника в режим работы OnTimer() теперь когда рынок закрыт он этого не понимает и пытается торговать, в общем обращается к серверу и естественно получает ошибки и забивает логи журнала.
Motivazione: