[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 271

 
nlp2311:

Por favor, ajude-me a descobrir isso. Quero que a linha seja correta. Mas o buffer dá apenas uma linha, ele deve ser plano no meio do dia, como linhas pivot.... Eu tenho uma linha que vem do nível de X hora do dia anterior.

POR FAVOR, ENTENDA.... eu não consigo entender(((

Bem, digamos que você precisa tomar um muving às 5 horas em qualquer horário, claro que não no diário, mas em um menor. Digamos, a partir de uma hora ou menos.

E atraia-o para as 5 horas do dia seguinte. É assim que se faz.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 4;
//==============================
double fx[];
double mai;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx);
   
   p=hrma*60/Period(); // пересчет периода мувинга на любой таймфрейм
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) mai=iMA(NULL,0,p,0,0,0,i); // сам простой мувинг, в момент, когда час равен нашему и не неравен на предыдущем баре
      
      fx[i]=mai; // просто приравнивание индикаторного буффера к глобальной переменной 
   }
  
   return(0);
}
//***************************************************************
 

Sim, eu fiz, a mesma resposta... o que com

ti=Time[i]; // время текущего бара
      
      tiip=tii; // предыдущее состояние времени
      tii=(ti-dth)/dtd*dtd;// время начала суток сдвинутое на нужный нам час
      
      if (tiip!=tii)

MAS O RESULTADO É ERRADO!!!!!!!!!!!!!!! Tomei um exemplo desde a pitão até

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
A visão geral é a seguinte

int start()
  {
double LastHigh,LastLow;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i+1);
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

AINDA NÃO É O RESULTADO CERTO.

O problema é simples de colocar uma linha COMO o pivô é plano, mas não por nível de pivô, mas a partir de um valor de alguma hora. É isso aí!!! E eu estou lutando e não entendo como...DIREITO a linha de X hora a Tempo[0] !!!!!!!!!!!!!!!!

 
nlp2311:

Sim, eu fiz, a mesma resposta... o que com

MAS O RESULTADO É ERRADO!!!!!!!!!!!!!!! Tomei um exemplo desde a pitão até

A visão geral é a seguinte

AINDA NÃO É O RESULTADO CERTO.

O problema é simples de colocar uma linha COMO o pivô é plano, mas não por nível de pivô, mas a partir de um valor de alguma hora. É isso aí!!! E eu estou lutando e não entendo como...RANGE a linha de X hora a Tempo[0] !!!!!!!!!!!!!!!!

Bem, eu escrevi um exemplo mais simples ali.

Se escrevemos algum valor no ponto da hora requerida, então ele simplesmente equivale a este valor.

for(int i=cbi; i>=0; i--)
{
hrp=TimeHour(Time[i+1]);
hr=TimeHour(Time[i]);

if (hr===hour && hrp!=hr) x=

fx[i]=x; // apenas equacione o buffer indicador com a variável global
}

O mesmo para tudo, pivô ou o que quer que seja. Simplesmente, se for um Pivot diário, então os níveis diários são calculados neste ponto para a quantidade diária de barras.

Aqui estão os máximos diários às 5 horas, por exemplo. O mesmo pode ser feito com todos os outros níveis. Copiar o código em um indicador vazio, compilar e ver, acho que isto é o certo.

E se você não precisa desenhar todos os dias, mas apenas o último, isso é feito de forma um pouco diferente. Eu estou apenas sugerindo uma abordagem mais profissional.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=High[iHighest(NULL,0,MODE_HIGH,p,i+1)];
      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************
 
Olá a todos. Como adicionar indicadores ao gráfico? Ou seja, tenho um EA que calcula um certo valor de, digamos, iMA. Como se desenha o indicador no gráfico? Acho que sim, usando a função especial ou "manualmente" através da linha de tendência? Existe uma maneira mais fácil de exibir o indicador com parâmetros da EA?
 
Pyro:
Olá a todos. Se eu quisesse colocá-los na tabela, não precisaria desenhá-los eu mesmo. Ou seja, tenho um EA onde calculo alguns valores como o iMA. Como ele desenha o indicador no gráfico? Acho que sim, usando a função especial ou "manualmente" através da linha de tendência? Existe uma maneira mais fácil de exibir o indicador com parâmetros da EA?

Não me encontrei, talvez alguém tenha escrito um fórum de busca de buffers de mapeamento através da linha de tendência.

Ou escreva você mesmo, não há nada de complicado.

 
Pyro:
Olá. Como posso adicionar indicadores ao gráfico? Isto é, tenho um consultor especializado no qual é calculado algum valor do iMA. Como se desenha o indicador no gráfico? Acho que sim, usando a função especial ou "manualmente" através da linha de tendência? Existe uma maneira mais fácil de exibir o indicador com parâmetros da EA?


Se a EA estiver anexada ao gráfico e houver algo dentro dele, então para ver o que é, precisamos criar um indicador com exatamente a mesma função e definir os mesmos parâmetros que na EA e aplicá-los ao gráfico. Ou se for uma função MT padrão, como um muving, também tem que ser aplicada a um gráfico e os mesmos parâmetros que no Expert Advisor foram definidos. O próprio Expert Advisor não desenha indicadores no gráfico. Ele é desenhado no Testador de Estratégia somente após os testes. Ele não os atrai durante a comercialização. Outra maneira, mas incômoda, é desenhar objetos, como traços ObjectCreate(name+Time[0],OBJ_ARROW,0,Time[0],price); ObjectSet(name+Time[0],OBJPROP_ARROWCODE,4); ou segmentos de linha de tendência, mas então o estado da função na barra anterior deve ser salvo. Mas é quando o indicador não pode ser aplicado, por exemplo, quando algo precisa ser desenhado por Askum, mas MT não armazena a matriz de Askum ou algum sintético de dois pares. É por isso que você tem que fazer uma reviravolta para controlá-lo.

Bem, você também pode fazer um modelo (tpl) no qual você pode anexar o que precisa. Mas praticamente é melhor fazer um indicador personalizado, e definir e escrever manualmente um novo perfil e quando você quiser negociar, basta chamar o perfil apropriado. É uma técnica à beira da fantasia.

 
É uma chatice, se os parâmetros estão mudando constantemente no Expert Advisor. OK, obrigado colegas, agora há certeza.
 
Transferência da EA para o indicador via GV.
 

1) Fazer modelos com parâmetros de EA e indicadores pré-definidos

2) Transferir parâmetros para indicadores usando GV

3) Indicadores de chamada para a tabela da EA usando WINAPI

Prefiro desenhar um gráfico indicador a partir de um objeto EA via Seta

 

Saudação!!!

Não consigo entender porque Open=Close=Alto=Baixo - sem diferença, todos os preços são os mesmos, quatro colunas dos mesmos preços no arquivo que está sendo criado. Abaixo está o código para a EA que descarrega os dados.

int init()  
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,"Date","DayOfWeek","CLOSE","OPEN","High","LOW" );
   FileClose(h);        
  }
int start()
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
      string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
      string Wday=DoubleToStr(DayOfWeek(),0);
      FileSeek(h, 0, SEEK_END);
      FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iOpen("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iHigh("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iLow("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)));
      FileClose(h);   
      Print("Close=",Close[0]);
      Print("Open=",Open[0]);
      Print("Low=",Low[0]);
      Print("High=",High[0]);
     
   return(0);
  }