Erros, bugs, perguntas - página 1699

 
Karputov Vladimir:
Não se pode culpar todos os estilos de programação errados por insectos.

Que tipo de SURPRESA é esta?! Aponto um insecto óbvio, e recebo este disparate sobre "estilo".

Estou tão longe da A100 e da Meat como da lua. Mostram-te insectos, embora eu não os entenda. Mas não vou trazer o meu "estilo" para dentro dela.

 
fxsaber:
Não funciona.

Aqui está o código completo:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);

   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define  TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//if(handle!=INVALID_HANDLE)
   if(prev_calculated!=0)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];
      Print(__FUNCTION__);
      if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
         Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   Print("#1 OnDeinit");
   if(handle!=INVALID_HANDLE)
     {
      Print("#2 OnDeinit");
      IndicatorRelease(handle);
      Print("#3 OnDeinit");
     }
   Print("#4 OnDeinit");
   return;
  }
//+------------------------------------------------------------------+

e uma impressão:

2016.09.23 12:34:03.318 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:03.318 2 (SBRF-12.16,M1)       BufferCopy[0] = 265.0
2016.09.23 12:34:03.319 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 18992.0
2016.09.23 12:34:03.319 2 (SBRF-12.16,M1)       
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       BufferCopy[0] = 265.0
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 12498.0
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       
... экономия бумаги :)
2016.09.23 12:34:31.804 2 (SBRF-12.16,M1)       
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       BufferCopy[0] = 614.0
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 5343.0
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       BufferCopy[0] = 614.0
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 17815.0
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #1 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #2 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #3 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #4 OnDeinit
Arquivos anexados:
2.mq5  3 kb
 
Karputov Vladimir:

Aqui está o código completo:

e uma impressão:

Não funciona para mim - nem sequer chega ao OnDeinit.

E repare que os meus números coincidem no registo, mas os seus não. O meu diário de bordo

PP      0       12:41:08.169    Test3 (RTS-12.16,H1)    OnCalculate
FE      0       12:41:08.169    Test3 (RTS-12.16,H1)    BufferCopy[0] = 13573.0
IQ      0       12:41:08.169    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 13573.0
CF      0       12:41:08.169    Test3 (RTS-12.16,H1)    
JO      0       12:41:08.169    Test3 (RTS-12.16,H1)    OnCalculate
QI      0       12:41:08.169    Test3 (RTS-12.16,H1)    BufferCopy[0] = 25434.0
NM      0       12:41:08.169    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 25434.0
MJ      0       12:41:08.169    Test3 (RTS-12.16,H1)    
DJ      0       12:41:08.187    Test3 (RTS-12.16,H1)    OnCalculate
QO      0       12:41:08.187    Test3 (RTS-12.16,H1)    BufferCopy[0] = 9469.0
HK      0       12:41:08.187    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 9469.0
CM      0       12:41:08.187    Test3 (RTS-12.16,H1)    
JF      0       12:41:08.187    Test3 (RTS-12.16,H1)    OnCalculate
OS      0       12:41:08.187    Test3 (RTS-12.16,H1)    BufferCopy[0] = 1887.0
NG      0       12:41:08.187    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 1887.0
Não tenho um único indicador ou EA a funcionar no meu terminal.
 
fxsaber:

Não funciona para mim - nem sequer chega ao OnDeinit.

E repare que os meus números coincidem no registo, mas os seus não. O meu diário de bordo

Não tenho nenhum indicador ou Expert Advisor a funcionar no meu terminal.

Eu tenho esta configuração:

2016.09.23 12:25:34.874 Terminal        MetaTrader 5 x64 build 1430 started (MetaQuotes Software Corp.)
2016.09.23 12:25:34.876 Terminal        Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M  @ 2.50 GHz, RAM: 2446 / 8077 Mb, HDD: 40118 / 233310 Mb, GMT+02:00
2016.09.23 12:25:34.876 Terminal        C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

(Depois de reiniciar a ficha térmica, ficha de registo, primeiras três linhas)

 
Karputov Vladimir:

Eu tenho esta configuração:

(Depois de reiniciar a térmica, separador Registo, primeiras três linhas)

2016.09.23 12:42:22.405 Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
2016.09.23 12:42:22.405 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700 K  @ 3.50 GHz, RAM: 8098 / 16301 Mb, HDD: 6387 / 30000 Mb, GMT+02:00
2016.09.23 12:42:22.405 Terminal        BCS Broker MetaTrader 5 Terminal x64 build 1430 started (BCS Broker)
 
fxsaber:

Ambíguos. Na máquina x32:

2016.09.23 13:23:55.052 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
2016.09.23 13:23:55.052 Terminal        Windows 10 Home (X86 based PC), IE 11.00, UAC, Intel Atom  Z3740 @ 1.33 GHz, RAM: 607 / 1931 Mb, HDD: 20500 / 49784 Mb, GMT+02:00
2016.09.23 13:23:55.049 Terminal        MetaTrader 5 build 1430 started (MetaQuotes Software Corp.)


Não funciona.

 
Andrey Barinov:
Eles "desistem", mas haverá um erro de compilação ao tentar chamá-los.

Não preciso disso assim, estou a tentar fazer muito trabalho para facilitar a minha vida no futuro.

Superei o meu problema desta forma nos pais, todos protegem e a herança fica sob protecção e depois anula.

 
Karputov Vladimir:

Ambíguos. Na máquina x32:


Não funciona.

A candidatura foi feita, apesar de estar farto de o fazer com tanta frequência.
 
fxsaber:

Como é que conheço o meu cabo num gráfico num indicador?ChartIndicatorName não é adequado, porque devolve um nome curto. E com o mesmo nome pode já estar a correr o mesmo indicador com parâmetros de entrada diferentes.

Preciso que seja capaz de remover o indicador do gráfico e dos cálculos.

Pode já o ter descoberto, mas esclarecê-lo-ei por via das dúvidas. O cabo do indicador é na realidade apenas a referência à descrição do indicador dentro do programa que o criou (ou seja, Expert Advisor, indicador, script), podemos considerá-lo uma espécie de "número". Isto significa que este "número" não tem qualquer significado fora do programa que criou o indicador (que teve o seu cabo). Mesmo o programa que chama a função ChartIndicatorGet() não recebe alguma manipulação de indicador global, apenas cria a descrição deste indicador e atribui o seu "número" para endereçamento. Não há nenhum cabo indicador global, único dentro de todo o terminal.

O uso de nomes curtos pode ser visto nos exemplos. Pode fazer isto:

   string short_name="unknown ma";
   switch(InpMAMethod)
     {
      case MODE_EMA :  short_name="EMA";  break;
      case MODE_LWMA : short_name="LWMA"; break;
      case MODE_SMA :  short_name="SMA";  break;
      case MODE_SMMA : short_name="SMMA"; break;
     }
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");

Isto resolve o problema de " o mesmoindicadorjá ter sido executado com parâmetros de entrada diferentes".

E visualmente é mais claro qual o indicador que funciona:


 
Anton:

Pode já o ter descoberto, mas esclarecê-lo-ei por via das dúvidas. O manípulo do indicador é na realidade apenas um endereço para a descrição do indicador dentro do programa que o criou (isto é, Expert Advisor, indicador, script), podemos considerá-lo uma espécie de "número". Isto significa que este "número" não tem qualquer significado fora do programa que criou o indicador (que teve o seu cabo). Mesmo o programa que chama a função ChartIndicatorGet() não recebe alguma manipulação de indicador global, apenas cria a descrição deste indicador e atribui o seu "número" para endereçamento. Não há nenhum cabo indicador global, único dentro de todo o terminal.

Pode ver a utilização de ShortName nos exemplos. Pode fazê-lo desta forma:

Isto resolve o problema de " o mesmoindicadorjá ter sido executado com parâmetros de entrada diferentes".

E visualmente é mais fácil de compreender qual o indicador que funciona:

Obrigado, foi assim que o Stringo me explicou há algum tempo atrás. Encontrei várias maneiras de determinar que o cabo pertence a "mim":

  1. Altero o valor extremo do buffer do indicador e comparo-o com o valor correspondente do CopyBuffer. Se corresponder, é "eu". Esta é a ideia por detrás do indicador indelével.
  2. Mudo o ShortName e comparo com ChartIndicatorName.

Razão: