[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 403

 
ruslanchik:
S'il vous plaît dites-moi comment calculer la taille de la pile

Soyez plus précis dans votre question.
 

Est-il possible de sauter une étape inutile de l'optimisation et de passer à la suivante ?

Exemple : il y a des paramètres d'entrée(type double) qui doivent être optimisés : x1, x2, x3, x4. Leurs valeurs sont de 1 à 5. Étape 0.1

Il est clair que dans ce cas, il y aura 41*41*41*41=2 825 761.

Mais nous devons rechercher dans la contrainte suivante : 10,5 < x1+x2+x3+x4 < 11,5. Il est déjà clair ici qu'il y aura beaucoup moins de variantes de recherche. (c'est la restriction même de la somme nécessaire)

Donc si cette restriction est ajoutée au code du conseiller expert comme ceci

extern double    x1=1, x2=1, x3=1, x4=1;

int start()

{

  if (10.5<x1+x2+x3+x4 && x1+x2+x3+x4<11.5)

    {
      // основной код эксперта 

    }
  return; 

} 

puis lors de l'optimisation (à l'arrivée de chaque nouveau tick), les variantes inadaptées seront également prises, par exemple x1=4, x2=4, x3=4, x4=4 ; ce qui ne se produira pas exactement -- c'est l'exécution du code principal.

Autrement dit, tant que cette étape d'optimisation ne "traverse" pas l'intervalle historique, il n'y aura pas de transition vers l'étape suivante. Il y aura une"conviction" que la condition 10.5 < x1+x2+x3+x4 < 11.5 n'est pas remplie et cela arrêtera seulement l'exécution du code principal.

Le temps sera largement gaspillé sur des variantes aussi manifestement inadaptées.

Comment exclure de telles étapes d'optimisation avec des paramètres manifestement inadaptés ?

En d'autres termes, lorsqu'un autre jeu de paramètres devient inadapté, pourquoi ne pas optimiser cette étape et passer immédiatement à la suivante ?

 
fmql:

Est-il possible de sauter une étape inutile de l'optimisation et de passer à la suivante ?


il est possible d'optimiser 3 paramètres et d'ajuster le quatrième pour le montant souhaité.

ou utiliser le troisième onglet "Optimisation" pour générer spontanément l'événement requis.

 
sergeev:

il est possible d'optimiser 3 paramètres et d'ajuster le quatrième pour la quantité requise.

ou utiliser le troisième onglet "Optimisation" pour générer spontanément l'événement souhaité.

Le fait est qu'il est impossible d'optimiser 3 paramètres sans le 4ème paramètre dans mon cas.

Ici, c'est leur sélection conjointe qui est importante et leur somme est limitée dans l'intervalle.

(c'est à peu près comme la recherche des fractions de tous les composants d'un mélange et la masse totale de ce mélange est limitée à un intervalle strict)

Pouvez-vous m'en dire plus sur le troisième onglet, qu'est-ce que cette génération spontanée de l'événement souhaité ?

 

Bon après-midi.

Pouvez-vous me dire comment extraire les valeurs des bougies (High, Low, Open, Close) du dernier extremum de l'indicateur ZigZag ?

 
Comme pour toute autre bougie. Les mêmes fonctions. ( Pensez au diamètre de votre planète.(c) )
 
Si vous voulez obtenir le numéro de la barre du dernier extremum lui-même, utilisez le nom d'objet du dernier rayon pour obtenir l'heure de la première coordonnée, qui correspondra à l'heure de la barre. En utilisant l'heure de la barre, déterminez le numéro de la barre. Déterminez les caractéristiques de la barre à partir du numéro de la barre.
 
fmql:

Pourriez-vous développer le troisième onglet, à savoir la génération spontanée de l'événement souhaité ?


Plus de détails dans l'aide

En bref, vous pouvez créer vos propres conditions pour le point du troisième onglet (par exemple, ouvrir 10 ordres perdants d'affilée) et le testeur ignorera automatiquement cette exécution et passera à la suivante.

 
Stells:

Bon après-midi.

Pouvez-vous me dire comment extraire les valeurs des bougies (High, Low, Open, Close) du dernier extremum de l'indicateur ZigZag ?


Une telle opération nécessite quelques calculs.

J'avais l'habitude de faire comme ça :

int start()
  {
 double // экстремумы Зиг-Зага
  y3=0, 
   y2=0,
    y1=0,
     y0,
     zz;   
 int    x3, x2, x1, sh=ShiftBars;// номера баров  

  y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";

on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    

Vous connaissez maintenant les numéros de barre des 2 derniers extrema (min et max), puis leurs sommets, leurs creux..... facile à trouver !

- Fermer [x1], Ouvrir [x2], .... etc.

Peut-être quelqu'un suggérera-t-il une option plus simple.

 
Impossible d'organiser une boucle, X et Y sont toujours 0.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i==0;i--){
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
  for( i=OrdersTotal();i==0;i--){OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+