Questions d'un "mannequin - page 78

 
Interesting:

Je pense qu'il serait plus facile de refaire le Conseiller Expert ou de travailler dessus avec un fichier.

Je pense qu'il serait plus facile de décrire en détail ce que vous attendez du conseiller expert et de fournir tout le code créé par VISARD.

Par exemple, j'ai besoin d'un Conseiller Expert qui ouvre des trades en croisant le prix d'un indicateur Enveloppes. C'est ce que j'ai obtenu :

//+------------------------------------------------------------------+
//|                                                    envelopes.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalEnvelopes.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title              ="envelopes"; // Document name
ulong                    Expert_MagicNumber        =28572;       // 
bool                     Expert_EveryTick          =false;       // 
//--- inputs for main signal
input int                Signal_ThresholdOpen      =10;          // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose     =10;          // Signal threshold value to close [0...100]
input double             Signal_PriceLevel         =0.0;         // Price level to execute a deal
input double             Signal_StopLevel          =50.0;        // Stop Loss level (in points)
input double             Signal_TakeLevel          =50.0;        // Take Profit level (in points)
input int                Signal_Expiration         =4;           // Expiration of pending orders (in bars)
input int                Signal_Envelopes_PeriodMA =240;         // Envelopes(240,0,MODE_LWMA,...) Period of averaging
input int                Signal_Envelopes_Shift    =0;           // Envelopes(240,0,MODE_LWMA,...) Time shift
input ENUM_MA_METHOD     Signal_Envelopes_Method   =MODE_LWMA;   // Envelopes(240,0,MODE_LWMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_Envelopes_Applied  =PRICE_CLOSE; // Envelopes(240,0,MODE_LWMA,...) Prices series
input double             Signal_Envelopes_Deviation=0.15;        // Envelopes(240,0,MODE_LWMA,...) Deviation
input double             Signal_Envelopes_Weight   =1.0;         // Envelopes(240,0,MODE_LWMA,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixLot_Percent      =10.0;        // Percent
input double             Money_FixLot_Lots         =0.01;        // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),PERIOD_H4,Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalEnvelopes
   CSignalEnvelopes *filter0=new CSignalEnvelopes;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
   filter0.PatternsUsage(2);
//--- Set filter parameters
   filter0.PeriodMA(Signal_Envelopes_PeriodMA);
   filter0.Shift(Signal_Envelopes_Shift);
   filter0.Method(Signal_Envelopes_Method);
   filter0.Applied(Signal_Envelopes_Applied);
   filter0.Deviation(Signal_Envelopes_Deviation);
   filter0.Weight(Signal_Envelopes_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(-4);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(-5);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(-6);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(-7);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(-8);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(-9);
     }
//--- ok
   return(0);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 
Camarades développeurs, veuillez m'expliquer ce que je dois changer dans le code, pour qu'après un signal d'achat/vente une position soit ouverte et fermée une fois et c'est tout, le Conseiller Expert n'ouvre pas de positions jusqu'au prochain signal. Cela se produit surtout lorsque le système est composé de plusieurs indicateurs. Le conseiller expert est toujours en position. Il en ferme un sur prise ou arrêt, et en ouvre immédiatement un autre.
 

Question sur les indicateurs.

Il existe une telle construction des paramètres d'entrée dans OnCalculate:

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[])
  {
     ...
  }

Tout ce plaisir est strictement lié à la période actuelle, donc pour obtenir les données similaires d'une autre période, vous pouvez, par exemple, appeler le handle de l'indicateur standard intégré requis sur la période souhaitée :

handle=iGator(_Symbol, PERIOD_W1);

puis copier les données nécessaires dans les tampons grâce aux variations des fonctions de copie.

Tout cela serait bien, mais il est nécessaire d'utiliser les taux_total et prev_calculé sur des périodes différentes de la période actuelle. Et il n'y en a pas, pour autant que je sache. Où et comment pouvons-nous les obtenir s'ils ne correspondent manifestement pas au calendrier actuel ?

Bien sûr, il y a une explication claire dans l'aide :

"Nous devons noter la relation entre la valeur renvoyée par OnCalculate() et le deuxième paramètre d'entrée prev_calculated. Le paramètre prev_calculé, lorsque la fonction est appelée, contient la valeurrenvoyée par OnCalculate() lors de l' appel précédent. Cela permet d'utiliser des algorithmes économiques pour calculer l'indicateur personnalisé afin d'éviter des calculs répétés pour les barres qui n'ont pas changé depuis l'appel précédent de cette fonction.

Pour cela, il suffit généralement de renvoyer la valeur du paramètre rates_total, qui contient le nombre de barres dans l'appel de fonction actuel. Si, depuis le dernier appel de OnCalculate(), les données de prix ont été modifiées (un historique plus profond a été pompé ou des blancs d'historique ont été remplis), alors la valeur du paramètre d'entrée prev_calculated sera mise à zéro par le terminal."

Donc, devons-nous vraiment implémenter manuellement nos propres analogues de rates_total et prev_calculated pour d'autres horizons temporels en utilisant le principe décrit ci-dessus ? Ou y a-t-il quelque chose de prêt à être utilisé ? Eh bien, par exemple, comme ceci :

rates_total = BarsCalculated(handle);
ou prendre la valeur retournée de la fonction de copie. Mais avec prev_calculated, ce ne serait, pour le moins, pas si facile... Comment le mettre en œuvre correctement ?
 

J'ai lu l'article de Rosh sur les mathématiquesà https://www.mql5.com/ru/articles/1492.

Existe-t-il une possibilité de connecter une telle analyse par exemple dans OnTester() ?

Existe-t-il des solutions toutes faites disponibles gratuitement ?

Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4
  • www.mql5.com
Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4: автоматическая торговля
 
Karlson:

J'ai lu l'article de Rosh sur les mathématiquesà https://www.mql5.com/ru/articles/1492.

Existe-t-il une possibilité de connecter une telle analyse par exemple dans OnTester() ?

Existe-t-il des solutions toutes faites disponibles gratuitement ?

Oui - Statistiques de test
 
Merci.
 

Pouvez-vous nous conseiller ?

J'ai sélectionné une transaction dans l'historique,la direction de la transaction est "pivot" (in/out), puis je détermine le volume de la transaction HistoryDealGetDouble(ticket,DEAL_VOLUME).
J'obtiens le volume total, mais comment savoir quel volume j'ai fermé et quel volume j'ai ouvert ? Je veux savoir quel volume j'ai fermé et quel volume j'ai ouvert. Merci.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 

J'ai écrit une régression linéaire. Avez-vous l'intention d'ajouter une telle chose au terminal, et même de l'afficher sur le graphique dans le testeur ?

Et comme compris pour calculer le Z-count est nécessaire de calculer indépendamment le nombre total de séries positives et négatives ?

 
MetaTrader 5 peut-il être rattaché à cet échangehttps://mtgox.com/ ?
 
Karlson:

Et je comprends aussi que le calcul du Z-count nécessite de calculer soi-même le nombre total de séries positives et négatives ?

Oui, par moi-même. En gros, je peux afficher le code dans MQL5 pour le calculer.
Raison: