[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 272

 

Salud ! !!

Je ne comprends pas pourquoi Open=Close=High=Low - aucune différence, tous les prix sont les mêmes, quatre colonnes des mêmes prix dans le fichier en cours de création. Voici le code de l'EA qui décharge les données.

int init()  
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,"Date","DayOfWeek","CLOSE","OPEN","High","LOW" );
   FileClose(h);        
  }
int start()
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
      string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
      string Wday=DoubleToStr(DayOfWeek(),0);
      FileSeek(h, 0, SEEK_END);
      FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iOpen("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iHigh("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iLow("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)));
      FileClose(h);   
      Print("Close=",Close[0]);
      Print("Open=",Open[0]);
      Print("Low=",Low[0]);
      Print("High=",High[0]);
     
   return(0);
  }
 

Bonjour Messieurs les programmeurs ! Jetez un coup d'œil à ce conseiller expert très intéressant ! Je veux corriger quelque chose, à savoir : je veux vraiment y attacher (de préférence commutable) un chalut personnalisable sur le take profit. Je pense (et j'espère) que ce ne sera pas trop difficile à faire pour un spécialiste !

/*Décompiler sur ce forum est contraire à la loi. Premier avertissement. Répétition - bannissement éternel (FAQ)*/.

 
Andrew1001:

Bonjour Messieurs les programmeurs ! Jetez un coup d'œil à ce conseiller expert très intéressant ! Je veux corriger quelque chose, à savoir : je veux vraiment y attacher (de préférence commutable) un chalut personnalisable sur le take profit. Je pense (et j'espère) que ce ne sera pas trop difficile à faire pour un spécialiste !

/*Décompiler sur ce forum est contraire à la loi. Premier avertissement. Répétition - bannissement éternel (FAQ)*/.



Et voilà ! Et comment le code prévoit alors qu'il serait possible de le voir, de l'améliorer ? (question aux modérateurs)
 
ANG3110:

Eh bien, j'ai écrit un exemple plus simple là-bas.

***

Et si vous ne voulez pas dessiner tous les jours, mais seulement le dernier, cela se fait un peu différemment. Je suggère juste une approche plus professionnelle.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=Close[i]; // я вставил закрытие оно работает на нижних таймфремах

//КАК ТУТ вставить High Low для  hour = 5 для ВСЕХ таймфремов ниже ограниченного таймфрема???????????

      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************

SEULEMENT il n'est pas clair comment insérer iHigh et iLow pour une heure particulière, la même heure = 5 ; ? ?????????? vous obtenez à nouveau les mêmes œufs...

PROFESSIONNELLEMENT, j'utilisais iClose iHigh iLow, mais j'ai oublié comment le code était écrit pour cette variante... Je me souviens du principe, mais j'ai oublié les détails.

int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i-1); 
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(PrevDay>LastDay)  /// что было дальше НЕПОМНЮ!!!!, НО вариант ЛУЧШЕ, можно непарясь ставить уровни iHigh iLow iClose iOpen
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

veuillez m'aider à comprendre comment faire ???????????????????

 

Encore une fois, s'il vous plaît, aidez-nous s'il vous plaît. ! !!!

Comment mettre correctement les iHigh iLow iClose???? d'un timeframe spécifique (H1) dans le buffer, afin qu'ils puissent être lus correctement sur les graphiques below ????

int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i-1); 
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(PrevDay>LastDay)  
/// что было дальше НЕПОМНЮ!!!!, НО вариант ЛУЧШЕ, можно непарясь ставить уровни iHigh iLow iClose iOpen
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}
 

Bonjour, pourriez-vous me dire comment l'écrire correctement ?

Le problème, c'est que ObjectSetText ne fait rien, et que j'obtiens donc du texte au lieu d'une légende de sommet.

ObjectCreate( "вершина",  OBJ_TEXT , WindowOnDropped( ) , Time[бар_вершина],  вершина+(10*Point)) ;  
       ObjectSet(  "вершина",  OBJPROP_COLOR, Crimson) ;
    ObjectSetText( "вершина", "вершина", 5, NULL, CLR_NONE) ;   
 
orb:

Je ne comprends pas pourquoi dans le fichier en cours de création Open=Close=High=Low - aucune différence, tous les prix sont les mêmes, quatre colonnes des mêmes prix. Ci-dessous le code de l'Expert Advisor qui décharge les données.


Pas de données pertinentes pour l'instrument et l'horizon temporel - ouvrez les graphiques corrects.

Entrée non corrigée dans le code :

FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),..

Correct :

FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo("GBPUSD",MODE_DIGITS)),..

Le code fonctionne si les conditions sont remplies.

 
Roll:


Pas de données pertinentes pour l'instrument et l'horizon temporel - ouvrez les graphiques corrects.

Entrée incorrecte dans le code :

Correct :

Tant que les conditions sont remplies, le code fonctionne.

OK, je vais essayer !)
 
nlp2311:

SEULEMENT il n'est PAS clair comment insérer iHigh et iLow pour une heure spécifique, la même heure = 5 ; ? ?????????? il s'agit encore des mêmes œufs...

PROFONDEMENT j'utilisais iClose iHigh iLow, mais j'ai oublié comment le code était écrit pour cette variante... Je me souviens du principe, mais j'ai oublié les détails.

s'il vous plaît, aidez-moi à comprendre comment le faire ???????????????????


Vous pouvez dessiner des barres sur les graphiques horaires et inférieurs sans prendre les prix d'une autre échelle temporelle. La liaison avec iHigh, etc. n'est pas très utile car elle ralentit l'indicateur et nécessite de modifier l'autre période.

S'il est possible de tout faire sur une seule période, c'est préférable.

Et comment, en pratique, dessiner des lignes avec des données horaires sur une plus petite échelle de temps ? Ça donne quelque chose comme ça.

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 Lime
//==============================
double H[],L[],O[],C[];
double hm,lm,om,cm;
int hr,hrp,di,f=0;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,H);
   SetIndexBuffer(1,L);
   SetIndexBuffer(2,O);
   SetIndexBuffer(3,C);
   
   if (Period()>1440) f=1;
   
   di=60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   if (f==1) {Comment("Период больше H1!"); return(0);}
   //-------------------------------
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) 
   {
      cbi=Bars-1;
      hm=High[cbi]; 
      lm=Low[cbi]; 
      om=Open[cbi]; 
      cm=Close[cbi]; 
   }
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hrp!=hr) 
      {
         for (int j=i+1; j<=i+di; j++)
         {
            H[j]=hm;
            L[j]=lm;
            O[j]=om;
            C[j]=cm;
         }
         
         hm=High[i];
         lm=Low[i];
         om=Open[i];
         cm=Close[i];
      }
      else
      {
         if (High[i]>hm) hm=High[i];
         if (Low[i]<lm) lm=Low[i];
         cm=Close[i];
      }
      
      H[i]=hm;
      L[i]=lm;
      O[i]=om;
      C[i]=cm;
   }
   
   return(0);
}
//***************************************************************
 
ANG3110:


Sur les graphiques horaires et inférieurs, vous pouvez dessiner des barres de l'échelle horaire et sans prendre les prix d'une autre échelle horaire. La liaison avec iHigh, etc. n'est pas très utile, car elle ralentit l'indicateur et nécessite le déclenchement de l'autre période.

S'il est possible de tout faire en une seule fois, c'est préférable.

Et comment, en pratique, dessiner des données horaires sur une plus petite échelle de temps ? Eh bien, c'est à peu près comme ça :


MERCI pour le conseil) :