Eu quero fazer um MA multitemporal, que muda de cor quando a tendência muda. Eu fiz a afixação do preço médio de outros prazos, mas não sei como resolver o problema com a mudança de cor.
//+------------------------------------------------------------------+//| MA-MTFC.mq4 |//| Copyright 2012, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Yellow#property indicator_color2 Green#property indicator_color3 Red//+------------------------------------------------------------------+externint MA_TF=1440;
externint MA_Period=89;
externint MA_Shift=0;
externint MA_Method=2;
externint MA_AP=0;
//+------------------------------------------------------------------+double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];
string Symb;
double MA;
int init()
{
Symb=Symbol();
//---if (MA_TF != 1)
if (MA_TF != 5)
if (MA_TF != 15)
if (MA_TF != 30)
if (MA_TF != 60)
if (MA_TF != 240)
if (MA_TF != 1440)
if (MA_TF != 10080)
if (MA_TF != 43200)
if (MA_TF != 0)
return;
//---SetIndexBuffer(0,Buffer_Yellow);
SetIndexBuffer(1,Buffer_Lime);
SetIndexBuffer(2,Buffer_Red);
//---SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
//---return(0);
}
int deinit()
{
return(0);
}
int start()
{
double MA;
int counted_bars=IndicatorCounted();
int limit=Bars-counted_bars-1;
if (limit>1)
limit=Bars-1;
for(int i=limit-1;i>=0;i--)
{
int pos=iBarShift(NULL, MA_TF, Time[i]);
MA=iMA(Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
Buffer_Yellow[i]=MA;
Buffer_Lime[i]=MA;
Buffer_Red[i]=MA;
if(Buffer_Yellow[i]>Buffer_Yellow[i+1])
{
Buffer_Red[i]=EMPTY_VALUE;
}
elseif(Buffer_Yellow[i]<Buffer_Yellow[i+1])
{
Buffer_Lime[i]=EMPTY_VALUE;
}
else
{
Buffer_Red[i]=EMPTY_VALUE;
Buffer_Lime[i]=EMPTY_VALUE;
}
}
return(0);
}
Roman.: Esta não é a maneira de fazer isso. No testador, você tem que rodar a coruja sobre o TF mínimo usado nesta coruja aos preços de abertura. É melhor deixar a coruja em aberto em minutos. E é melhor prescrever o TF, explicitamente!
Roman, estou tentando fazer o indicador a ser exibido no Testador de Estratégia. O indicador utiliza prazos mais baixos para a análise.
FAQ: Seria melhor se você pudesse mostrar o código completo, e colá-lo usando o botão "SRC".
OK, vou tentar adicionar código a este posto.
Na verdade, sei o que quero alcançar no final - há muito tempo estou negociando, mas só comecei a programar depois de perceber exatamente o que quero programar.
Meu objetivo agora é conseguir uma seta verde em cada barra que feche acima de todas as três barras e uma seta vermelha em cada barra que feche abaixo das três e somente para as barras fechadas depois de anexadas ao gráfico. Não estou interessado no bar atual.
Quero que estas setas estejam na tabela enquanto o indicador estiver anexado a ela e depois removido.
Estou desenhando os controles deslizantes agora apenas para maior clareza e depois os retirarei da EA.
Agora temos alguns cursores e flechas, mas eles aparecem e desaparecem agora e aparecem sobre barras erradas. Isso é o que eu não entendo.
Acho que posso ter confundido algo com j ou j+1 nas linhas 106-111 e qual elemento para prendê-los.
Obrigado se você puder me dar uma dica.
Por algum motivo, o botão SRC não funciona. Vou tentar inserir o arquivo como um mq4 normal.
Bom dia para esta linha! O indicador compila, mas não desenha nada, e eu não sei o que está errado, o que pensar, como procurar por um bug. De qualquer forma, o código funcionou, acrescentei uma função a ele com mudanças mínimas, mas agora ele não faz nada!!!
Talvez o problema esteja em algum lugar nas declarações que começam com a grade, ou talvez eu esteja muito lento e bagunçado... Estava funcionando!
//+------------------------------------------------------------------+//| ИндюкДимонакомпил.mq4 |//| Copyright 2012, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"#import "user32.dll"int PostMessageA(int hWnd,int Msg,int wParam,string lParam);
#import#define WM_COMMAND 0x0111int delimiter = 0;
#property indicator_chart_windowdouble ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
double вершина;
double основание_первого_снижения;
double начало;
double вершина_волны_3;
externint T=4,K=200;
int timeframe, start ;
int бар_вершина ;
int бар_основание_первого_снижения;
int бар_начало;
int pereklutsatel;
double naklon,linija2; int P;externint RO=49;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicators//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted();
int limit=Bars-counted_bars-1;
for (int i=limit;i>=0;i--) {
//----for ( int J=0;J<=RO;J++){
//----// for(int i=Bars; i>=0;i--)
i=Bars;
бар_вершина=iHighest( NULL, timeframe, MODE_HIGH, K, start ) ;
вершина =High[ бар_вершина ];
бар_основание_первого_снижения=iLowest( NULL, timeframe, MODE_LOW,NormalizeDouble ( бар_вершина/2,0), start ) ;
основание_первого_снижения=Low[ бар_основание_первого_снижения ];
бар_начало=iLowest( NULL, timeframe, MODE_LOW,NormalizeDouble (бар_вершина*1.5,0), бар_вершина ) ;
начало=Low[ бар_начало ];
if(начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
НижняячертаBuffer2[бар_начало]=начало;linija2=начало;for(i=бар_начало-1;i>=0;i--){linija2=linija2-naklon;
НижняячертаBuffer2[i]=linija2;
}
НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
for (i=0;i<100;i++){ СинняячертаBuffer3[i]= Open[i];}
for (i=330;i<500;i++){ СинняячертаBuffer3[i]= Open[i];}
ВерхняячертаBuffer1[бар_начало]=начало;
double точка4; int бар_точка4; бар_точка4=iHighest( NULL, timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ;
точка4 =High[ бар_точка4 ];
if(вершина>точка4){naklon=(начало-точка4)/(бар_начало-бар_точка4);
double linija1=начало;for(i=бар_начало-1;i>=0;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
double vulf=НижняячертаBuffer2[0];
if ( vulf==Ask&&vulf==Bid)vulf=1;
else{ for (vulf=vulf+Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf-Point){
if ( vulf==Ask&&vulf==Bid){vulf=1;}}
for (vulf=vulf-Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf+Point){
if ( vulf==Ask&&vulf==Bid)vulf=1;}
}
if (vulf==1){Comment (" Есть вульв!!! " , " timeframe " , timeframe);return(0); }
if (vulf!=1&&pereklutsatel==1) {
if(delimiter<3){delimiter++;Comment(delimiter);return(0);}
delimiter=0;
fChangePeriod();P++;
} } }
//----return(0);
}
//+------------------------------------------------------------------+void fChangePeriod(){int ii,hwd = WindowHandle(Symbol(),Period());
switch(Period()){
casePERIOD_W1 : ii = 33134; break; //PERIOD_D1;casePERIOD_D1 : ii = 33136; break; //PERIOD_H4;casePERIOD_H4 : ii = 33135; break; //PERIOD_H1;casePERIOD_H1 : ii = 33140; break; //PERIOD_M30;casePERIOD_M30 : ii = 33139; break; //PERIOD_M15;casePERIOD_M15 : ii = 33138; break; //PERIOD_M5;casePERIOD_M5 : ii = 33137; break; //PERIOD_M1;casePERIOD_M1 : ii = 33141; break; //PERIOD_W1;
}
PostMessageA(hwd, WM_COMMAND, ii, 0);
return;
}
skyjet: Muito obrigado! Então a EA negocia com carrapatos, mas posso trocá-lo para negociar em intervalos (castiçais)? Estou totalmente confuso com ela.
É difícil dizer, eu não o fiz dessa maneira. Talvez você precise de alguma forma se lembrar de uma barra ou candelabro e se o próximo aparecer, então... alguma coisa está acontecendo. O código escrito dentro da função de início é executado em cada tick, e o que já está escrito ali é o que o programador escreveu.
Yuri, você pode sugerir algo sobre minha pergunta logo acima?
Roteiro de verificação
Resultado
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 5 TimeOpen: 00:00 Bar: 212
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 15 TimeOpen: 00:00 Bar: 70
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 30 TimeOpen: 00:00 Bar: 35
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 60 TimeOpen: 00:00 Bar: 17
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 240 TimeOpen: 00:00 Bar: 4
Uma palavra de conselho, por favor:
Eu quero fazer um MA multitemporal, que muda de cor quando a tendência muda. Eu fiz a afixação do preço médio de outros prazos, mas não sei como resolver o problema com a mudança de cor.
Esta não é a maneira de fazer isso. No testador, você tem que rodar a coruja sobre o TF mínimo usado nesta coruja aos preços de abertura. É melhor deixar a coruja em aberto em minutos. E é melhor prescrever o TF, explicitamente!
Seria melhor se você pudesse mostrar o código completo, e colá-lo usando o botão "SRC".
OK, vou tentar adicionar código a este posto.
Na verdade, sei o que quero alcançar no final - há muito tempo estou negociando, mas só comecei a programar depois de perceber exatamente o que quero programar.
Meu objetivo agora é conseguir uma seta verde em cada barra que feche acima de todas as três barras e uma seta vermelha em cada barra que feche abaixo das três e somente para as barras fechadas depois de anexadas ao gráfico. Não estou interessado no bar atual.
Quero que estas setas estejam na tabela enquanto o indicador estiver anexado a ela e depois removido.
Estou desenhando os controles deslizantes agora apenas para maior clareza e depois os retirarei da EA.
Agora temos alguns cursores e flechas, mas eles aparecem e desaparecem agora e aparecem sobre barras erradas. Isso é o que eu não entendo.
Acho que posso ter confundido algo com j ou j+1 nas linhas 106-111 e qual elemento para prendê-los.
Obrigado se você puder me dar uma dica.
Por algum motivo, o botão SRC não funciona. Vou tentar inserir o arquivo como um mq4 normal.
Roteiro de verificação
Decidiu ajustar seu código e fazer um cheque para se adequar aos meus propósitos (execute-o no H1).
E aqui está
Decidiu ajustar seu código e fazer um cheque para se adequar aos meus propósitos (execute-o no H1).
E isto é o que eu tenho
Você verifica no testador, abrindo os preços. Assim, Roman já escreveu como fazer isso.
Preço de fechamento da barra anterior Fechar[1]
Bom dia para esta linha! O indicador compila, mas não desenha nada, e eu não sei o que está errado, o que pensar, como procurar por um bug. De qualquer forma, o código funcionou, acrescentei uma função a ele com mudanças mínimas, mas agora ele não faz nada!!!
Talvez o problema esteja em algum lugar nas declarações que começam com a grade, ou talvez eu esteja muito lento e bagunçado... Estava funcionando!
Muito obrigado! Então a EA negocia com carrapatos, mas posso trocá-lo para negociar em intervalos (castiçais)? Estou totalmente confuso com ela.
É difícil dizer, eu não o fiz dessa maneira. Talvez você precise de alguma forma se lembrar de uma barra ou candelabro e se o próximo aparecer, então... alguma coisa está acontecendo. O código escrito dentro da função de início é executado em cada tick, e o que já está escrito ali é o que o programador escreveu.