oslib/osc-ind-minion-feira.mqh
super.admin 07f69c4478 convert
2025-05-30 16:15:18 +02:00

242 lines
18 KiB
MQL5

//+------------------------------------------------------------------+
//| ClassMinionIndFeira.mqh |
//| marcoc |
//| https://www.mql5.com/pt/users/marcoc |
//+------------------------------------------------------------------+
#property copyright "marcoc"
#property link "https://www.mql5.com/pt/users/marcoc"
#property version "1.307"
#include <Indicators\Custom.mqh>
#define IFEIRA_NAME_0103 "Shared Projects\\oslib\\osi\\osi-teste-01-03-feira"
#define IFEIRA_NAME_0104 "Shared Projects\\oslib\\osi\\osi-teste-01-04-feira"
#define IFEIRA_NAME_0202 "Shared Projects\\oslib\\osi\\osi-teste-02-02-feira"
#define IFEIRA_NAME_0203 "Shared Projects\\oslib\\osi\\osi-teste-02-03-feira"
#define IFEIRA_NAME_0204 "Shared Projects\\oslib\\osi\\osi-teste-02-04-feira" // passa a sinalizar ponto de comprometimento institucional. Deixa de sinalizar as tendencias de alta e baixa.
#define IFEIRA_NAME_0205 "Shared Projects\\oslib\\osi\\osi-teste-02-05-feira" // passa a informar maior e menor precos negociados no periodo. Deixa de sinalizar forca do preco abaixo e acima.
#define IFEIRA_NAME_0206 "Shared Projects\\oslib\\osi\\osi-teste-02-06-feira" // passa a informar o volume de trades.
#define IFEIRA_NAME_0306 "Shared Projects\\oslib\\osi\\osi-teste-03-06-feira" // passa a informar o volume de trades.
#define IFEIRA_NAME_0307 "Shared Projects\\oslib\\osi\\osi-teste-03-07-feira" // passa a informar o volume de compras e vendas, receber periodo em segundos e adiciona parametro para escrever sql no log.
#define IFEIRA_VERSAO_0103 "V0103"
#define IFEIRA_VERSAO_0104 "V0104"
#define IFEIRA_VERSAO_0202 "V0202"
#define IFEIRA_VERSAO_0203 "V0203"
#define IFEIRA_VERSAO_0204 "V0204"
#define IFEIRA_VERSAO_0205 "V0205"
#define IFEIRA_VERSAO_0206 "V0206"
#define IFEIRA_VERSAO_0306 "V0306"
#define IFEIRA_VERSAO_0307 "V0307"
#define IFEIRA_VERSAO_DEFAULT "V0307"
#define IFEIRA_QTD_BUFFERS 30
#define IFEIRA_QTD_PARAM 8
// #define IFEIRA_BUF_PRECO_MED_SEL 0
// #define IFEIRA_BUF_PRECO_MED_BUY 1
// #define IFEIRA_BUF_PRECO_MED_ASK 2
// #define IFEIRA_BUF_PRECO_MED_BID 3
// #define IFEIRA_BUF_SINAL_OFERTA_ASK 4
// #define IFEIRA_BUF_SINAL_OFERTA_BID 5
// #define IFEIRA_BUF_SINAL_DEMANDA_BUY 6 // descontinuado a partir da versao 0205
// #define IFEIRA_BUF_SINAL_DEMANDA_SEL 7 // descontinuado a partir da versao 0205
// #define IFEIRA_BUF_PRECO_HIGH 6 // a partir da versao 0205
// #define IFEIRA_BUF_PRECO_LOW 7 // a partir da versao 0205
// #define IFEIRA_BUF_SINAL_PRECO_UP1 8
// #define IFEIRA_BUF_SINAL_PRECO_UP2 9
// #define IFEIRA_BUF_SINAL_PRECO_DW1 10
// #define IFEIRA_BUF_SINAL_PRECO_DW2 11
// #define IFEIRA_BUF_PRECO_MED_TRA 12 // preco medio do trade . Disponivel a partir da versao "0202"
// #define IFEIRA_BUF_PRECO_MED_BOK 13 // preco medio de afertas. Disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_COMPINST_UP 14 // Comprometimento institucional para cima. Disponivel a partir da versao "0204" Substitui o sinal de tendencia de alta disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_COMPINST_DW 15 // Comprometimento institucional para baixo. Disponivel a partir da versao "0204" Substitui o sinal de tendencia de baixa disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_INCL_UP 16 // Inclinacao de alta. Disponivel a partir da versao "0204". Substitui o sinal de reversao de alta que estava disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_INCL_DW 17 // Inclinacao de baixa. Disponivel a partir da versao "0204". Substitui o sinal de reversao de baixa que estava disponivel a partir da versao "0202"
// ANTIGO ////////////////////////////////////////////////////////////////////////////////////////////////////
// #define IFEIRA_BUF_SINAL_COMPINST_UP 14 // tendencia de alta . Disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_COMPINST_DW 15 // tendencia de baixa. Disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_INCL_UP 16 // Reversao com alta . tendencia era pra baixo. Disponivel a partir da versao "0202"
// #define IFEIRA_BUF_SINAL_INCL_DW 17 // Reversao com baixa. tendencia era pra cima . Disponivel a partir da versao "0202"
// NOVO ////////////////////////////////////////////////////////////////////////////////////////////////////
enum ifeiraBuf{
IFEIRA_BUF_PRECO_MED_SEL = 0 ,
IFEIRA_BUF_PRECO_MED_BUY = 1 ,
IFEIRA_BUF_PRECO_MED_ASK = 2 ,
IFEIRA_BUF_PRECO_MED_BID = 3 ,
IFEIRA_BUF_SINAL_OFERTA_ASK = 4 ,
IFEIRA_BUF_SINAL_OFERTA_BID = 5 ,
IFEIRA_BUF_PRECO_HIGH = 6 ,
IFEIRA_BUF_PRECO_LOW = 7 ,
IFEIRA_BUF_SINAL_PRECO_UP1 = 8 ,
IFEIRA_BUF_SINAL_PRECO_UP2 = 9 ,
IFEIRA_BUF_SINAL_PRECO_DW1 = 10,
IFEIRA_BUF_SINAL_PRECO_DW2 = 11,
IFEIRA_BUF_PRECO_MED_TRA = 12, // preco medio do trade . Disponivel a partir da versao "0202"
IFEIRA_BUF_PRECO_MED_BOK = 13, // preco medio de afertas. Disponivel a partir da versao "0202"
// inicio: substituicoes do significado do indicador
IFEIRA_BUF_SINAL_COMPINST_UP = 14, // comprometimento institucional para cima. Disponivel a partir da versao "0204" Substitui o sinal de tendencia de alta disponivel a partir da versao "0202"
IFEIRA_BUF_SINAL_COMPINST_DW = 15, // comprometimento institucional para baixo. Disponivel a partir da versao "0204" Substitui o sinal de tendencia de baixa disponivel a partir da versao "0202"
IFEIRA_BUF_SINAL_INCL_UP = 16, // Inclinacao de alta. Disponivel a partir da versao "0204". Substitui o sinal de reversao de alta que estava disponivel a partir da versao "0202"
IFEIRA_BUF_SINAL_INCL_DW = 17, // Inclinacao de baixa. Disponivel a partir da versao "0204". Substitui o sinal de reversao de baixa que estava disponivel a partir da versao "0202"
// final: substituicoes do significado do indicador
//IFEIRA_BUF_TENDENCIA = 18, // Positivo significa tendencia para acima, negativo eh tendencia para baixo. // descontinuado na versao 03-06
//IFEIRA_BUF_REVERSAO = 19, // Igual ao de tendencia, mas em periodo de tempo mais curto. Normalmente 25% da tendencia (falta parametrizar) // descontinuado na versao 03-06
IFEIRA_BUF_DESB_UP0 = 18, // Desbalanceamento na primeira fila do book.
IFEIRA_BUF_DESB_UP1 = 19, // Desbalanceamento na segunda fila do book.
IFEIRA_BUF_INCLINACAO_SEL = 20, // Inclinacao do preco medio de venda . Disponivel a partir da versao "0203".
IFEIRA_BUF_INCLINACAO_BUY = 21, // Inclinacao do preco medio de compra. Disponivel a partir da versao "0203".
IFEIRA_BUF_INCLINACAO_TRA = 22, // Inclinacao do preco medio geral . Disponivel a partir da versao "0203".
IFEIRA_BUF_INCLINACAO_ASK = 23, // Inclinacao da oferta media de venda . Disponivel a partir da versao "0203".
IFEIRA_BUF_INCLINACAO_BID = 24, // Inclinacao da oferta media de compra. Disponivel a partir da versao "0203".
IFEIRA_BUF_INCLINACAO_BOK = 25, // Inclinacao da oferta media geral . Disponivel a partir da versao "0203".
IFEIRA_BUF_VOLUMETRADE = 26, // Volume de trades totais . Disponivel a partir da versao "0206".
IFEIRA_BUF_VOLUMETRADE_BUY = 27, // Volume de trades de compra . Disponivel a partir da versao "0207".
IFEIRA_BUF_VOLUMETRADE_SEL = 28 // Volume de trades de venda . Disponivel a partir da versao "0207".
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class osc_ind_minion_feira : public CiCustom {
private:
int m_feira;
string m_feira_name;
int m_feira_qtd_buffers;
public:
osc_ind_minion_feira();
~osc_ind_minion_feira();
bool Create ( const string symbol ,
const ENUM_TIMEFRAMES period ,
const bool debug01 ,
const bool gerarVolume02 ,
const bool gerarOfertas03 ,
const int qtdBarProcHist04 ,
const double bookOut05 ,
const int qtdPeriodo06 , // quantidade de periodos que serao usados no calculo das medias, a partir da versao 0307, passa a ser a quantide de segundos do periodo
const bool gerarSqlLog07=false, // a partir da versao 0307: define se gera ou nao sql no log.
const string versao=IFEIRA_VERSAO_DEFAULT );
// preco medio
double getPrecoMedioTra (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_MED_TRA,i);}//12,
double getPrecoMedioSel (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_MED_SEL,i);}//0,m_bufPsel , INDICATOR_DATA );
double getPrecoMedioBuy (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_MED_BUY,i);}//1,m_bufPbuy , INDICATOR_DATA );
double getPrecoMedioBok (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_MED_BOK,i);}//13,
double getPrecoMedioAsk (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_MED_ASK,i);}//2,m_bufPask , INDICATOR_DATA );
double getPrecoMedioBid (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_MED_BID,i);}//3,m_bufPbid , INDICATOR_DATA );
// inclinacao dos precos medios do book e de trade
double getInclinacaoSel (int i){return CiCustom::GetData(IFEIRA_BUF_INCLINACAO_SEL,i);}//20,m_bufInclSel , INDICATOR_DATA
double getInclinacaoBuy (int i){return CiCustom::GetData(IFEIRA_BUF_INCLINACAO_BUY,i);}//21,m_bufInclBuy , INDICATOR_DATA
double getInclinacaoTra (int i){return CiCustom::GetData(IFEIRA_BUF_INCLINACAO_TRA,i);}//22,m_bufInclTra , INDICATOR_DATA
double getInclinacaoAsk (int i){return CiCustom::GetData(IFEIRA_BUF_INCLINACAO_ASK,i);}//23,m_bufInclAsk , INDICATOR_DATA
double getInclinacaoBid (int i){return CiCustom::GetData(IFEIRA_BUF_INCLINACAO_BID,i);}//24,m_bufInclBid , INDICATOR_DATA
double getInclinacaoBok (int i){return CiCustom::GetData(IFEIRA_BUF_INCLINACAO_BOK,i);}//25,m_bufInclBok , INDICATOR_DATA
// forca de de oferta e demanda
double getSinalOfertaAsk (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_OFERTA_ASK ,i);}//4,m_bufPaskArrow , INDICATOR_DATA );
double getSinalOfertaBid (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_OFERTA_BID ,i);}//5,m_bufPbidArrow , INDICATOR_DATA );
// precos no ultimo periodo
double getPrecoHigh (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_HIGH ,i);}//6,m_bufPHigArrow , INDICATOR_DATA );
double getPrecoLow (int i){return CiCustom::GetData(IFEIRA_BUF_PRECO_LOW ,i);}//7,m_bufPLowArrow , INDICATOR_DATA );
// sinais de compra ou venda em funcao da forca de oferta e demanda
double getSinalPrecoUp1 (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_PRECO_UP1,i);}//8 ,m_bufPup1Arrow, INDICATOR_DATA );
double getSinalPrecoUp2 (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_PRECO_UP2,i);}//9 ,m_bufPup2Arrow, INDICATOR_DATA );
double getSinalPrecoDw1 (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_PRECO_DW1,i);}//10,m_bufPdw1Arrow, INDICATOR_DATA );
double getSinalPrecoDw2 (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_PRECO_DW2,i);}//11,m_bufPdw2Arrow, INDICATOR_DATA );
// sinais de tendencia e reversao
//double getSinalTendUp (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_COMPINST_UP,i);}//14 , comprometimento institucional para cima
//double getSinalTendDw (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_COMPINST_DW,i);}//15 , comprometimento institucional para baixo
//double getSinalRevrUp (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_INCL_UP ,i);}//16 , inclinacao para cima
//double getSinalRevrDw (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_INCL_DW ,i);}//17 , inclinacao para baixo
// sinais de inclinacao e comprometimento institucional
double getSinalCompromissoUp(int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_COMPINST_UP,i);}//14 , comprometimento institucional para cima
double getSinalCompromissoDw(int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_COMPINST_DW,i);}//15 , comprometimento institucional para baixo
double getSinalInclinacaoUp (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_INCL_UP ,i);}//16 , inclinacao para cima
double getSinalInclinacaoDw (int i){return CiCustom::GetData(IFEIRA_BUF_SINAL_INCL_DW ,i);}//17 , inclinacao para baixo
// forca da tendencia e reversao
//double getTendencia (int i){return CiCustom::GetData(IFEIRA_BUF_TENDENCIA,i);}//18 , forca da tendencia em ticks // descontinuado na versao 03-06
//double getReversao (int i){return CiCustom::GetData(IFEIRA_BUF_REVERSAO ,i);}//19 , forca da reversao em ticks // descontinuado na versao 03-06
// forca da tendencia e reversao
double getDesbUP0(int i){return CiCustom::GetData(IFEIRA_BUF_DESB_UP0,i);}//18 , desbalanceamento na primeira fila do book (preco deve subir). Subtraia 1 para encontrar o desbalanceamento DW.
double getDesbUP1(int i){return CiCustom::GetData(IFEIRA_BUF_DESB_UP1,i);}//19 , desbalanceamento na segunda fila do book (preco deve subir). subtraia 1 para encontrar o desbalanceamento DW.
//double getDemandaMedia(){ return ( getPrecoMedioSel(0) + getPrecoMedioBuy(0) ) / 2.0; }
//double getOfertaMedia() { return ( getPrecoMedioAsk(0) + getPrecoMedioBid(0) ) / 2.0; }
double getVolTrade (int i) {return CiCustom::GetData(IFEIRA_BUF_VOLUMETRADE ,i);}//26 , volume total dos trades no periodo. // a partir da versao 0307.
double getVolTradeBuy(int i) {return CiCustom::GetData(IFEIRA_BUF_VOLUMETRADE_BUY ,i);}//27 , volume dos trades de compra no periodo. // a partir da versao 0307.
double getVolTradeSel(int i) {return CiCustom::GetData(IFEIRA_BUF_VOLUMETRADE_SEL ,i);}//28 , volume dos trades de venda no periodo. // a partir da versao 0307.
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool osc_ind_minion_feira::Create( const string symbol ,
const ENUM_TIMEFRAMES period ,
const bool debug01 ,
const bool gerarVolume02 ,
const bool gerarOfertas03 , //nao eh usado
const int qtdBarProcHist04 ,
const double bookOut05 ,
const int qtdPeriodo06 ,
const bool gerarSqlLog07=false,
const string versao=IFEIRA_VERSAO_DEFAULT ){
//--- set parameters of the indicator
if ( versao == IFEIRA_VERSAO_0103 ){ m_feira_name = IFEIRA_NAME_0103;}
else if( versao == IFEIRA_VERSAO_0104 ){ m_feira_name = IFEIRA_NAME_0104;}
else if( versao == IFEIRA_VERSAO_0202 ){ m_feira_name = IFEIRA_NAME_0202;}
else if( versao == IFEIRA_VERSAO_0203 ){ m_feira_name = IFEIRA_NAME_0203;}
else if( versao == IFEIRA_VERSAO_0204 ){ m_feira_name = IFEIRA_NAME_0204;}
else if( versao == IFEIRA_VERSAO_0205 ){ m_feira_name = IFEIRA_NAME_0205;}
else if( versao == IFEIRA_VERSAO_0206 ){ m_feira_name = IFEIRA_NAME_0206;}
else if( versao == IFEIRA_VERSAO_0306 ){ m_feira_name = IFEIRA_NAME_0306;}
else if( versao == IFEIRA_VERSAO_0307 ){ m_feira_name = IFEIRA_NAME_0307;}
else { Print(__FUNCTION__+": ERROR criando indicador feira :-( " + m_feira_name + " : versao ", versao, " invalida." );
return false;
}
m_feira_qtd_buffers = IFEIRA_QTD_BUFFERS;
MqlParam parameters[IFEIRA_QTD_PARAM];
//---
parameters[0].type=TYPE_STRING; parameters[0].string_value = m_feira_name ;
parameters[1].type=TYPE_BOOL ; parameters[1].integer_value = debug01 ;
parameters[2].type=TYPE_BOOL ; parameters[2].integer_value = gerarVolume02 ;
parameters[3].type=TYPE_BOOL ; parameters[3].integer_value = gerarOfertas03 ;
parameters[4].type=TYPE_INT ; parameters[4].integer_value = qtdBarProcHist04;
parameters[5].type=TYPE_DOUBLE; parameters[5].double_value = bookOut05 ;
parameters[6].type=TYPE_INT ; parameters[6].integer_value = qtdPeriodo06 ;
parameters[7].type=TYPE_BOOL ; parameters[7].integer_value = gerarSqlLog07 ;
//--- object initialization
if( !CiCustom::Create(symbol,period,IND_CUSTOM,7,parameters) ){
Print(__FUNCTION__+": ERROR criando indicador feira :-( " + m_feira_name + " : ", GetLastError() );
return false;
}
//--- number of buffers
if(!CiCustom::NumBuffers(m_feira_qtd_buffers)){
Print(__FUNCTION__+": ERROR criando buffers do indicador feira :-( " + m_feira_name + " : ", GetLastError() );
return false;
}
//--- ok
return true;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
osc_ind_minion_feira::osc_ind_minion_feira(){}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
osc_ind_minion_feira::~osc_ind_minion_feira(){}
//+------------------------------------------------------------------+