Questions des débutants MQL5 MT5 MetaTrader 5 - page 779

 
Alexey Volchanskiy:

.ex5 n'est utile à personne, si vous voulez de l'aide, publiez le code source.


Merde, je pensais que c'était le code source :-) Je regarde aussi les autres icônes.... Je me demandais laquelle était la source...... celle-ci :-)

Il s'avère que ce n'est pas le cas.....

Dossiers :
ChekParam.mq5  11 kb
 

Le fait est que l'impulsion sur la troisième mesure négative à partir de la fin est nulle et est dessinée comme nulle. Mais ce n'est pas zéro dans le tampon.

Je ne sais pas ce que c'était, mais j'ai résolu le problème en collant tout le code PULSE dans un nouvel indicateur, en contournant icustom.

Je n'ai pas eu d'erreur à moins deuxième barre. Je n'ai rien changé d'autre dans le code, donc c'est vraiment un bug dans les métacitations.

 
LookingFor:

Le fait est que l'impulsion sur la troisième mesure négative à partir de la fin est nulle et est dessinée comme nulle. Mais ce n'est pas zéro dans le tampon.

Je ne sais pas ce que c'était, mais j'ai résolu le problème en collant tout le code PULSE dans un nouvel indicateur, en contournant icustom.

Je n'ai pas eu d'erreur à moins deuxième barre. Je n'ai rien changé d'autre dans le code, il s'agit donc bien d'un bug de méta-citation.


sans le code, le bug ne peut être que le vôtre. malheureusement, en demandant de l'aide, VOUS n'avez pas donné le matériel...

 
Quelqu'un peut-il m'aider ? Quelle est l'erreur, pourquoi l'indicateur ne s'affiche-t-il pas correctement ?
Dossiers :
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

Malheureusement, quand vous avez demandé de l'aide, vous n'avez pas donné le matériel...

Vladislav, au nom de la justice, du désir de comprendre de quoi il s'agit et par respect pour toi, je te donne le code.


//+------------------------------------------------------------------+
//|                                                   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);
  }
 

J'ai du mal à lire le résultat de l'opération commerciale. Je l'ai écrit comme ça :

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

Si vous supprimez Sleep : j'obtiens toujours ClosePrice=0.0 . Même si j'attends 10 secondes (je ne veux pas attendre plus longtemps), j'obtiens presque toujours le résultat, mais parfois non.

Comment obtenir des résultats ?

La description de OrderSend() dit :

Note

Une demande de transaction passe par plusieurs étapes de validation sur le serveur de transaction. Tout d'abord, l'exactitude de tous les champs obligatoires du paramètre de lademandeest vérifiée et, s'il n'y a pas d'erreur, le serveur accepte la commande pour la suite du traitement. Si l'ordre est accepté avec succès par le serveur de négociation, la fonction OrderSend() renvoie true.

C'est-à-dire que lorsque j'obtiens true de OrderSend(), je n'obtiens pas le paramètre MqlResult, si je comprends bien.

Quand viendront-ils à moi ?

 
Ivan Ivanov:

Je ne peux pas lire le résultat de mon commerce.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

L'erreur 131 se produit lors de la modification d'une commande

fxsaber, 2017.09.12 19:47

Il suffit d'écrire le nom du serveur de négociation et le symbole et le problème sera résolu en un rien de temps, car chacun peut l'essayer lui-même.

En attendant, on a l'impression que la tâche n'est pas de trouver une solution, mais de répondre par oui ou par non.

 

Messieurs les programmeurs,

Voici une question : si le testeur de stratégie dans MT5 montre de bons résultats uniquement aux prix ouverts, le robot ouvrira-t-il des transactions uniquement aux prix ouverts avec le même résultat ?

 
Dzyga:

Messieurs les programmeurs,

Question : Si le testeur de stratégie dans MT5 montre de bons résultats uniquement aux prix ouverts, le robot ouvrira-t-il des transactions uniquement aux prix ouverts avec le même résultat ?


Il est facile de le vérifier : dans l'EA, vous ouvrez des transactions uniquement au prix d'ouverture (c'est-à-dire à la naissance de la barre) et dans le testeur de stratégie, vous le vérifiez en mode de génération de ticks "Tous les ticks".

 

Collègues, aidez-moi s'il vous plaît

Je ne comprends pas ce qui ne va pas avec la boucle, les données de la poignée ne vont pas dans le tableau 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 ;}
Raison: