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

 
Alexey Volchanskiy:

.ex5 não tem qualquer utilidade para ninguém, se quiser ajuda, publique o código fonte.


Foda-se, eu pensei que era o código fonte :-) estou também a olhar para os outros ícones.... Qual deles foi a fonte...... este :-)

Acontece que não é....

Arquivos anexados:
ChekParam.mq5  11 kb
 

A questão é que o pulso na terceira barra de menos a partir do fim é zero e é desenhado como zero. Mas não é zero no tampão.

Não sei o que era, mas resolvi o problema colando todo o código PULSE num novo indicador, contornando o icustom.

Não tive nenhum erro no segundo bar menos. Eu não mudei mais nada no código, por isso é realmente um erro de metaquota.

 
LookingFor:

A questão é que o pulso na terceira barra de menos a partir do fim é zero e é desenhado como zero. Mas não é zero no tampão.

Não sei o que era, mas resolvi o problema colando todo o código PULSE num novo indicador, contornando o icustom.

Não tive nenhum erro no segundo bar menos. Eu não mudei mais nada no código, por isso é realmente um erro de metaquota.


sem o código, o insecto só pode ser seu. infelizmente, ao pedir ajuda, VOCÊ não deu o material...

 
Alguém pode ajudar??? Qual é o erro, porque é que o indicador não é exibido correctamente?
Arquivos anexados:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

Infelizmente, quando pediu ajuda, não deu o material.

Vladislav, em nome da justiça, do desejo de compreender do que se trata e por respeito a si, dou-lhe o código.


//+------------------------------------------------------------------+
//|                                                   PULS_SWING.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot Pulse_Swing
#property  indicator_label1  "Pulse_Swing"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input double   points=0.005;
input double   begin_price_level=1.0;
//--- indicator buffers
double         Pulse_Swing [], pulse [] , trend [] , delta [];
int PULSE_Handle ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pulse_Swing,INDICATOR_DATA);
   SetIndexBuffer(1,pulse,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,trend,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,delta,INDICATOR_CALCULATIONS);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   ResetLastError(); 
   PULSE_Handle = iCustom(NULL,0,"PULSE",
                          points,          // Points
                          begin_price_level          // begin_price_level
                          );
   Print("PULSE_Handle",PULSE_Handle,"  error = ",GetLastError()); 
//---
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   //ArrayFree (pulse);ArrayFree (delta);ArrayFree (Pulse_Swing);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int  bar, start  ;
   if (prev_calculated==0)
   {pulse [0] = pulse [1] =0; start =begin+2 ;}
   else {start = prev_calculated ;}
   //Print(IntegerToString(bar));
   for (bar= start ;bar<rates_total;bar ++)
   {CopyBuffer(PULSE_Handle,0,bar,1,pulse);
   //Print(IntegerToString(pulse[bar]));
   if ((pulse [bar-1]- pulse [bar -2])>0) trend[bar-1] = 1 ; // 
   else
   if ((pulse [bar-1] - pulse [bar -2])<0) trend[bar-1] = -1 ; //
   else
   if (pulse [bar-1] == pulse [bar -2])  {trend[bar-1] = trend[bar-2] ;} // 
   else 
   continue ;
   delta[bar] = pulse[bar]- pulse[bar-1];
   if (trend [bar-1]== 1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] + delta[bar];
   else
   if (trend [bar-1]== -1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] - delta[bar];
   else
   if (delta [bar]==0 )Pulse_Swing [bar] = Pulse_Swing [bar-1] ;
   }
   //Print(IntegerToString(delta[rates_total-1]));
   Print(IntegerToString(delta[rates_total-2]));
   //Print(IntegerToString(pulse[rates_total-1]));
   Print(IntegerToString(pulse[rates_total-3]));
   Print(IntegerToString(pulse[rates_total-2]));
   Print(IntegerToString(pulse[rates_total-1]));
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 

Estou a ter dificuldade em ler o resultado da operação comercial. Escrevi-o desta forma:

MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- установка параметров операции
....
//--- отправка запроса
if ( !OrderSend(request,result) )
  PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось
else // Я хочу получить парамеры резултата
{ Sleep(9999); // Жду получения резултата
  double ClosePrice=result.price;
}

Se remover o Sono : Eu recebo sempre ClosePrice=0,0 . Mesmo que espere 10 segundos (não quero esperar mais), quase sempre consigo o resultado, mas às vezes não consigo.

Como posso obter resultados?

A descrição de OrderSend() diz :

Nota

Um pedido comercial passa por várias fases de validação no servidor comercial. Em primeiro lugar, todos os campos obrigatórios do parâmetro de pedidosão verificados quanto à exactidão e, se não houver erros, o servidor aceita o pedido para processamento posterior. Se a ordem for aceite com sucesso pelo servidor de negociação, a função OrderSend() retorna verdadeiro.

Ou seja, quando recebo a OrderSend(), não recebo o parâmetro MqlResult, se bem entendi.

Quando é que eles virão ter comigo?

 
Ivan Ivanov:

Não consigo ler o resultado da minha profissão.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

O erro 131 ocorre quando se modifica uma ordem

fxsaber, 2017.09.12 19:47

Tudo o que tem de fazer é escrever o nome do servidor comercial e o símbolo e o problema será resolvido num instante, porque todos podem tentar por si próprios.

Entretanto, tem-se a sensação de que a tarefa não é encontrar uma solução, mas responder sim/não.

 

Cavalheiros programadores,

Eis uma questão: se o Testador de Estratégia em MT5 mostrar bons resultados apenas a preços abertos, será o mesmo resultado verdadeiro se o robô abrir negociações apenas a preços abertos?

 
Dzyga:

Cavalheiros programadores,

Pergunta: Se o Testador de Estratégia em MT5 mostrar bons resultados apenas a preços abertos, será que o robô abrirá negociações apenas a preços abertos com o mesmo resultado?


É fácil de verificar: na EA só se abrem negócios ao preço de abertura (ou seja, na abertura de bares) e no Testador de Estratégia verifica-se no modo de geração de carraças "Todos os carraças".

 

Colegas, por favor ajudem-me

Não entendo o que está errado com o laço, os dados do Handle não estão a entrar na matriz psa1

if (prev_calculated == 0 ){i=bars =start=1;}
  else {start = prev_calculated ;}
  for ( bars=start ; bars<rates_total ; bars ++)
  {CopyBuffer(pulse_Handle,0,start,1,pca1);
  
  if (pca1[bars]!=pca1[bars-1]) {pca2[i]=pca1[bars]; i++;
  string s="";s=IntegerToString(pca1[bars])+"  ";Print(s); continue;}
  else continue ;}