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

 
abeiks:

Bonjour.

L'heure n'est pas retournée correctement pour le moment. Par exemple, si l'heure est 12.04, il renvoie 12.4. Pouvez-vous me dire comment rendre cette fonction correcte ?

Eh bien, Hour() et Minute() renvoient l'heure actuelle et la minute actuelle de la dernière heure du serveur au moment du lancement du programme. Et les valeurs retournées sont de type int. Et ce ne sont que des nombres entiers. Vous devez donc les formater. Par exemple, comme ceci :

string label=IntegerToString(Hour(),2,'0')+":"+IntegerToString(Minute(),2,'0');
 
artmedia70:

Hour() et Minute() renvoient l'heure courante et la minute courante de la dernière heure du serveur au démarrage du programme. Et les valeurs retournées sont de type int. Et ce ne sont que des nombres entiers. Vous devez donc encore les formater. Par exemple, comme ceci :


Merci !
 
abeiks:
Merci !

Vous êtes les bienvenus. Si ce n'est pas un secret, pourquoi avez-vous besoin d'un horodatage indiquant la dernière fois que votre programme a été lancé - l'heure qu'il contient ne changera pas.

Simple curiosité...

 

Bonjour !

Veuillez indiquer comment mettre en œuvre correctement la fonction de limitation d'une transaction à une barre (c'est-à-dire que si une transaction a déjà été ouverte ou fermée sur une bougie, une nouvelle transaction ne sera pas ouverte sur cette bougie).

J'ai trouvé de nombreuses variantes, mais je n'arrive pas à trouver comment écrire correctement le code d'un hibou (c'est-à-dire quelle partie doit être écrite dans les variables globales et quelle partie doit être écrite dans la condition d'ouverture de l'affaire).

Par exemple, voici une telle variante :

int TekBar = -1 ; // Barre actuelle.

if (TekBar == Bars)return(0) ; // Une seule transaction par barre.
TekBar = Bars ; // Il n'y a qu'une seule transaction sur une barre.

{...}

quelle partie de ce script doit être insérée dans quelle zone du code du hibou ?

 
DuKle:

Bonjour !

Veuillez indiquer comment mettre en œuvre correctement la fonction de limitation d'une transaction à une barre (c'est-à-dire que si une transaction a déjà été ouverte ou fermée sur une bougie, une nouvelle transaction ne sera pas ouverte sur cette bougie).

J'ai trouvé de nombreuses variantes, mais je n'arrive pas à trouver comment écrire correctement le code d'un hibou (c'est-à-dire quelle partie doit être écrite dans les variables globales et quelle partie doit être écrite dans la condition d'ouverture de l'affaire).

Par exemple, voici une telle variante :

int TekBar = -1 ; // Barre actuelle.

if (TekBar == Bars)return(0) ; // Une seule transaction par barre.
TekBar = Bars ; // Il n'y a qu'une seule transaction sur une barre.

{...}

quelle partie de ce script doit être insérée dans quelle zone du code du hibou ?

Vous devez savoir si la dernière transaction à la barre numéro 0 a été ouverte ou fermée.

Pour ce faire, vous devez trouver la dernière transaction ouverte et la dernière transaction fermée.

Visualisez la barre de la dernière transaction ouverte et la barre de la dernière transaction fermée.

Si l'une de ces valeurs (barre de la dernière transaction ouverte ou barre de la dernière transaction fermée) est égale à zéro, vous ne pouvez pas ouvrir de nouvelles positions.

Et, oui : ce n'est pas un script, c'est juste un morceau de code. Et vous n'avez pas besoin d'insérer quoi que ce soit dans la chouette : la chouette est un rapace nocturne, et laissez vivre l'oiseau.

 

Bonjour ! Aidez-nous !

J'ai une idée, mais je ne sais pas comment la mettre en œuvre. Et surtout, je ne sais pas si ce problème a une solution.

L'essence de ce système est la suivante : nous avons un indicateur qui trace une ligne sur le graphique sur un nombre donné de barres.

Est-il possible de modifier le nombre de barres sur lesquelles la ligne est tracée en faisant glisser l'"extrémité" gauche de la ligne avec la souris ? Après avoir glissé, l'indicateur doit se souvenir du nouveau nombre de barres utilisé pour le calcul. Voici un exemple d'un indicateur que je veux améliorer

//+------------------------------------------------------------------+
//|                                                      Canal__.mq4 |
//+------------------------------------------------------------------+
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours=20;
extern color col=Red;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,fs;
ulong sName;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   p=Hours*60/Period();
   if(fs==0)
     {
      sName=TimeCurrent(); 
      fs=1;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("1"+(string)sName);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,n;
//----
   if(f==1)
     {
      p1=iBarShift(Symbol(),Period(),(datetime)ObjectGet("1"+(string)sName,OBJPROP_TIME1));
      if(fp==0 && p!=p1) {p=p1; fp=1;}
     }
//----
   sx=0; sy=0; sxy=0; sx2=0;
   for(n=0; n<=p; n++)
     {
      sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);
     }
   aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
//----
   for(i=0; i<=p; i++)
     {
      lr=bb+aa*i;
      dh=High[i]-lr; dl=Low[i]-lr;
      //----
      if(i<p/2)
        {
         if(i==0)
           {
            dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;
           }
         if(dh>=dh_1) {dh_1=dh; ai_1=i;}
         if(dl<=dl_1) {dl_1=dl; bi_1=i;}
        }
      //----
      if(i>=p/2)
        {
         if(i==p/2)
           {
            dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;
           }
         if(dh>=dh_2) {dh_2=dh; ai_2=i;}
         if(dl<=dl_2) {dl_2=dl; bi_2=i;}
        }
     }
   lr0=bb; lrp=bb+aa*(i+p);
//===================================================
   if(MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
   if(MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
   if(MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2))
     {
      if(MathAbs(dh_1-dh_2)<MathAbs(dl_1-dl_2)) f=1; if(MathAbs(dh_1-dh_2)>=MathAbs(dl_1-dl_2)) f=2;
     }
//=================================================
   if(f==1)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++)
           {
            hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
            if(i==0 || i==p/2) dhm=0.0;
            if(High[i]-hai>dhm && i<p/2) {ai_1=i; f1=1;}
            if(High[i]-hai>dhm && i>=p/2) {ai_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
         dli=Low[i]-hai;
         if(i==0) dlm=0.0; if(dli<dlm) dlm=dli;
        }
      ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);
      hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
      //----------------------------
      price_p1=hap+dlm/2;
      price_01=ha0+dlm/2;
     }
//=================================================
   if(f==2)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++) 
           {
            lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
            if(i==0 || i==p/2) dlm=0.0;
            if(Low[i]-lai<dlm && i<p/2) {bi_1=i; f1=1;}
            if(Low[i]-lai<dlm && i>=p/2) {bi_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
         dhi=High[i]-lai;
         if(i==0) dhm=0.0; if(dhi>dhm) dhm=dhi;
        }
      la0=Low[bi_1]*(0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(0-bi_1)/(bi_2-bi_1);
      lap=Low[bi_1]*(p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(p-bi_1)/(bi_2-bi_1);
      //----------------------------------------------------------------
      price_p1=lap+dhm/2;
      price_01=la0+dhm/2;
     }
//=================================================================================== отрисовка линий
   ObjectCreate("1"+(string)sName,2,0,Time[p],price_p1,Time[0],price_01);
//-----------------------------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_COLOR,col);
   ObjectSet("1"+(string)sName,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet("1"+(string)sName,OBJPROP_RAY,false);
//---------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE1,price_p1);
   ObjectSet("1"+(string)sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE2,price_01);
   f=1; p1=p; p0=p; p2=p; fp=0;
//===================================================================================
   return(0);
  }
//+------------------------------------------------------------------+
 
Night63:

Bonjour ! Aidez-nous !

J'ai une idée, mais je ne sais pas comment la mettre en œuvre. Et surtout, je ne sais pas si ce problème a une solution.

L'essence de ce système est la suivante : nous avons un indicateur qui trace une ligne sur le graphique sur un nombre donné de barres.

Est-il possible de modifier le nombre de barres sur lesquelles la ligne est tracée en faisant glisser l'"extrémité" gauche de la ligne avec la souris ? Après avoir glissé, l'indicateur doit se souvenir du nouveau nombre de barres utilisé pour le calcul. Voici un exemple d'un indicateur que je veux améliorer

Vous devez ajouter OnChartEvent() à l'indicateur et suivre l'événement de changement de taille de ligne par son nom : CHARTEVENT_OBJECT_CHANGE. Recalculez la nouvelle longueur de ligne en barres, et utilisez sa nouvelle taille comme paramètre pour le calcul.
 
artmedia70:

Vous devez savoir si la dernière transaction a été ouverte ou fermée sur la barre numéro 0.

Pour ce faire, vous devez trouver la dernière transaction ouverte et la dernière transaction fermée.

Visualisez la barre d'ouverture de la dernière transaction ouverte et la barre de fermeture de la dernière transaction fermée.

Si l'une de ces valeurs (la barre de la dernière transaction ouverte ou la barre de la dernière transaction fermée) est égale à zéro, vous ne pouvez pas ouvrir de nouvelles positions.

Et, oui : vous n'avez pas de script, c'est juste une partie du code du nepomyshchego. Et vous n'avez pas besoin d'insérer quoi que ce soit dans la chouette : la chouette est un rapace nocturne, et laissez vivre l'oiseau.

Je comprends le principe de la détection de la présence d'un accord, mais je ne sais pas comment l'implémenter dans le code :-(
 
DuKle:
Je comprends le principe de déterminer si une transaction existe, je ne sais pas comment l'implémenter en code :-(

Comme c'est triste tout ça...

Dois-je le faire pour vous ?

Pour commencer, et pour mieux comprendre, lisez le fil de discussion"Fonctions utiles de KimIV".

Le code, bien sûr, est redondant, mais il est juste parfait pour commencer et apprendre.

 

Chers programmeurs mql4/5 !

Je suis un débutant qui a appris les bases du langage de programmation et développé une EA pour mon diplôme !

J'ai un chapitre dans mon diplôme intitulé "Économie".

Si je devais développer un programme pour une entreprise - tout est clair avec la partie économique.

Mais comment être dans mon cas ? Qu'est-ce que je peux prendre en compte et quelles sont les pistes à suivre !

Merci beaucoup !!!!

___________________________

La route est parcourue par ceux qui marchent (c)