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

 
dzhini:

Pouvez-vous me dire comment spécifier la condition pour que le testeur détermine le numéro de la barre du délai inférieur dans le texte.

Par exemple : Le testeur commence avec H1, puis il détermine l'heure de début de la n-ième bougie dans le cadre de texte, et l'étape suivante est de déterminer le numéro de la bougie, qui a commencé au même moment, mais par le cadre temporel ci-dessous. iBarShift écrit toujours 0. Le bloc responsable du calcul de la barre est ci-dessous :

Ce n'est pas la façon de faire. Dans le testeur, vous devez exécuter la chouette sur le TF minimum utilisé dans cette chouette aux prix d'ouverture. Il est préférable de faire fonctionner la chouette sur l'ouvert sur les minutes. Et il vaut mieux prescrire le TF, explicitement !
 
dzhini:
Yuri, pouvez-vous suggérer quelque chose à propos de ma question juste au-dessus ?


Vérification du script

//+------------------------------------------------------------------+
//|                                             VininI_CheckTime.mq4 |
//|                                            Copyright 2012, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Vinin"
#property link      "vinin@mail.ru"



//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int TimeFrame[]={PERIOD_MN1, PERIOD_W1, PERIOD_D1, PERIOD_H4, PERIOD_H1,PERIOD_M30, PERIOD_M15, PERIOD_M5, PERIOD_M1};
   int i, pos;
   for (i=0;i<ArraySize(TimeFrame);i++) {
      if (Period()<TimeFrame[i]) continue;
      pos=i;
      break;
   }
   for (i=pos+1;i<ArraySize(TimeFrame);i++) {
      int tmp=iBarShift(NULL, TimeFrame[i], Time[0], true);
      if (iTime(NULL, TimeFrame[i], tmp)<Time[0])tmp--;
      Print("TimeFrame: ",  TimeFrame[i], " TimeOpen: ", TimeToStr(iTime(NULL, TimeFrame[i], tmp), TIME_MINUTES), " Bar: ", tmp);
      
   
   
   }
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Résultat

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily : TimeFrame : 1 TimeOpen : 00:00 Bar : 1057

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily : TimeFrame : 5 TimeOpen : 00:00 Bar : 212

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily : TimeFrame : 15 TimeOpen : 00:00 Bar : 70

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily : TimeFrame : 30 TimeOpen : 00:00 Bar : 35

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily : TimeFrame : 60 TimeOpen : 00:00 Bar : 17

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily : TimeFrame : 240 TimeOpen : 00:00 Bar : 4


 

Un conseil, s'il vous plaît :

Je veux créer une MA multi-temporelle, qui change de couleur lorsque la tendance change. J'ai fait l'affichage du prix moyen à partir d'autres horizons temporels, mais je ne sais pas comment résoudre le problème du changement de couleur.

//+------------------------------------------------------------------+
//|                                                      MA-MTFC.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
extern int MA_TF=1440;
extern int MA_Period=89;
extern int MA_Shift=0;
extern int MA_Method=2;
extern int MA_AP=0;
//+------------------------------------------------------------------+
double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];

string Symb;
double MA;

int init()
  {
   Symb=Symbol();
   //---
   if (MA_TF != 1)
    if (MA_TF != 5)
     if (MA_TF != 15)
      if (MA_TF != 30)
       if (MA_TF != 60)
        if (MA_TF != 240)
         if (MA_TF != 1440)
          if (MA_TF != 10080)
           if (MA_TF != 43200)
            if (MA_TF != 0)
             return;
   //---
   SetIndexBuffer(0,Buffer_Yellow);
   SetIndexBuffer(1,Buffer_Lime);
   SetIndexBuffer(2,Buffer_Red);
   //---
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   //---
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   double MA;
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
      
   for(int i=limit-1;i>=0;i--)
    {
      int pos=iBarShift(NULL, MA_TF, Time[i]);
      MA=iMA(Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
      
      Buffer_Yellow[i]=MA;
      Buffer_Lime[i]=MA;
      Buffer_Red[i]=MA;
      
      if(Buffer_Yellow[i]>Buffer_Yellow[i+1])
       {
         Buffer_Red[i]=EMPTY_VALUE;
       }
      else if(Buffer_Yellow[i]<Buffer_Yellow[i+1])
       {
         Buffer_Lime[i]=EMPTY_VALUE;
       }
      else
       {
        Buffer_Red[i]=EMPTY_VALUE;
        Buffer_Lime[i]=EMPTY_VALUE; 
       }
      
    }

   return(0);
  }
 
Roman.:
Ce n'est pas la façon de faire. Dans le testeur, vous devez exécuter la chouette sur le TF minimum utilisé dans cette chouette aux prix d'ouverture. Il est préférable de faire fonctionner la chouette sur l'ouvert sur les minutes. Et il vaut mieux prescrire le TF, explicitement !
Roman, j'essaie de faire en sorte que l'indicateur soit affiché dans le testeur de stratégie. L'indicateur utilise des délais plus courts pour l'analyse.
 
FAQ:
Il serait préférable de montrer le code complet, et de le coller en utilisant le bouton "SRC".

OK, je vais essayer d'ajouter du code à ce post.

En fait, je sais ce que je veux réaliser au final - je fais du commerce depuis longtemps, mais je n'ai commencé à programmer qu'après avoir réalisé exactement ce que je voulais programmer.

Mon objectif maintenant est d'obtenir une flèche verte sur chaque barre clôturée au-dessus des trois glissements et une flèche rouge sur chaque barre clôturée en dessous des trois et seulement pour les barres clôturées après avoir attaché au graphique. Je ne suis pas intéressé par le bar actuel.

Je veux que ces flèches restent sur le graphique pendant que l'indicateur y est attaché, puis retiré.

Je dessine maintenant les curseurs uniquement pour des raisons de clarté, puis je les supprimerai de l'EA.

Nous avons maintenant des curseurs et des flèches, mais ils apparaissent et disparaissent maintenant et apparaissent sur de mauvaises barres. C'est ce que je ne comprends pas.

Je pense que j'ai peut-être confondu quelque chose avec j ou j+1 dans les lignes 106-111 et avec quel élément les épingler.


Merci si vous pouvez me donner un indice.


Pour une raison quelconque, le bouton SRC ne fonctionne pas. Je vais essayer d'insérer le fichier comme un mq4 normal.

Dossiers :
t11.mq4  5 kb
 
Vinin:


Vérification du script

J'ai décidé de modifier votre code et de faire un contrôle pour répondre à mes besoins (je l'ai exécuté sur H1).

   for (i=0;i<10;i++) {
      int tmp=iBarShift(NULL, PERIOD_M15, Time[i], true);
      if (iTime(NULL, PERIOD_M15, tmp)<Time[i])tmp--;
      Alert(" TimeOpen: ", TimeToStr(iTime(NULL, PERIOD_M15, tmp), TIME_MINUTES), " Bar: ", tmp);  
   }

Et le voici

 
dzhini:

J'ai décidé de modifier votre code et de faire un contrôle pour répondre à mes besoins (je l'ai exécuté sur H1).

Et voilà ce que j'ai obtenu


Vous enregistrez le testeur en ouvrant les prix. Roman a donc déjà écrit comment le faire.

 
C'est-à-dire que nous exécutons le testeur sur un TF bas de gamme, et modifions toute la logique de l'indicateur pour l'adapter à un TF plus haut de gamme ?
 
ilunga:

Prix de clôture de la barre précédente Close[1]

Merci beaucoup ! Donc, l'EA négocie par ticks, mais puis-je le changer pour négocier sur des intervalles (chandeliers) ? Je suis tellement confus à ce sujet.
 

Bonne journée à ce fil ! Vous savez, l'indicateur se compile, mais il ne dessine rien, et je ne sais pas ce qui ne va pas, ce qu'il faut penser, comment chercher un bug. Quoi qu'il en soit, le code fonctionnait, j'y ai ajouté une fonction avec des changements minimes, mais maintenant il ne fait rien du tout !!!

Peut-être que le problème se situe quelque part dans les déclarations qui commencent par la grille, ou peut-être que je suis trop lent et que je me suis trompé... Ça marchait !

//+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#import "user32.dll"
   int   PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0;

#property indicator_chart_window
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T=4,K=200;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P;extern int RO=49;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;

   for (int i=limit;i>=0;i--) {
//----
 for ( int J=0;J<=RO;J++){
//----

  // for(int i=Bars; i>=0;i--)
   i=Bars;
      бар_вершина=iHighest( NULL,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения=iLowest( NULL,  timeframe, MODE_LOW,NormalizeDouble ( бар_вершина/2,0), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало=iLowest( NULL,  timeframe, MODE_LOW,NormalizeDouble (бар_вершина*1.5,0), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
         
  if(начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
  
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало;for(i=бар_начало-1;i>=0;i--){linija2=linija2-naklon;
    
    НижняячертаBuffer2[i]=linija2;
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i=0;i<100;i++){  СинняячертаBuffer3[i]= Open[i];}
          for (i=330;i<500;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка4; int бар_точка4;   бар_точка4=iHighest( NULL,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка4 =High[ бар_точка4 ];  
   
   if(вершина>точка4){naklon=(начало-точка4)/(бар_начало-бар_точка4);  
   double linija1=начало;for(i=бар_начало-1;i>=0;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[0];
  if ( vulf==Ask&&vulf==Bid)vulf=1;
  else{ for (vulf=vulf+Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf-Point){
           if ( vulf==Ask&&vulf==Bid){vulf=1;}} 
      for (vulf=vulf-Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf+Point){
           if ( vulf==Ask&&vulf==Bid)vulf=1;} 
              
           
           
           }
           
           
   if (vulf==1){Comment ("  Есть вульв!!! "  , "  timeframe " , timeframe);return(0);  }
    if (vulf!=1&&pereklutsatel==1) {    
   
     if(delimiter<3){delimiter++;Comment(delimiter);return(0);}
   delimiter=0;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return(0);
  }
//+------------------------------------------------------------------+

void fChangePeriod(){int ii,hwd = WindowHandle(Symbol(),Period());
   switch(Period()){
      case PERIOD_W1    : ii = 33134; break; //PERIOD_D1;
      case PERIOD_D1    : ii = 33136; break; //PERIOD_H4;
      case PERIOD_H4    : ii = 33135; break; //PERIOD_H1;
      case PERIOD_H1    : ii = 33140; break; //PERIOD_M30;
      case PERIOD_M30   : ii = 33139; break; //PERIOD_M15;
      case PERIOD_M15   : ii = 33138; break; //PERIOD_M5;
      case PERIOD_M5    : ii = 33137; break; //PERIOD_M1;
      case PERIOD_M1    : ii = 33141; break; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0);
   return;
}
Raison: