Errori, bug, domande - pagina 1151

 

Chiunque abbia problemi o domande sulla contabilità di conversione del programma di affiliazione - mi scriva, lo testerò:

    1. Tablet (Windows 8.1)
    2. PC (Windows 8.1)
    3. Smartphone(Android)
 

Ho un problema con la funzione StringConcatenate() in MQL4. Un blocco di zeri appare nella stringa. Questo può essere visto quando si esporta la stringa di riepilogo in un file.

void OnStart()
  {
//---
  string sample = "0123456789ABCDEF";
  string s = "";
  for(int i=0;i<260;i++)
  {
   s = StringConcatenate(s, sample);
   Print(StringBufferLen(s), " ", StringLen(s), " ", s);
  } 
  Print(s);
  }

Ecco cosa scrive il terminale

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3872 3872 ???????????????

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3856 3856 ???????????????

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3840 3840 ???????????????

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3824 3824 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3808 3808 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3792 3792 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123

 
Gli zeri significano zero byte di pochi kilobyte
 
Luckhuman:

Ho un problema con la funzione StringConcatenate() in MQL4. Un blocco di zeri appare nella stringa. Questo può essere visto quando si esporta la stringa di riepilogo in un file.

Grazie per il post, risolto. La correzione sarà inclusa nella prossima build.
 
Per favore, spiega perché nella scheda Trading i prezzi correnti (questa è la colonna Prezzo a destra di SL/TP - da non confondere con il prezzo aperto a sinistra di SL/TP!) per le posizioni a mercato e gli ordini pendenti sono mostrati in modo diverso per lo stesso strumento, dello stesso tipo (per esempio, comprare)? In teoria il prezzo corrente del simbolo dovrebbe essere lo stesso, almeno per diversi ordini aperti cambia sincronicamente (coincide).
 
marketeer:
Si prega di spiegare perché nella scheda Trading i prezzi correnti (questa è la colonna Prezzo a destra di SL/TP - da non confondere con il prezzo aperto a sinistra di SL/TP!) per le posizioni a mercato e gli ordini pendenti sono mostrati in modo diverso per lo stesso strumento, dello stesso tipo (ad esempio comprare)? Il prezzo corrente nel simbolo dovrebbe essere lo stesso, almeno per diversi ordini aperti cambia sincronicamente (coincide).

Perché c'è un prezzo Bid e un prezzo Ask:

bid_ask

Nell'immagine, c'è una posizione aperta(vendita) e ci sono due ordini pendenti(limite di vendita e limite di acquisto). Per una posizione aperta(vendita) viene specificato il prezzo corrente Ask. Per unlimite di vendita viene specificato il prezzo corrente Bid. Per il limite di acquisto viene specificato l'attuale prezzoAsk.

 
Non ho una scheda "Calendario". Terminale MetaTrader 5 x64 build 946 avviato (MetaQuotes Software Corp.). Conto demo sul server MetaQuotes-Demo. Inoltre ci sono diversi conti reali nel terminale.

E manca solo sul portatile. Su un tablet e un PC, c'è una scheda Calendario.


 
Quando si avvia MT4 nell'indicatore, init() fallisce perché MarketInfo(xxx, MODE_TICKVALUE) restituisce zero (per tutti i simboli). È chiaro che il valore del tick è legato alla valuta del conto, ma il terminale visualizza le finestre anche prima del login. Poi si scopre che nessuno script legato al valore funziona correttamente? È una caratteristica o un bug?
 
Come faccio a sapere se un indicatore è posizionato sul grafico da solo o se è chiamato da un altro indicatore tramite iCustom?
 
marketeer:
Quando si avvia MT4 nell'indicatore, init() non ha luogo, perché MarketInfo(xxx, MODE_TICKVALUE) restituisce zero (per tutti i simboli). È chiaro che il valore del tick è legato alla valuta del conto, ma il terminale visualizza le finestre anche prima del login. Poi si scopre che nessuno script legato al valore funziona correttamente? È una caratteristica o un bug?

MetaTrader 4. Versione: 4.00 Build 654.

Provate a usare Symbol() invece di xxx e usate OnInit() invece di init():

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//--- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer(0,ExtMapBufferEMA,INDICATOR_DATA);
//--- 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);
  }
Motivazione: