Indicadores de múltiplos períodos de tempo - página 405

 

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?

 
Jonny473:
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.

 
mladen:
FxTrendsTraderAqui você vai

Prezado Mladen

Seria possível acrescentar "Coloração em Declive" neste indicador

Obrigado de antemão

secretcode

 
Jonny473:
Publicará o indicador em um segundo...

Ataque cardíaco....?...

 
fxnewbie:
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

/*------------------------------------------------------------------------------------

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);

}

ALERTA: Dividi o código em duas partes por causa da política 10k; então basta copiar ambas as partes em uma e criar o indicador!

 

Ok pessoal aqui vão vocês, desculpem por todas as fórmulas!

Arquivos anexados:
tdi-2.mq4  4 kb
 

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

 
Jonny473:
O código errado Apenas copiou o código certo em outro, sobrescreveu um antigo, compilou-o 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 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!

Arquivos anexados:
tdi-2.mq4  4 kb