Errori, bug, domande - pagina 1153

 
joo:
Il video nei messaggi del forum non viene riprodotto. c'è uno spazio vuoto al posto del video. provato con molti browser. dispositivo - Lenovo K900.
Il video viene riprodotto bene sul sito di youtube. e su altri siti di youtube il video viene riprodotto ....
Controlliamo.
 
Renat:
Come si esegue un programma installato in Windows 8.1? Con /portable?
No. Di solito lo eseguo senza /portable. Non solo, ma per essere sicuro, ho installato e disinstallato MT5 due volte. Dopo la disinstallazione, ho cancellato manualmente anche le cartelle in AppData.
 

Se si lavora in Windows 8.1 come utente normale, il terminale MT5 non ricorda i numeri di conto inseriti. Anche MetaEditor non salva lo stato della memoria MQL5. Questo può essere risolto solo se si lavora come amministratore o se "Run this program as administrator" è selezionato nelle proprietà di metaeditor64.exe e terminal64.exe.

Ma in questo caso, quando si esegue con un normale account utente, devo inserire la password dell'amministratore - è corretto, considerando i problemi di sicurezza?

P.S. Il terminale è l'ultimo - ma il problema non è nuovo.


 

Buon pomeriggio.

Ho un indicatore abbastanza impegnativo in termini di risorse (che è calcolato da 7+ array), si carica normalmente solo "a intermittenza" nel terminale, non so per quale motivo. Nessun errore in esso, è qualcosa con il terminale MT5 stesso...

Vorrei provarlo nel tester, ma nel tester continua a dare un errore: ho allegato uno screenshot.

Per favore, c'è qualche possibilità di elaborare l'errore prima dell'avvio del tester e ricaricare forzatamente l'indicatore nel tester, se appare?

 
M1k3:

Buon pomeriggio.

Ho un indicatore abbastanza impegnativo in termini di risorse (che è calcolato da 7+ array), si carica normalmente solo "a intermittenza" nel terminale, non so per quale motivo. Nessun errore in esso, è qualcosa con il terminale MT5 stesso...

Vorrei provarlo nel tester, ma nel tester continua a darmi un errore: ho allegato uno screenshot.

Per favore, c'è un modo per gestire l'errore prima dell'avvio del tester e ricaricare forzatamente l'indicatore nel tester, se appare?

.

L'errore è nel tuo codice, non nel terminale. C'è anche un suggerimento su dove cercare l'errore: linea 302, posizione 49. Questo errore è un array fuori dal suo range. Per esempio, avete un array con dimensione [4], ma state cercando di ottenere il valore [5].
 
barabashkakvn:
L'errore è nel tuo codice, non nel terminale. C'è anche un suggerimento su dove cercare l'errore: linea 302, posizione 49. Questo errore è un'uscita dell'array dal suo range. Per esempio, avete un array con dimensione [4], ma state cercando di ottenere il valore [5].

Non riesco a risolverlo, l'array si riempie di virgolette (100%) o di valori di indicatori. Nel terminale in un certo momento il valore delle quotazioni o degli indicatori X esce NULL, e in un altro momento esce un valore normale (non sulla barra 0). Non so perché succede.

Il valore NULL è sempre presente nel tester. L'errore si verifica quando cerco di moltiplicare una quota o un valore di indicatore, ma non c'è NULL.

 
M1k3:

Non riesco a risolverlo, l'array si riempie di virgolette (100%) o di valori di indicatori. Nel terminale in un certo momento il valore delle quotazioni X dà NULL, e in un altro momento dà un valore normale (non sulla barra 0). Non so perché succede.

Il valore NULL è sempre presente nel tester. L'errore si verifica quando cerco di moltiplicare una quota o un valore di indicatore, ma non c'è NULL.

Usare il debug del codice o inserire gli operatori Print() nelle sezioni di codice dubbie. In questo modo capirete dov'è l'errore.
 
barabashkakvn:

Questo codice è il codice dell'indicatore e della funzione OnInit(). Di conseguenza, OnInit() viene elaborato al momento dell'avvio del terminale - e questo codice visualizza correttamente il prezzo di tick. È OnInit() e non init() - come il tuo. Se l'errore si ripete, invia il codice e la versione del terminale.

L'errore è che stai cercando di ricevere informazioni di mercato (MarketInfo...) in OnInit() dall'indicatore. L'indicatore non ha funzioni di trading e quindi, durante l'inizializzazione non aspetta l'aggiornamento delle informazioni del conto e del mercato.

Per ottenere i dati di mercato, usa OnInit() dell'EA, non l'indicatore.

Se volete usare le informazioni di mercato nell'indicatore, dovete inserire un flag (bool) e controllare la correttezza delle informazioni del conto (Account...) nella funzione OnCalculate() nel caso della prima esecuzione o in OnInit() se cambiate timeframe o impostazioni dell'indicatore.

Non ingannare la gente. Indipendentemente dal fatto che usiate init() o OnInit() dell'indicatore, il terminale non garantisce che questo gestore venga chiamato quando il login è già stato eseguito e il valore del tick è noto. Quindi è facile ottenere zero anche in OnInit. Inoltre non c'è alcun divieto sull'uso di informazioni di mercato negli indicatori. Ma in questo caso dobbiamo davvero trasferire l'inizializzazione alla parte di calcolo dell'indicatore ed eseguirla sui primi tick.
 
marketeer:
Non ingannare la gente. Indipendentemente dall'utilizzo di init() o OnInit() dell'indicatore, il terminale non garantisce che questo gestore venga chiamato quando il login è fatto e il valore del tick è noto. Quindi è facile ottenere zero anche in OnInit. Inoltre non c'è alcun divieto sull'uso di informazioni di mercato negli indicatori. Ma in questo caso dobbiamo davvero trasferire l'inizializzazione alla parte di calcolo dell'indicatore ed eseguirla sui primi tick.

Non ci sono funzioni di trading nell'indicatore. L'Expert Advisor ha funzioni commerciali. Pertanto, quando l'EA chiama l'ambiente di mercato e/o le informazioni sul conto, tutto va correttamente in OnInit().

Per provare le mie parole, ecco un semplice EA in cui OnInit() si riferisce all'ambiente di trading e alle informazioni del conto:

//+------------------------------------------------------------------+
//|                                                  test_expert.mq4 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- выведем всю информацию, доступную из функции AccountInfoDouble()
      printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
      printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
      printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
      printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
      printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
      printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
      printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
      printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
      printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
      //--- MarketInfo
      Print("Symbol=",Symbol());
      Print("Минимальная дневная цена=",MarketInfo(Symbol(),MODE_LOW));
      Print("Максимальная дневная цена=",MarketInfo(Symbol(),MODE_HIGH));
      Print("Время поступления последней котировки=",(MarketInfo(Symbol(),MODE_TIME)));
      Print("Последняя поступившая цена предложения=",MarketInfo(Symbol(),MODE_BID));
      Print("Последняя поступившая цена продажи=",MarketInfo(Symbol(),MODE_ASK));
      Print("Размер пункта в валюте котировки=",MarketInfo(Symbol(),MODE_POINT));
      Print("Количество цифр после запятой в цене инструмента=",MarketInfo(Symbol(),MODE_DIGITS));
      Print("Спрэд в пунктах=",MarketInfo(Symbol(),MODE_SPREAD));
      Print("Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах=",MarketInfo(Symbol(),MODE_STOPLEVEL));
      Print("Размер контракта в базовой валюте инструмента=",MarketInfo(Symbol(),MODE_LOTSIZE));
      Print("Размер минимального изменения цены инструмента в валюте депозита=",MarketInfo(Symbol(),MODE_TICKVALUE));
      Print("Минимальный шаг изменения цены инструмента в пунктах=",MarketInfo(Symbol(),MODE_TICKSIZE));
      Print("Размер свопа для ордеров на покупку=",MarketInfo(Symbol(),MODE_SWAPLONG));
      Print("Размер свопа для ордеров на продажу=",MarketInfo(Symbol(),MODE_SWAPSHORT));
      Print("Календарная дата начала торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_STARTING));
      Print("Календарная дата окончания торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_EXPIRATION));
      Print("Разрешение торгов по указанному инструменту=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
      Print("Минимальный размер лота=",MarketInfo(Symbol(),MODE_MINLOT));
      Print("Шаг изменения размера лота=",MarketInfo(Symbol(),MODE_LOTSTEP));
      Print("Максимальный размер лота=",MarketInfo(Symbol(),MODE_MAXLOT));
      Print("Метод вычисления свопов=",MarketInfo(Symbol(),MODE_SWAPTYPE));
      Print("Способ расчета прибыли=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
      Print("Способ расчета залоговых средств=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
      Print("Начальные залоговые требования для 1 лота=",MarketInfo(Symbol(),MODE_MARGININIT));
      Print("Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
      Print("Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
      Print("Размер свободных средств, необходимых для открытия 1 лота на покупку=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
      Print("Уровень заморозки ордеров в пунктах=",MarketInfo(Symbol(),MODE_FREEZELEVEL)); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
File:
 
barabashkakvn:

Non ci sono funzioni di trading nell'indicatore. L'Expert Advisor ha funzioni commerciali. Pertanto, quando l'EA chiama l'ambiente di mercato e/o le informazioni sul conto, tutto va correttamente in OnInit().

Per provare le mie parole, ecco un semplice Expert Advisor che OnInit() chiama l'ambiente di mercato e le informazioni del conto:

Beh, la domanda era originariamente sull'indicatore. E tu stavi rispondendo sull'OnInit dell'indicatore. Expert Advisor è un'altra questione, non c'è nessun problema, ma l'Expert Advisor non può sostituire un indicatore.
Motivazione: