Erros, bugs, perguntas - página 379

 
Graff:

Faz sentido

substituir tarifas_total por BarsCalculated(ich)?

Não me parece. É mais como um toco de serviço para garantir que o tampão está pronto...

Além disso, Copy devolverá tantos dados como os calculados, não o tamanho solicitado.


E de que cidade é, se não de um segredo?

não em Dnepr.
 
sergeev:

A propósito, tem a certeza de que não precisa de chamar nenhuma função adicional?

A biblioteca tem tanto o Refresh como o BufferResize. Parece-me que eles são necessários para um funcionamento normal.


E onde está escrito que eles devem estar?

Experimentei diferentes variantes.

ichi.Refresh(true);
ichi.Refresh(false);
ichi.RefreshCurrent(true);
ichi.RefreshCurrent(false);

Não tive qualquer efeito.

 

Continuação....

O indicador iIchimoku está a sofrer uma falha. O meu indicador apenas desenha setas dependendo de if(tenkan[i]>kijun[i]). Como pode ver na imagem do ecrã, as setas não são desenhadas correctamente

O código completo está no ficheiro Ich_1_f.mq5

No entanto, se os calcular manualmente, tudo é apresentado correctamente

Código completo no ficheiro Ich_1_ok.mq5

Arquivos anexados:
Ich_1_f.mq5  6 kb
Ich_1_ok.mq5  6 kb
 

Escreva a dll :

#define _DLLAPI extern "C" __declspec(dllexport)
//+------------------------------------------------------------------+
//| адрес переменной double                                          |
//+------------------------------------------------------------------+
_DLLAPI int __stdcall
GetPtrVar(double a){return((int)(&a));}
//+------------------------------------------------------------------+
//| значение переменной double по адресу                             |
//+------------------------------------------------------------------+
_DLLAPI double __stdcall
GetValuePtr(int pointer){return(*(double*)pointer);}

ligue-o :

#import "Projeckt1.dll"
int      GetPtrVar(double a);
double   GetValuePtr(int pointer);
#import

chamada :

void OnStart()
  {   
   double var=153.25; 
   Print("вложенный вызов = ",GetValuePtr(GetPtrVar(var)));
   int pointer=GetPtrVar(var);   
   Print("вызов с сохранением адреса = ",GetValuePtr(pointer));
  }

obtemos isto:

2011.05.01 18:09:12     Черновик 31 (EURUSD,H1) вызов с сохранением адреса = 5.560304580319136 e-287
2011.05.01 18:09:12     Черновик 31 (EURUSD,H1) вложенный вызов = 153.25

embora ambas as linhas devam devolver o mesmo valor 153,25.

Porquê?

 
Urain:

Porquê?
Isto está na versão de 32 ou 64 bits?
 
Renat:
Isto está na versão de 32 ou 64 bits?

32
 

É muito simples - na função GetPtrVar(duplo a), pega-se no endereço de uma cópia da variável na pilha e depois tenta-se ler o pedaço de memória da pilha.

A primeira vez, por causa de uma chamada de proximidade de GetValuePtr conseguimos ler a partir da pilha não contaminada, enquanto que as chamadas de funções subsequentes danificaram a pilha de forma irrevogável.

Não há erro.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Renat:

É muito simples - na função GetPtrVar(duplo a) pegue no endereço de uma cópia da variável na pilha, e depois tente ler o pedaço de memória da pilha.

Exactamente, senti que devia cavar ali algures.

tem de escrever na dll

GetPtrVar(double &a){return((int)(&a));}
 
Renat:

É muito simples - na função GetPtrVar(duplo a), pega-se no endereço de uma cópia da variável na pilha e depois tenta-se ler o pedaço de memória da pilha.

A primeira vez, por causa de uma chamada de proximidade de GetValuePtr conseguimos ler a partir da pilha não contaminada, enquanto que as chamadas de funções subsequentes danificaram a pilha de forma irrevogável.

Não há erro.

Eu também reparei nisso. Penso que esta é a forma correcta de o fazer:

#define _DLLAPI extern "C" __declspec(dllexport)
//+------------------------------------------------------------------+
//| адрес переменной double                                          |
//+------------------------------------------------------------------+
_DLLAPI int __stdcall
GetPtrVar(double & a){return((int)(&a));}
//+------------------------------------------------------------------+
//| значение переменной double по адресу                             |
//+------------------------------------------------------------------+
_DLLAPI double __stdcall
GetValuePtr(int pointer){return(*(double*)pointer);}

ligação :

#import "Projeckt1.dll"
int      GetPtrVar(double & a);
double   GetValuePtr(int pointer);
#import
 
Na construção 439 do Metatrader5, foi adicionado um indicador de qualidade histórica. Quando estou a testar em M1 e H4 os preços de abertura e em todas as carraças, a qualidade é de 51%... Porquê e como aumentá-la? A fonte das citações é alpari demo.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5