oslib/osc-coef-entrelacamento.mqh

133 righe
11 KiB
MQL5

2025-05-30 16:15:18 +02:00
<EFBFBD><EFBFBD>//+--------------------------------------------------------------------------------+
//| osc-coef-entrelacameto.mqh |
//| marcoc |
//| https://www.mql5.com/pt/users/marcoc |
//+--------------------------------------------------------------------------------+
#property copyright "marcoc"
#property link "https://www.mql5.com/pt/users/marcoc"
#property version "1.00"
//+---------------------------------------------------------------------+
//| Calculo e administracao do coefiente de entrelacamento |
//+---------------------------------------------------------------------+
#include <oslib\osc-padrao.mqh>
#include <oslib\osc-vetor-circular2.mqh>
class osc_coef_entrelacamento : public osc_padrao {
private:
osc_vetor_circular2 m_vetCoef;
double m_minAnt,m_maxAnt;
double calcCoefEntrelacamento(double minAnt, double maxAnt, double minAtu, double maxAtu);
bool add (double min, double max, double peso){
public:
bool initialize ( int qtdPeriodos );
/*
//--- memoria
static int getTermMemFisica(){ return TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL ); }//Mem<EFBFBD>ria f<EFBFBD>sica no sistema, MB
static int getTermMemTotal (){ return TerminalInfoInteger(TERMINAL_MEMORY_TOTAL ); }//Mem<EFBFBD>ria dispon<EFBFBD>vel para o processo do terminal (agente), MB
static int getTermMemDisp (){ return TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE); }//Mem<EFBFBD>ria livre do processo do terminal (agente), MB
static int getTermMemUsada (){ return TerminalInfoInteger(TERMINAL_MEMORY_USED ); }//Mem<EFBFBD>ria usada pelo terminal (agente), MB
//--- cpu
static int getTermCpuCores (){ return TerminalInfoInteger(TERMINAL_CPU_CORES ); }//O n<EFBFBD>mero de n<EFBFBD>cleos de CPU no sistema
static int getTermCpuX64 (){ return TerminalInfoInteger(TERMINAL_X64 ); }//Indica<EFBFBD><EFBFBD>o do "terminal 64-bit"
static int getTermCpuOpenClSuport(){ return TerminalInfoInteger(TERMINAL_OPENCL_SUPPORT); }//A vers<EFBFBD>o do OpenCL suportado no formato 0x00010002 = 1.2. "0" significa que OpenCL n<EFBFBD>o <EFBFBD> suportado
//--- disco
static int getTermDiskSpace(){ return TerminalInfoInteger(TERMINAL_DISK_SPACE); }//Espa<EFBFBD>o livre de disco para a pasta MQL5\Files do terminal (agente), MB
//--- retorno em formato string das funcoes acima
static string getTermMemFisicaStr (){ return IntegerToString( getTermMemFisica () ); }//Mem<EFBFBD>ria f<EFBFBD>sica no sistema, MB
static string getTermMemTotalStr (){ return IntegerToString( getTermMemTotal () ); }//Mem<EFBFBD>ria dispon<EFBFBD>vel para o processo do terminal (agente), MB
static string getTermMemDispStr (){ return IntegerToString( getTermMemDisp () ); }//Mem<EFBFBD>ria livre do processo do terminal (agente), MB
static string getTermMemUsadaStr (){ return IntegerToString( getTermMemUsada () ); }//Mem<EFBFBD>ria usada pelo terminal (agente), MB
static string getTermCpuCoresStr (){ return IntegerToString( getTermCpuCores () ); }//O n<EFBFBD>mero de n<EFBFBD>cleos de CPU no sistema
static string getTermCpuX64Str (){ return IntegerToString( getTermCpuX64 () ); }//Indica<EFBFBD><EFBFBD>o do "terminal 64-bit"
static string getTermCpuOpenClSuportStr(){ return IntegerToString( getTermCpuOpenClSuport() ); }//A vers<EFBFBD>o do OpenCL suportado no formato 0x00010002 = 1.2. "0" significa que OpenCL n<EFBFBD>o <EFBFBD> suportado
static string getTermDiskSpaceStr (){ return IntegerToString( getTermDiskSpace () ); }//Espa<EFBFBD>o livre de disco para a pasta MQL5\Files do terminal (agente), MB
*/
};
bool osc_coef_entrelacamento::initialize ( int qtdPeriodos ){
m_minAnt=0;m_maxAnt=0;
return m_vetCoef.initialize(qtdPeriodos)
}
//|--------------------------------------------------------------------------------
//| O coeficiente de entrelacamento eh a porcentagem de intersecao do preco da barra
//| atual em relacao a barra anterior.
//|
//| Ant ----------
//| Atu -------
//| Int xxxxx
//|
//| Ant ----------
//| Atu -------
//| Int xxxxx
//|
//| Ant ----------
//| Atu -------
//| Int xxxxxxx
//|
//| Ant ----------
//| Atu -------
//| Int
//|
//| Ant ----------
//| Atu ---
//| Int
//|
//|--------------------------------------------------------------------------------
double osc_coef_entrelacamento::calcCoefEntrelacamento(double minAnt, double maxAnt, double minAtu, double maxAtu){
double pontosEntre = 0;
// minimo da barra atual estah na barra anterior...
if( minAtu >= minAnt && minAtu <= maxAnt ){
if( maxAtu > maxAnt ){
// ---------
// ---------
// xxxxx
pontosEntre = maxAnt - minAtu;
}else{
// ---------
// -----
// xxxxx
pontosEntre = maxAtu - minAtu;
}
}else{
// maximo da barra atual estah na barra anterior...
if( maxAtu >= minAnt && maxAtu <= maxAnt ){
if( minAtu < minAnt ){
// ---------
// ---------
// xxxxx
pontosEntre = maxAtu - minAnt;
}else{
// ---------
// -----
// xxxxx
pontosEntre = maxAtu - minAtu;
}
}
}
if(maxAtu-minAtu == 0) return 0;
return pontosEntre/(maxAtu-minAtu);
}
bool osc_coef_entrelacamento::add(double min, double max, double peso){
double coef = calcCoefEntrelacamento(m_minAnt,m_maxAnt,min,max);
m_vetCoef.add(coef);
}