Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 886

 
evillive:

Pourquoi y aurait-il une variable supplémentaire ? Le contrôle direct fonctionne bien :

Une variable doit être créée lorsque vous voulez voir la valeur d'une fonction à partir de différents points du programme, afin de ne pas avoir à l'appeler plusieurs fois.
La variable est utilisée pour faciliter la compréhension d'un nouvel arrivant. Est-ce que l'on sait maintenant à quoi il sert ?
 
Vinin:
Revenez plus souvent. Il y aura moins de questions. Il y aura une meilleure connaissance.
Ignorer.
 

Bon après-midi. J'ai besoin de fermer une position à la fin de la journée (purement Expert Advisor ; barres quotidiennes). La modélisation se fait soit par ouvertures, soit par ticks. En d'autres termes, soit nous nous contentons d'ouvertures, soit nous tombons à la renverse en essayant d'analyser les jours précédents sur une échelle de temps de 15 minutes et de repérer le début et la fin de la journée en cours. Existe-t-il des solutions à ce problème ? Je vois plusieurs options virtuelles-hypothétiques :

1) Piratage - fermeture d'une position à n'importe quel prix et à n'importe quel moment. Supposons que ce soit injuste, mais nous pourrions simplement fermer la position au prix requis sans perversion.

2) Pour simuler l'ouverture et la fermeture d'une même barre. C'est-à-dire d'abord un tick d'ouverture, puis un tick de fermeture.

3) Définir un ordre qui se ferme automatiquement à une certaine heure (c'est-à-dire à la fin de la journée).

Toute aide serait appréciée. Merci.

 

Un bug ?

int OnInit()
  {
   int subwindow = ChartWindowFind(ChartID(),WindowExpertName());
   Print("Подокно запрашиваемого индикатора: ",subwindow);
   
   return(INIT_SUCCEEDED);
  }

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[])
  {
   return(rates_total);
  }


2015.04.13 20:51:10.710 indi AUDJPY,H1 : Sous-champ indicateur demandé : -1


 
tuner:

Un bug ?


2015.04.13 20:51:10.710 indi AUDJPY,H1 : Sous-champ indicateur demandé : -1


Non, pas un bug.

Valeur de retour.

Numéro de la sous-fenêtre en cas de succès. Zéro indique la fenêtre principale du graphique. Renvoie -1 en cas d'échec.

 
AlexeyVik:

Non, pas un bug.


Quel est l'échec si l'on passe à la fonction l'ID du graphique actuel où l'indicateur fonctionne et le nom de l'indicateur actuel qui fonctionne sur le graphique actuel ?
 
tuner:
Quel est l'échec si la fonction passe l'ID du graphique actuel, sur lequel l'indicateur fonctionne, et le nom de l'indicateur actuel qui fonctionne sur le graphique actuel ?

Si je vous comprends bien et que vous avez besoin du numéro de la sous-fenêtre dans laquelle le code de test de votre indicateur joint fonctionne, alors, sur la base de la description de la fonction, il est préférable d'appliquer sa deuxième version.

Code de test (j'ai ajouté quelques lignes au vôtre) :

#define  LINE    __LINE__,": "
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int subwindow=ChartWindowFind(ChartID(),WindowExpertName());
   Print(LINE,"Подокно запрашиваемого индикатора: ",subwindow);
   
   int subwindow1=ChartWindowFind();
   Print(LINE,"Подокно запрашиваемого индикатора: ",subwindow1);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+

L'aide de la fonction ChartWindowFind() contient encore un bon exemple à ce sujet (en termes de commentaires également) :

//+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором              |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
  {
   int window=-1;
//--- 
   if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      //--- функция вызвана из индикатора,имя не требуется
      window=ChartWindowFind();
     }
   else
     {
      //--- функция вызвана из эксперта или скрипта
      window=ChartWindowFind(0,short_name);
      if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError());
     }
//---
   return(window);
  }
 
DiPach:

Si je vous comprends bien et que vous avez besoin du numéro de la sous-fenêtre dans laquelle le code de test de votre indicateur joint fonctionne, alors, sur la base de la description de la fonction, il est préférable d'appliquer sa deuxième version.

Code de test (j'ai ajouté quelques lignes au vôtre) :

L'aide de la fonction ChartWindowFind() contient encore un bon exemple à ce sujet (en termes de commentaires également) :

Merci pour l'astuce, mais j'ai une tâche légèrement différente, pour laquelle l'utilisation de la 2ème variante de la fonction n'a pas de sens : je veux compter le nombre d'indicateurs avec un nom spécifié dans tous les graphiques terminaux ouverts. La tâche a déjà été résolue, mais je veux simplifier le code résultant en utilisantChartWindowFind() de la première variante mais il s'est avéré que cette fonction ne fonctionne pas non seulement avec d'autres fenêtres mais même avec la fenêtre actuelle.
 

Bonsoir !

Je n'arrive pas à comprendre : dans la fonction de départ, le compilateur exige "return" - la fonction doit renvoyer une valeur".

Quelle valeur doit être retournée dans ce cas ?

int start()
{
if (Orders !=0||Ord > 0)
{
CritCloseBuy() ;
CritCloseSell() ;
}
else
{
CritOpen() ;
}
return ;
}

Cela pourrait-il être la raison pour laquelle OrderClose() ne voit pas de position ouverte?

 
rapid_minus:

Bonsoir !

Je n'arrive pas à comprendre : dans la fonction de départ, le compilateur exige "return" - la fonction doit renvoyer une valeur".

Quelle valeur doit être retournée dans ce cas ?

int start()

Cela peut-il être la raison pour laquelle OrderClose() ne voit pas de position ouverte ?

faites void start() et il n'y aura pas d'erreur