Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // -----------------------------------------------------------------------------------------------------
- // 1º Exemplo para função de retorno de SPREAD em PIPs e/ou PIPETs
- // Usando a função nativa da linguagem MQL4 MarketInfo
- // -----------------------------------------------------------------------------------------------------
- enum ENUM_MARKET_INFO_TYPE{
- ENUM_PIPs, // 0
- ENUM_PIPETs // 1
- };
- double GetSpread(ENUM_MARKET_INFO_TYPE type=ENUM_PIPs){
- // Retorna o Spread em PIPEts
- // EURUSD 5 digitos: 0,00012 = 12 PIPETs
- // USDJPY 3 digitos: 0,012 = 12 PIPETs
- // USDRUB 4 digitos: 0,0012 = 12 PIPETs
- // XAUUSD 2 digitos: 0,12 = 12 PIPETs
- double spread = MarketInfo(_Symbol, MODE_SPREAD);
- // Caso precise do resultado em PIPs´
- // Filtre os ativos com 3 e 5 dígitos e divida por 10
- // 3 e 5 dígitos, precisa de conversão
- // EURUSD 5 digitos: 0,00012 = 12 PIPETs / 10 = 1,2 PIPs
- // USDJPY 3 digitos: 0,012 = 12 PIPETs / 10 = 1,2 PIPs
- // 2 e 4 dígitos, NÃO precisa de conversão
- // USDRUB 4 digitos: 0,0012 = 12 PIPETs = 12 PIPs
- // XAUUSD 2 digitos: 0,12 = 12 PIPETs = 12 PIPs
- if( type==ENUM_PIPs && ( _Digits==3 || _Digits==5 ) ) {
- if( spread > 0 ){ spread /=10; }
- }
- return spread;
- }
- // Exemplos de chamada da função com spread de 1.2 PIPs no EURUSD
- double spread_pipets = GetSpread(ENUM_PIPETs); // 12 PIPETs
- double spread_pips = GetSpread(ENUM_PIPs); // 1.2 PIPs
- double spread_pips2 = GetSpread(); // GetSpread() sem parâmetro, força retorno em PIPs
- // -----------------------------------------------------------------------------------------------------
- // 2º Exemplo para função de retorno de SPREAD. Agora em Ponto Flutuante, PIPs e/ou PIPETs
- // Também foi mudada a forma de recuperação do SPREAD para usar a diferença entre o Ask e o Bid
- // Para garantir compatibilidade com o TDS ( Tick Data Suite )
- // -----------------------------------------------------------------------------------------------------
- enum ENUM_MARKET_INFO_TYPE{ ENUM_PIPs, ENUM_PIPETs, ENUM_FLOATs };
- enum ENUM_MARKET_INFO_TYPE{
- ENUM_PIPs, // 0
- ENUM_PIPETs, // 1
- ENUM_FLOATs // 2
- };
- double GetSpread(ENUM_MARKET_INFO_TYPE type=ENUM_PIPs){
- // 1 - Calculamos o Spread pela diferença entre as cotações Ask-Bid. A função MathAbs() Garante valor positivo
- double spread_float = MathAbs(Ask-Bid);
- // 2 - Normalizamos o valor garantindo o que tenha o mesmo número de dígitos do ativo
- spread_float = NormalizeDouble(spread_float, _Digits);
- // 3 - Se queremos apenas o restulado em ponto flutuante, paramos por aqui
- if( type==ENUM_FLOATs)
- return spread_float;
- // 3 - Desafio: Converter o spread de ponto flutuante para PIPEts
- // Facilitando a compreensão, para isso, basta dividir o valor em ponto flutuante
- // pelo PONTO FLUTUANTE DO ATIVO... Point!
- double spread = spread_float / _Point; // ou Point(), tanto faz
- // Exemplo: EURUSD 5 Digitos Ask: 1.09317 Bid: 1.09305
- // spread_float: MathAbs(Ask - Bid)
- // spread_float: MathAbs(1.09317 - 1.09305) = 0.00012
- // EURUSD Point: 0.00001
- // spread = spread_float / point spread = 0.00012 / 0,00001 = 12 PIPETs
- // Aqui a mesma coisa... Já temos o resultado em PIPETs da mesma forma que no método anterior
- // Agora, Fazemos apenas o ajuste final para ativos de 3 e 5 dígitos. 2 e 4 dígitos já está pronto
- if( type==ENUM_PIPs && ( _Digits==3 || _Digits==5 ) ) {
- if( spread > 0 ){ spread /=10; }
- }
- return spread;
- }
- // Exemplos de chamada da função com spread de 1.2 PIPs no EURUSD
- double spread_ponto_flutuante = GetSpread(ENUM_FLOATs); // 0.00012
- double spread_pipets = GetSpread(ENUM_PIPETs); // 12 PIPETs
- double spread_pips = GetSpread(ENUM_PIPs); // 1.2 PIPs
- double spread_pips2 = GetSpread(); // GetSpread() sem parâmetro, força retorno em PIPs
Advertisement
Add Comment
Please, Sign In to add comment