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

 
ANDREY:
Bom dia a todos vocês!
Estou testando este algoritmo no testador MT4 usando o mql4. Preciso da função Print() para produzir o preço de licitação em log com 5 (cinco) casas decimais. Mas imprimiria apenas 4 (quatro) casas decimais. Por favor, me diga como corrigir meu erro, se ele existir.
Aqui está meu código.
nulo OnTick()
{
Imprimir("=======Bid ======= ",NormalizeDouble(Bid,Digits) );

}


Ao mesmo tempo, se eu imprimir usando Print() o preço de abertura e fechamento do pedido( por SL e TP), então Print() imprime o preço com 5(cinco) dígitos.
Obrigado a todos por sua ajuda.

DoubleToString(), não NormalizeDouble()

 
Igor Makanu:

Eu lhe disse que não gostei da minha decisão (((

Sou preguiçoso demais para escrever novamente.

Google "array find repetitions" - Acho que você vai encontrar algo

enum EResult{Ok,AllocError};

template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count){
   int size=ArraySize(arr);
   if (ArrayResize(ret,size)!=size) return AllocError;
   int ii=0;
   for (int i=0;i<size;){
      T tmp=arr[i];
      uint repeatCount=1;
      while(++i<size&&arr[i]==tmp) ++repeatCount;
      if (repeatCount>=count) ret[ii++]=tmp;}
   return ArrayResize(ret,ii)==ii?Ok:AllocError;
}

void OnStart()
{
   int arr[]={1,2,4,4,4,55,55,7,7,7,7,7,8,9,77,66,66,66};
   int ret[];
   if (!GetRepeat(arr,ret,3)) ArrayPrint(ret);
} 
 
Artyom Trishkin:

DoubleToString(), não NormalizeDouble()

Muito obrigado por seu apoio informativo.

 
Colegas, se não for muito incômodo, por favor, analisem a minha pergunta.
https://www.mql5.com/ru/forum/160683/page1251#comment_18219493
Especificamente, como saber o valor do minuto em que a posição está aberta?
 
Aleksey Masterov:
Especificamente, como você acha o valor do minuto em que uma posição está aberta?

usar o TimeToStruct()

https://www.mql5.com/ru/docs/dateandtime/timetostruct

 
Sim, tenho-o no mt4
 
Aleksey Masterov:
Sim, tenho-o no mt4

funciona em MT4

 
Igor Makanu:

funciona em MT4

Ainda não entendo como posso obter o valor do minuto quando umaposição foi aberta a partir desta estrutura...
 
Aleksey Masterov:
Não entendo como posso obter o valor de minuto quando aposição foi aberta a partir desta estrutura que retorna trompete...

datetime o_open = OrderOpenTime();

MqlDateTime dt_struct;

TimeToStruct( o_open, dt_struct;)

int min = dt_struct.min;

 

Se você puder me ajudar a entender o que está errado ao tentar ler os dados do buffer indicador.

Aqui está o código da EA:

      if (IsTesting())
         {
         Trend    = GlobalVariableGet(GV_tradesTrend);
         TrendUP  = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
         TrendDN  = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
         if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
         if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
      else
         {
         Trend = GetLastTrendChange();
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
//+----------------------------------------------------------------------------+
int GetLastTrendChange()
   {
   int   trendType=0;
   int   y=0;
   int   t=500;
   while (y<t)
      {
      if (iOpen(NULL,0,t)==y) {return(0);}
      trendType=FindTrendChange(y);
      if (trendType==1 || trendType==-1) {return(trendType);}
      y++;
      }
   return(0);
   }
//+----------------------------------------------------------------------------+
int FindTrendChange(int index)
   {
   double   trendUP,trendDN;
   int      trendType=0;
   trendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,index);
   trendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,index);
   if (trendUP>0) {trendType=1;}
   if (trendDN>0) {trendType=-1;}
   return (trendType);
   }
//+----------------------------------------------------------------------------+

Em testes reais e em testes em busca do último valor através da função funciona, mas o teste é catastroficamente lento (o teste de meio ano se estende por vários dias).

Então decidi usar o swap no teste e salvar o último valor para a variável global - o Expert Advisor deixou de ver os dados do buffer. E mesmo que os amortecedores vazios sejam 0, por alguma razão as variáveis da EA tomam valores VAZIO_VALOR e não mudam.

com

Mas quando coloco o cursor sobre a linha buffer na janela de dados, dois valores aparecem na ponta da ferramenta, e o primeiro valor é 0, por exemplo, Valor 5; 0,0000; 0,8855.

Eu não consigo descobrir, embora eu espreite no código indicador. A busca na Internet e na documentação não ajudou. Alguém pode me informar por que o teste é tão lento quando eu tento usar este indicador?

Por favor, me ajude!

Arquivos anexados:
Razão: