Indicadores de múltiplos períodos de tempo - página 405
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
tempo de fusão da TDI
Ei, pessoal, ei, Mladen,
Como alguns de vocês usam o TDI como um fornecedor de sinais eu me deparei com o TDI Alert System, como visto abaixo (eu apenas dou um sinal ou mesmo um EMail Alert quando uma cruz no TDI está acontecendo). Provavelmente, isto não é novidade. Como é mais seguro comercializar o TDI com pelo menos dois períodos de tempo (60min como base, 5min para escalpe), estou perguntando se o seguinte é possível: O que eu quero é fundir sinais de pelo menos dois períodos de tempo diferentes para me dar um sinal global mais confiável: O maior intervalo de tempo é usado como base, para cima ou para baixo dá a direção para o(s) menor(es). Se o mesmo sinal aparecer no menor período de tempo, isso é uma troca; a troca é abandonada no sinal de saída somente dependendo do menor período de tempo.
Então aqui está o indicador que estou falando sobre a criação de sinais; o que vocês acham ou algo semelhante já foi lançado?![](https://c.mql5.com/forextsd/smiles/mouth_closed.png)
Ei pessoal, ei Mladen,
Como alguns de vocês usam o TDI como um fornecedor de sinais eu me deparei com o TDI Alert System, como visto abaixo (eu apenas dou um sinal ou mesmo um EMail Alert quando uma cruz no TDI está acontecendo). Provavelmente, isto não é novidade. Como é mais seguro comercializar o TDI com pelo menos dois períodos de tempo (60min como base, 5min para escalpe), estou perguntando se o seguinte é possível: O que eu quero é fundir sinais de pelo menos dois períodos de tempo diferentes para me dar um sinal global mais confiável: O maior intervalo de tempo é usado como base, para cima ou para baixo dá a direção para o(s) menor(es). Se o mesmo sinal aparecer no menor período de tempo, isso é uma troca; a troca é abandonada no sinal de saída somente dependendo do menor período de tempo.
Então aqui está o indicador de que estou falando em criar sinais; o que vocês acham ou algo semelhante já foi postado?Afixará o indicador em um segundo.
FxTrendsTraderAqui você vai
Prezado Mladen
Seria possível acrescentar "Coloração em Declive" neste indicador![](https://c.mql5.com/forextsd/smiles/smile.png)
Obrigado de antemão
secretcode
Publicará o indicador em um segundo...
Ataque cardíaco....?...![](https://c.mql5.com/forextsd/smiles/mouth_closed.png)
Ataque cardíaco....?...
Não há infarto do miocárdio: Aqui está o código, basta copiá-lo e criar o indicador, não é possível encontrar o arquivo![](https://c.mql5.com/forextsd/smiles/baring_teeth.png)
/*------------------------------------------------------------------------------------
Nome: xTDI-Arrow.mq4
Copyright ?2010, Xaphod, Forex Whiz
Descrição: - Desenha setas para as cruzes TDI
- Fornece alertas para os crossovers das três linhas acima.
Registro de mudanças:
2010-10-19. Xaphod, v1.00
- Lançamento inicial
-------------------------------------------------------------------------------------*/
// Propriedades indicadoras
#propriedade copyright "Copyright ? 2010, Xaphod"
#link da propriedade "http://forexwhiz.appspot.com"
#janela_do_cartão_indicador de propriedade
#property indicator_buffers 4
#indicador de propriedade_color1 LimeGreen
#indicador de propriedade_color2 Vermelho
#indicador de propriedade_color3 Verde
#indicador de propriedade_color4 FireBrick
#largura_do_indicador de propriedade1 1
#largura_do_indicador de propriedade2 1
#largura_do_indicador de propriedade3 1
#largura_do_indicador de propriedade4 1
#indicador de propriedade_máximo 1
#indicador de propriedade_mínimo 0
// Definições constantes
#define INDICATOR_NAME "xTDI-Arrow"
#define INDICATOR_VERSION INDICATOR_VERSION "v1.00
#define BAR_HEIGHT 1.00
#define TDI_INDI "Traders_Dynamic_Index"
#define ARROW_THIN_UP 225
#define ARROW_THIN_DN 226
#define ARROW_THICK_UP 233
#define ARROW_THICK_DN 234
#define ARROW_HOLLOW_UP 241
#define ARROW_HOLLOW_DN 242
#define ARROW_ROUND_UP 221
#define ARROW_ROW_ROUND_DN 222
// Parâmetros indicadores
cadeia externa Indi.Copyright= "?2010, forexwhiz.appspot.com";
cadeia externa Indi.Version= INDICADOR_VERSION;
string externa Show.Settings="????????????????????????????????????";
extern int Show.TimeFrame=0; // Tempo de uso. Tempo atual=0.
externa Bool Show.MarketBaseLine=verdadeiro; // Mostrar cruz acima/abaixo da linha de base do mercado em uma cor diferente
externo int Show.ArrowType=0; // 0=Thin, 1=Thick, 2=Hollow, 3=Round
Exterior int Show.ArrowSize=1; // Tamanho da seta (1-5)
Exterior int Show.ArrowOffset=10; // Offset do fim da vela para mostrar seta
TDI.Settings="????????????????????????????????????";
TDI.RSIP período = 13; // período. Valores recomendados: 8-25
externo int TDI.RSIPrice = 0; // 0=CLOSE, 1=OPEN, 2=HighH, 3=LOW, 4=MEDIAN, 5=TYPICAL, 6=WEIGHTED
TDI.VolatilityBand int externo = 34; // Valores recomendados: 20-40
TDI.RSIPriceLine int exterior = 2; // Período
externo int TDI.RSIPriceType = 0; // 0=SMA, 1=EMA, 2=SSMA, 3=LWMA
TDI.TradeSignalLine = 7; // Período
TDI.TradeSignalType = 0; // 0=SMA, 1=EMA, 2=SSMA, 3=LWMA
Alerta de corda externa. Configurações="????????????????????????????????????";
Alerta.RSIPriceLine=verdadeiro; // Alerta se o preço do RSI cruzar a linha de sinal. Cruz verde vermelha.
Alert.r.s.r.l.b.l. externo=verdadeiro; // Alerta se o preço da RSI cruza a linha de sinal e a linha de base do mercado. Cruzes verdes vermelho e amarelo
Alerta de bar.NewBarOnly=verdadeiro; // True=Alerta quando novo bar é aberto. False=Alertar a qualquer momento quando as linhas se cruzam
Tempo limite para alerta externo=60; // Desativar os alertas para N segundos após um alerta. Somente quando Alert.NewBarOnly=false
Alerta.Popup=verdadeiro; // Janela popup e som em alerta
Alerta de bool externo.Email=falso; // Enviar email em alerta
// Variáveis do módulo global
duplo dBuffer0[];
duplo dBuffer1[];
duplo dBuffer2[];
duplo dBuffer3[];
bool bStartup;
void SetArrowType(int& iArrowUp, int& iArrowDn) {
interruptor (Show.ArrowType) {
caso 1: // Fino
iArrowDn=ARROW_THIN_DN;
iArrowUp=ARROW_THIN_UP;
break;
caso 2: // Vazio
iArrowDn=ARROW_HOLLOW_DN;
iArrowUp=ARROW_HOLLOW_UP;
break;
caso 3: // Redondo
iArrowDn=ARROW_ROUND_DN;
iArrowUp=ARROW_ROUND_UP;
intervalo;
default: // Espesso
iArrowDn=ARROW_THICK_DN;
iArrowUp=ARROW_THICK_UP;
break;
}
}
//-----------------------------------------------------------------------------
// função: init()
// Descrição: Função de inicialização de indicador personalizada.
//-----------------------------------------------------------------------------
int init() {
int iArrowUp;
int iArrowDn;
sType de cordas;
string sTF;
SetArrowType(iArrowUp, iArrowDn );
SetIndexStyle(0,DRAW_ARROW,EMPTY,Show.ArrowSize);
SetIndexBuffer(0,dBuffer0);
SetIndexLabel(0, "TDI:Mkt-Up");
SetIndexArrow(0, "iArrowUp");
SetIndexStyle(1,DRAW_ARROW,EMPTY,Show.ArrowSize);
SetIndexBuffer(1,dBuffer1);
SetIndexLabel(1, "TDI:Mkt-Dn");
SetIndexArrow(1, "iArrowDn");
SetIndexStyle(2,DRAW_ARROW,EMPTY,Show.ArrowSize);
SetIndexBuffer(2,dBuffer2);
SetIndexLabel(2, "TDI:Sig-Up");
SetIndexArrow(2, "iArrowUp");
SetIndexStyle(3,DRAW_ARROW,EMPTY,Show.ArrowSize);
SetIndexBuffer(3,dBuffer3);
SetIndexLabel(3, "TDI:Sig-Dn");
SetIndexArrow(3, "iArrowDn");
if (Show.TimeFrame==0)
sTF="";
senão
sTF=TF2Str(Show.TimeFrame);
IndicatorShortName(INDICADOR_NAME+" "+sTF);
bStartup=verdadeiro;
return(0);
}
//-----------------------------------------------------------------------------
// função: deinit()
// Descrição: Função de desinicialização de indicador personalizada.
//-----------------------------------------------------------------------------
int deinit() {
retorno (0);
}
///-----------------------------------------------------------------------------
// função: start()
// Descrição: Função de iteração de indicador personalizada.
//-----------------------------------------------------------------------------
int start() {
int iNewBars;
int iCountedBars;
iNewBars; int iCountedBars; int iNewBars;
dupla dVBHighLine; // faixa de volatilidade superior - linha azul superior
dupla dVBLowLine; // Menor faixa de volatilidade - Linha Azul Inferior
dupla dMarketBaseLine0; // Linha Base de Mercado - Linha Amarela
dupla dRSIPriceLine0; // RSI PriceLine - Linha verde
linha dupla dTradeSignalLine0; // Trade Signal Line - linha vermelha
dMarketBaseLine1 estática dupla; // Linha Base de Mercado - Linha Amarela
dRSIPriceLine1 estática dupla; // RSI PriceLine - Linha verde
dTradeSignalLine1; // Trade Signal Line - linha vermelha
duplo dofffset;
// Obter carrapatos não processados
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) retorno (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=Bars-iCountedBars;
for(i=iNewBars; i>=0; i--) {
// Obter dados anteriores da TDI
//if (Time!=tCurTime) {
//tCurTime=Time;
dMarketBaseLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i+1); // Linha Amarela
dRSIPriceLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i+1); // Linha verde
dTradeSignalLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i+1); // Linha vermelha
//}
// Obter dados atuais da TDI
dMarketBaseLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Linha Amarela
dRSIPriceLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Linha verde
dTradeSignalLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Linha vermelha
// Limpar o buffer de exibição atual
dBuffer0 = EMPTY_VALUE;
dBuffer1 = EMPTY_VALUE;
dBuffer2 = EMPTY_VALUE;
dBuffer3 = EMPTY_VALUE;
dOffset=Point*(10*Show.ArrowOffset/MarketInfo(Symbol(),MODE_TICKVALUE));
if (dRSIPriceLine0>dMarketBaseLine0 && dRSIPriceLine1dTradeSignalLine0 && Show.MarketBaseLine)
dBuffer0 = Low-dOffset;
caso contrário se (dRSIPriceLine0>dTradeSignalLine0 && dRSIPriceLine1<dTradeSignalLine1)
dBuffer2 = Low-dOffset;
if (dRSIPriceLine0dMarketBaseLine1 && dRSIPriceLine0<dTradeSignalLine0 && Show.MarketBaseLine)
dBuffer1 = High+dOffset;
senão se (dRSIPriceLine0dTradeSignalLine1)
dBuffer3 = High+dOffset;
// Verificar se há alertas
se (i==0) AlertCheck();
}
// Reiniciar a bandeira de partida
se (bStartup) bStartup=false;
// Tchau bye bye
retorno(0);
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------------------
// função: TF2Str()
// Descrição: Converta o cronograma em um fio
//-----------------------------------------------------------------------------
string TF2Str(int iPeriod) {
switch(período iP) {
caso PERÍODO_M1: retorno("M1");
caixa PERÍODO_M5: return("M5");
caixa PERÍODO_M15: return("M15");
caixa PERÍODO_M30: return("M30");
caixa PERÍODO_H1: return("H1");
caixa PERÍODO_H4: return("H4");
caixa PERÍODO_D1: return("D1");
caixa PERÍODO_W1: return("W1");
caixa PERÍODO_MN1: return("MN1");
padrão: return("M "+iPeriodo);
}
}
//-----------------------------------------------------------------------------
// função: AlertCheck()
// Descrição: Verificar as condições de alerta e executar alertas
//-----------------------------------------------------------------------------
AlertCheck() {
sAlertMsg. de corda;
data estáticatime tCurTime=0;
estático int iAlertTimer[2];
estático int iAlertStatus[2];
dMarketBaseLine[2]; // Linha Base de Mercado - Linha Amarela
dRSIPriceLine[2]; // RSI PriceLine - Linha verde
linha dupla dTradeSignalLine[2]; // Trade Signal Line - linha vermelha
int i,j;
bool bNewBar=falso;
// Abortar se o indicador acabou de começar
se (bStartup) {
tCurTime=Time[0];
return(0);
}
// Verificação de alertas
if (Alert.RSIPriceLine || Alert.MarketBaseLine) {
// Alerta apenas se a nova barra
se (Alert.NewBarOnly) {
// Tempo de reinicialização
if(tCurTime!=Time[0]) {
tCurTime=Time[0];
bNewBar=verdadeiro;
// Obter dados TDI sobre a nova barra, ou seja, barras 1 e 2
para (i=0; i<2; i++) {
j=i+1;
dMarketBaseLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,j); // Linha Amarela
dRSIPriceLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,j); // Linha verde
dTradeSignalLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,j); // Linha vermelha
} //endfor
}//endif
}
senão {
// Obter dados TDI na barra atual, ou seja, barra 0 e 1
para (i=0; i<2; i++) {
dMarketBaseLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Linha Amarela
dRSIPriceLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Linha verde
dTradeSignalLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPrice,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,
TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Linha vermelha
} //endfor
} // terminar se(Alerta.NewBar-only)
if (bNewBar || (!Alert.NewBarOnly && iAlertTimer[0]<GetTickCount())) {
//Alerta RSIPriceLine > TradeSignalLine
if (dRSIPriceLine[0]>dTradeSignalLine[0] && dRSIPriceLine[1]<dTradeSignalLine[1] && Alert.RSIPriceLine) {
se (!Alert.NewBarOnly) iAlertTimer[0]=GetTickCount()+Alert.Timeout*1000;
sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Above TradeSignalLine";
se (Alerta.Popup) Alerta(sAlertMsg);
if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);
} //terminar se
//Alerta RSIPriceLine < TradeSignalLine
if (dRSIPriceLine[0]dTradeSignalLine[1] && Alert.RSIPriceLine) {
//PrintD("RSIPriceLine < TradeSignalLine");
se (!Alert.NewBarOnly) iAlertTimer[0]=GetTickCount()+Alert.Timeout*1000;
sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Below TradeSignalLine";
se (Alerta.Popup) Alerta(sAlertMsg);
if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);
} //terminar se
} //terminar se
if (bNewBar || (!Alert.NewBarOnly && iAlertTimer[1]<GetTickCount())) {
//Alerta se RSIPriceLine > TradeSignalLine && dMarketBaseLine
if (dRSIPriceLine[0]>dMarketBaseLine[0] && dRSIPriceLine[1]<dMarketBaseLine[1] && Alert.MarketBaseLine) {
if (dRSIPriceLine[0]>dTradeSignalLine[0] && dRSIPriceLine[1]<dTradeSignalLine[1]) {
se (!Alert.NewBarOnly) iAlertTimer[1]=GetTickCount()+Alert.Timeout*1000;
sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Above TradeSignalLine e MarketBaseLine";
if (Alert.Popup) Alert(sAlertMsg);
if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);
} //terminar se
} //terminar se
//Alerta se RSIPriceLine < TradeSignalLine && dMarketBaseLine
if (dRSIPriceLine[0]dMarketBaseLine[1] && Alert.MarketBaseLine) {
se (dRSIPriceLine[0]dTradeSignalLine[1] ) {
se (!Alert.NewBarOnly) iAlertTimer[1]=GetTickCount()+Alert.Timeout*1000;
sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Below TradeSignalLine and MarketBaseLine";
se (Alerta.Popup) Alerta(sAlertMsg);
if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);
} //terminar se
} //terminar se
} //terminar se
}// terminar if(Alert.RSIPriceLine || Alert.MarketBaseLine)
retorno(0);
}
Ok pessoal aqui vão vocês, desculpem por todas as fórmulas!
O código errado
Bastava copiar o código certo em outro, sobrescrever um antigo, compilá-lo e o arquivo ainda está usando o código antigo...! Não o obtenha; de qualquer forma o código está correto
O código errado
O código que eu publiquei antes de ....
Tenha aqui uma versão Vista no meu antigo Laptop, é por isso que os arquivos mq4 continuam desaparecendo; agora deve funcionar!