Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 798

 

Olá! preciso da vossa ajuda, membros do fórum. Estou a escrever um indicador. Preciso do tempo aberto do bar para ser processado. Parece que este tempo deveria ser armazenado a tempo[], mas há alguns disparates.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---check for rates total


   if(rates_total<2)
      return(0);
//--- starting work
   int start=prev_calculated-1;
//--- correct position
   if(start<1) start=1;
//--- main cycle

CalculateVolume(start,rates_total,time);


//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculateVolume(const int nPosition,
                     const int nRatesCount,
                     const long &tim[],
                     )
  {
  
MqlDateTime dat1;


for(int j=nPosition;j<nRatesCount && !IsStopped();j++)
{
    TimeToStruct(tim[j],dat1);

    Print("год ",dat1.year," ",dat1.day," ",dat1.hour," ",dat1.min)


 }
} 

2017.11.20 17:48:01.590 (RTS-12.17,M1) ano 2016 29 15 26

2017.11.20 17:48:01.734 (RTS-12.17,M1) ano 2016 29 15 15 27

2017.11.20 17:48:01.878 (RTS-12.17,M1) ano 2016 29 15 29

2017.11.20 17:48:02.022 (RTS-12.17,M1) ano 2016 29 15 33

2017.11.20 17:48:02.165 (RTS-12.17,M1) ano 2016 29 15 45

2017.11.20 17:48:02.310 (RTS-12.17,M1) ano 2016 29 21 12

2017.11.20 17:48:02.454 (RTS-12.17,M1) ano 2016 1 20 54

2017.11.20 17:48:02.599 (RTS-12.17,M1) ano 2016 2 12 52

2017.11.20 17:48:02.743 (RTS-12.17,M1) ano 2016 2 22 28

2017.11.20 17:48:02.887 (RTS-12.17,M1) ano 2016 2 23 20

2017.11.20 17:48:03.031 (RTS-12.17,M1) ano 2016 3 11 47

2017.11.20 17:48:03.175 (RTS-12.17,M1) ano 2016 3 22 34

2017.11.20 17:48:03.320 (RTS-12.17,M1) ano 2016 3 22 35

2017.11.20 17:48:03.463 (RTS-12.17,M1) ano 2016 4 21 56

2017.11.20 17:48:03.609 (RTS-12.17,M1) ano 2016 4 23 32

Parece que existem apenas alguns bares por dia. Pode dar-me uma dica plz, o meu cérebro já está lixado.

 
fxsaber:

Sim, mas tortuoso.

pivomoe:
À primeira vista, o CopyTick funciona no testador. Existem erros conhecidos na operação do CopyTicks no testador? CopyTicksRange na vida real funciona sem bugs ?

Na próxima construção, os programadores farão a exibição correcta das bandeiras TRADE no testador.

fxsaber:

Há um insecto com tempos de tic-tac no testador. Temos de subtrair um certo valor de cada vez. SD está consciente do problema.

Pode desenvolver esta questão ?
 
Estou a estudar a estrutura do pedido comercial (MqlTradeRequest) em diferentes variantes. Peguei no meu_primeiro_ea.mq5 Expert Advisor de https://www.mql5.com/ru/articles/100 e tentei alterar a condição para abrir uma posição no SAR crossing no código fonte - funcionou. Depois acrescentei o código de trailing (mudar/modificar posição por SAR) da estrutura MQL5 por MqlTradeRequest. Mas produziu erro [Paragens inválidas]. Penso que há algo de errado com o pedido. Em suma, fiquei preso no estudo da modificação de posição. Não compreendo bem o que estou a fazer mal.
Arquivos anexados:
SAR_SAR.mq5  27 kb
 
Alexey Kozitsyn:

Pode desenvolver esta questão?

void OnTick()
{
  MqlTick Ticks[];
  
  if (CopyTicksRange(_Symbol, Ticks) != -1)
  {
    ArrayPrint(Ticks);              
    
    ExpertRemove();
  }
}
 
Obrigado pela sua ajuda, tantos dispostos a ajudar!!!!!!!!!!!! Estou cansado de ler os comentários sobre o meu código..............
 
DCodec:
Obrigado pela sua ajuda, tantos dispostos a ajudar!!!!!!!!!!!! Estou cansado de ler os comentários sobre o meu código..............
Sem código, sem comentários.
 

Aconselhe por favor como descobrir a etapa de preço (na especificação "Teak size")?

 
Aleksey Vyazmikin:

Aconselhe por favor como descobrir a etapa de preço (na especificação "Teak size")?

ht

 
Vladislav Andruschenko:
ht


Obrigado! Procurei e não consegui encontrá-lo...

Então a questão seguinte, digamos que o passo é 25, então como organizar arredondamentos para um número divisível por 25, talvez haja uma função?

 
Aleksey Vyazmikin:

Obrigado! Procurei e não consegui encontrá-lo...

Então a questão seguinte, digamos que o passo é 25, então como organizar arredondamentos para um número divisível por 25, talvez haja uma função?


Eu fiz uma função, parece funcionar

//+------------------------------------------------------------------+
//|Функция округления числа до кратного целого                       |
//+------------------------------------------------------------------+
double Okr(double cifra)
  {
     double TickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
     double Okruglenie=NormalizeDouble(cifra/TickSize,_Digits)*TickSize;
     Print ("До кратного округления=",DoubleToString(cifra,_Digits), " После кратного округления=",DoubleToString(Okruglenie,_Digits));
     return(Okruglenie);
  }