Erros, bugs, perguntas - página 1151

 

Qualquer pessoa com problemas ou perguntas sobre a contabilidade de conversão do programa de afiliados - escreva-me, eu testá-lo-ei:

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

Tenho um problema com a função StringConcatenate() na MQL4. Um bloco de zeros aparece na corda. Isto pode ser visto quando se envia a cadeia de resumo para um ficheiro.

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);
  }

Aqui está o que o terminal escreve

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

 
Zeros significam zero bytes de alguns kilobytes
 
Luckhuman:

Tenho um problema com a função StringConcatenate() na MQL4. Um bloco de zeros aparece na corda. Isto pode ser visto quando se envia a cadeia de resumo para um ficheiro.

Obrigado pelo correio, fixado. A reparação será incluída na próxima construção.
 
Por favor explique porque é que no separador Negociação os preços actuais (esta é a coluna Preço à direita do SL/TP - não confundir com o preço aberto à esquerda do SL/TP!) para posições de mercado e ordens pendentes são mostrados de forma diferente para o mesmo instrumento, do mesmo tipo (por exemplo, comprar)? Em teoria, o preço actual do símbolo deve ser o mesmo, pelo menos para várias ordens em aberto ele muda de forma síncrona (coincide).
 
marketeer:
Por favor explique porque é que no separador Negociação os preços actuais (esta é a coluna Preço à direita do SL/TP - não confundir com o preço aberto à esquerda do SL/TP!) para posições de mercado e ordens pendentes são mostrados de forma diferente para o mesmo instrumento, do mesmo tipo (por exemplo, comprar)? O preço actual no símbolo deve ser o mesmo, pelo menos para várias ordens em aberto ele muda de forma síncrona (coincide).

Porque há um preço Bid e há um preço Ask:

bid_ask

Na imagem, há uma posição aberta(venda) e há duas ordens pendentes(limite de venda e limite de compra). Para uma posição aberta(venda) é especificado o preço actual Ask. Para umlimite de venda é especificado o preço actual Bid. Para limite de compra é especificado o preçoAsk actual.

 
Não tenho separador "Calendário". Terminal MetaTrader 5 x64 construir 946 iniciado (MetaQuotes Software Corp.). Conta demo no servidor MetaQuotes-Demo. Além disso, existem várias contas reais no terminal.

E só falta no portátil. Numa tabuleta e num PC, existe um separador Calendário.


 
Ao iniciar MT4 no indicador, init() falha porque MarketInfo(xxx, MODE_TICKVALUE) retorna zero (para todos os símbolos). É evidente que o valor do tick está ligado à moeda da conta, mas o terminal exibe janelas mesmo antes do login. Acontece então que nenhum guião ligado a um valor funcionará correctamente? Isto é uma característica ou um bug?
 
Como sei se um indicador é colocado no gráfico por si só ou se é chamado de outro indicador via iCustom?
 
marketeer:
Quando se inicia MT4 no indicador, init() não tem lugar, porque MarketInfo(xxx, MODE_TICKVALUE) retorna zero (para todos os símbolos). É evidente que o valor do tick está ligado à moeda da conta, mas o terminal exibe janelas mesmo antes do login. Acontece então que nenhum guião ligado a valores funcionará correctamente? Isto é uma característica ou um bug?

MetaTrader 4. Versão: 4.00 Build 654.

Tente usar Symbol( ) em vez de xxx e use OnInit() em vez de 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);
  }
Razão: