Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1351

 
MakarFX:

mql4 também é possível aqui

Não acho que seja só isso. O Expert Advisor cria um objeto gráfico sob a forma de uma linha de tendência:

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

Mas depois de reiniciar o terminal, apenas os parâmetros do primeiro ponto estão disponíveis. Os parâmetros do ponto anterior só aparecerão depois que o novo ponto for formado. Acho que estou começando a entender - preciso encontrar não apenas o último ponto calculado pelo indicador, mas também o anterior. Como posso pular o último (primeiro) ponto e calcular o próximo? Acho o primeiro ponto desta maneira:

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

Não me parece que seja esse o caso. A EA cria um objeto gráfico sob a forma de uma linha de tendência:

Mas depois de reiniciar o terminal, somente os parâmetros do primeiro ponto estão disponíveis. Os parâmetros do ponto anterior só aparecerão após a formação de um novo ponto. Acho que estou começando a entender - preciso encontrar não apenas o último ponto calculado pelo indicador, mas também o anterior. Como posso pular o último (primeiro) ponto e calcular o próximo? Acho o primeiro ponto desta maneira:

Coloque um contador.

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

Em geral, faça uma matriz e preencha-a, depois pegue o ponto necessário da matriz

 
Vitaly Muzichenko:

Defina um contador

E em geral, faça uma matriz e preencha-a, depois pegue o ponto desejado da matriz.

Obrigado. Parece-me que o balcão que você forneceu é exatamente o que precisamos e, o mais importante, simples.

Enquanto o site estava sendo atualizado, eu tentei a variante que você sugere. Tudo isso funciona. Muito obrigado. Tão simples, e eu estava começando a entrar na engrenagem das coisas. Além disso, as funções de preço e tempo acima foram simplificadas.

 
MakarFX:

Destaquei o que estava errado

o destaque amarelo é desnecessário e pode ser apagado.

A função verde destacada deve estar fora do OnStart(),

onde você quer definir uma nova barra, use o destaque marrom.

Obrigado!)

 

Bom dia a todosJ Por favor, me ajude a encontrar um código de trabalho de parada de rastreamento em parabólico. Quero perguntar como essa função deve ser adicionada ao meu consultor especializado, para que ele possa rastrear quando o preço subir um certo número de pontos? Agradeço antecipadamente, e peço a pessoas experientes e conhecedoras que não passem - o Graal que tenho que terminar de alguma forma ;-)

 
DanilaMactep:

Bom dia a todosJ Por favor, me ajude a encontrar um código de trabalho de parada de rastreamento em parabólico. Quero perguntar como essa função deve ser adicionada ao meu consultor especializado, para que ele possa rastrear quando o preço subir um certo número de pontos? Muito obrigado antecipadamente, e por favor não passe por pessoas experientes e conhecedoras - eu deveria de alguma forma acrescentar o Graal ;-)

como este

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

Você pode me dizer como atualizar o dia do mês para refletir o novo dia do ano?


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

Portanto, pensei que a hora de início seria com a mudança do dia do ano. Mas há a antiga data...

Hmm... provavelmente mais fácil tirar segundos de folga...

 
leonerd:

Não consigo pensar agora, vou lhe dar um exemplo, talvez você tenha uma idéia

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

uma idéia https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

como este

Makar, muito obrigado pelo código - eu o reescrevi passando variáveis externas para o icastom em vez de valores rigidamente fixos. Por favor, esclareça, é intTral = 50; é esta a distância a que a rede de arrasto será mantida ou é a distância em pips após a qual a rede de arrasto será ativada ?

 
DanilaMactep:

Makar, muito obrigado pelo código - eu reescrevi o código passando variáveis externas para o icastom em vez de valores fixos. Por favor, esclareça, é intTral = 50; é a distância de lucro em pips após a qual a rede de arrasto é ligada ?

é a distância de lucro em pips após a qual a rede de arrasto é ligada