Erros, bugs, perguntas - página 949

 
Renat:
Tem uma atitude estranha em relação ao terminal e aos recursos.

O terminal comercial não tem a tarefa de poupar recursos quando a sua tarefa principal é trabalhar eficazmente com enormes quantidades de dados. Além disso, não se pode queixar que quatro cópias do número cruncher não têm gigabytes de memória suficientes no VPS.

Esta não é a questão, mas sim o comportamento diferente no servidor Win2003x64 (VPS) e Win7x64 Home.

http://file.karelia.ru/6v55j5/ o vídeo no link diz que ao iniciar o terminal, consome muito mais memória atribuída do que o sistema operativo mostra para este processo.

 
olyakish:

Esta não é a questão, mas sim o comportamento diferente no servidor Win2003x64 (VPS) e Win7x64 Home.

http://file.karelia.ru/6v55j5/ o vídeo no link diz que ao iniciar o terminal consome muito mais memória atribuída do que o sistema operativo mostra para este processo.

Oh como tudo está a correr.

Demasiado tempo para explicar e não tem nada a ver com o terminal. Esqueça-o e não falhe no VPS.

 
Renat:

Oh, como é confuso.

Demasiado tempo para explicar e não tem nada a ver com o terminal. Esqueça-o e não falhe no VPS.

Talvez não tanto assim.

Por exemplo, pode ser que o terminal recolha serviços de terceiros que comem mais do que o próprio terminal. E no meu portátil estão apenas no início do arranque,

então porque é que a memória é consumida semelhante ao primeiro funcionamento do terminal - o serviço só precisa de funcionar uma vez. (embora seja discutível se o serviço pode executar fios para cada cópia do terminal)

OK, vou perguntar de outra forma, se o servidor for 2008 numa VPN não terá este efeito se for demasiado longo para explicar.

 
olyakish:

Talvez não tanto assim.

Por exemplo, pode ser que o terminal recolha serviços de terceiros que comem mais do que o próprio terminal. No meu portátil estão apenas no início do arranque,

então porque é que o consumo de memória é semelhante ao primeiro funcionamento do terminal - o serviço só precisa de funcionar uma vez. (embora seja questionável se o serviço pode iniciar os fios para cada cópia do terminal)

Ok, vou perguntar de outra forma, se o servidor for 2008 em pps não terá esse efeito se for demasiado longo para explicar.

Tenho em VPS (Win XP) cerca de 200 MB consumidos pelo terminal MT4.
 
Porque não permitir (com um tique nas definições) que o terminal utilize uma troca de cache? Haverá um trade-off de velocidade/carga de memória seleccionável pelo utilizador.
 

...Parece uma operação simples, mas os valores inteiros correctos em pips não podem ser obtidos. Aqui está o código do guião:

void OnStart() {
//---
   double max_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MAX), _Digits);
   double min_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MIN), _Digits);
   
   double entry_price, stop_price, profit_price;
   entry_price = NormalizeDouble((max_price+min_price)/2, _Digits);
   stop_price = NormalizeDouble(entry_price-(entry_price-min_price)/2, _Digits);
   profit_price = NormalizeDouble(max_price-(max_price-entry_price)/2, _Digits);
   
   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
   
   Print("Entry: ", entry_price, ", Stop: ", stop_price, ", Profit: ", profit_price,
         ", Stop pips: ", stop_pips, ", Profit pips: ", profit_pips);
//---   
}

Aqui estão os resultados da corrida:

2013.03.29 16:42:03 Experiment_Script (EURUSD,H4) Entrada: 1.29445, Stop: 1.28453, Lucro: 1.30438, Stop pips: 991, Lucro pips: 993
2013.03.29 16:41:57 Experiment_Script (GBPUSD,H4) Entrada: 1.50465, Stop: 1.49348, Lucro: 1.51583, Stop pips: 1117, Lucro pips: 1117

Deve ser 992 e 993 (para EURUSD), 1117 e 1118 (para GBPUSD). Pode dizer-me como obter um resultado correcto?

 
Rone:

...

Tente dividir por 2,0 em vez de apenas 2.

O resultado de uma operação inteira é um número inteiro, e não afecta que o resultado seja escrito em duplicado.

 
muallch: Porque não permitir (com um tique nas definições) que o terminal utilize uma troca de cache? Haverá um compromisso de velocidade/carga de memória seleccionável pelo utilizador.
É melhor ir directamente ao Service Desk com tais perguntas. Caso contrário, perder-se-ão.
 
fyords: Tente dividir por 2,0 em vez de apenas 2.

Não, esse não é o problema. O divisível é um duplo.

O problema é muito provavelmente causado por estas linhas:

   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
Rone:
Tente imprimir o valor "(entry_price - stop_price)/_Point" sem arredondamento.
 

Por favor, informe se alguém encontrou algo assim.

Existe um código:

//+------------------------------------------------------------------+
double date[];
//+------------------------------------------------------------------+
void OnInit()
{
   ArrayResize(date,3);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   Print("ArraySize(date)=",ArraySize(date));
}
//+------------------------------------------------------------------+
Funciona em tempo real no terminal:
DH      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
LN      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
DG      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
Mas, no testador, o mesmo código dá um resultado diferente:
MN      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
OG      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
IM      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0