tracer la ligne H_ sur le plus haut des 36 derniers sommets

 

Bonjour

J'ai essayé d'écrire dans le code ceci :

quand la ligne K% de la stochastique(80,30,30) > 75, revenir 36 barres en arrière (34,shift 2) et dessiner une ligne H_ "tomate" du plus haut sommet à la barre actuelle.

lorsque la ligne K% de la stochastique(80,30,30) < 25, retournez 36 barres (34,shift 2) et dessinez une ligne H_line "olive" à partir du plus bas niveau jusqu'à la barre actuelle.

int start()
  {

double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && stoch<25)
   {
   ObjectCreate("olive",OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive",OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }

quand j'exécute ce programme, j'obtiens la première configuration pour tomate et pour olive ok, puis même si dans le journal j'obtiens "tomate ON" à un niveau de prix différent, je n'obtiens pas de nouvelle ligne tomate sur le graphique. même chose pour olive.

l'idée de l'ea est d'utiliser ces lignes pour ouvrir des trades. donc ce que je veux finalement est d'avoir ceci :

quand K%>75

dessiner la ligne o la plus haute (36 dernières barres).

si la ligne est activée, ne pas tracer d'autres lignes, jusqu'à ce que la ligne soit supprimée.

si une transaction est ouverte, supprimer la ligne

si aucune transaction n'est ouverte et que 24 barres sont passées depuis la barre qui a déterminé K%>75, supprimer également la ligne.

:)

Comme c'est le premier code que j'ai écrit dans ma vie, s'il vous plaît apprenez-moi comment regarder le problème.

Merci.

 

besoin d'un nom différent

      ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato " + high_nr,OBJPROP_COLOR,Tomato);
 

après

   ObjectCreate("olive"+low_nr,OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive"+low_nr,OBJPROP_COLOR,Olive);

le code met 25 lignes, sur le même prix, mais en partant non pas de la bougie low_nr (qui est toujours 10, peu importe quel est le vrai nombre après stoch <25), mais de la bougie 35.

Idem pour la tomate.

:(

 

Une fois qu'un objet a été créé, vous ne pouvez pas créer un autre objet avec le même nom.

C'est pourquoi cela fonctionne bien la toute première fois, mais pas après (dans votre code original).

Si vous souhaitez que seule la dernière ligne répondant aux critères soit affichée sur votre graphique, créez la ligne dans init, puis utilisez ObjectMove pour déplacer l'objet vers ses nouvelles coordonnées.

Si vous voulez que toutes les lignes précédentes soient affichées,

ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);

Comme high_nr est le décalage de la barre, il sera probablement répliqué à un moment ultérieur, et ne fonctionnera donc pas correctement. Utilisez la date dans le nom et il sera unique.

 
pouvez-vous préciser ce que vous essayez d'accomplir ?
 
cichichan:

Bonjour

J'ai essayé d'écrire dans le code ceci :

quand la ligne K% de la stochastique(80,30,30) > 75, revenir 36 barres en arrière (34,shift 2) et dessiner une ligne H_ "tomate" du plus haut sommet à la barre actuelle.

lorsque la ligne K% de la stochastique(80,30,30) < 25, retournez 36 barres (34,shift 2) et dessinez une ligne H_line "olive" à partir du plus bas niveau jusqu'à la barre actuelle.

quand j'exécute ce programme, j'obtiens la première configuration pour tomate et pour olive ok, puis même si dans le journal j'obtiens "tomate ON" à un niveau de prix différent, je n'obtiens pas de nouvelle ligne tomate sur le graphique. même chose pour olive.

l'idée de l'ea est d'utiliser ces lignes pour ouvrir des trades. donc ce que je veux finalement est d'avoir ceci :

quand K%>75

dessiner la ligne o la plus haute (36 dernières barres).

si la ligne est activée, ne pas tracer d'autres lignes, jusqu'à ce que la ligne soit supprimée.

si une transaction est ouverte, supprimer la ligne

si aucune transaction n'est ouverte et que 24 barres sont passées depuis la barre qui a déterminé K%>75, supprimer également la ligne.

:)

Comme c'est le premier code que j'ai écrit dans ma vie, s'il vous plaît apprenez-moi comment regarder le problème.

Merci

Nous commençons au début .....

double stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

A la barre 0, le stoch peut arriver quelque part à la valeur de la barre 0 > 75 et se terminer avec une valeur inférieure.

Est-ce qu'il faut tracer une ligne dans ce cas ? ou est-ce que c'est juste pour les prix de clôture que la stochastique se termine ?

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];

Avez-vous déjà utilisé iHighest et/ou iLowest ? ?? Voir comment faire iHighest et iLowest

if(stoch > 75) high_price = High[iHighest(NULL,0,MODE_HIGH,......

if(stoch < 25) low_price = Low[iLowest(........

//-----

for(high_nr=2;high_nr<36;high_nr++)   // why do you repeat this ??
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}

une fois la création est suffisante .... la boucle ne fait que répéter ce qui est à l'intérieur de { }

donc pas besoin de boucle pour cela ....

avant de créer

  • vérifier les transactions en cours
  • vérifier si l'objet dont le nom commence par "tomate" existe déjà et s'il existe, vérifier si l'on doit supprimer l'ancien.

créer un nom au moment où vous le faites comme

linenamehigh =     "tomato  "+ TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)

vérifier vos objets peut avec

//----
   int i, ot=ObjectsTotal()-1;
   string id;
//----
   for(i=ot;i>=0;i--)
    {id=ObjectName(i);
     if(StringSubstr(id,0,7)=="tomato ")
      {
      //check when created 
      if(StringSubstr(id,8,...)< TimeToStr(Time[24],........)){ObjectDelete(id);}
      }  
     if(StringSubstr(id,0,6)=="olive ")
         {
         //.....
         }
    }

Cliquez sur les liens et essayez de comprendre ce qui se passe.

endroits avec ....... dans le code que vous pouvez essayer de remplir vous-même

 
qjol:
pouvez-vous préciser ce que vous essayez d'accomplir ?


l'idée finale :

Signal 1 = quand K%>75 et que le haut de la barre[1] et de la barre actuelle[0] est plus petit que le plus haut des 36 dernières barres(High_point)

dessinez la ligne tomate sur le High_point

si la ligne tomate est déjà tracée, ne dessine plus aucune ligne, jusqu'à ce que la ligne soit supprimée.

si une transaction est ouverte en utilisant la ligne tomate, supprimez la ligne.

si aucune transaction n'est ouverte et que 96 barres sont passées depuis la barre qui a déterminé le High_point , supprimez la ligne.

maintenant, je n'obtiens qu'une seule ligne sur chaque Signal 1(la fonction Print envoie 36 "tomato ON" à chaque tick valide, je suppose), donc je dois dire au code d'arrêter la boucle après avoir trouvé la ligne tomato. je vais préparer des spaghettis et réfléchir à la façon dont je devrais écrire cela... dans ma tête, cela devrait être la prochaine étape.... j'espère que je ne rate pas quelque chose :)

Je suis sur la bonne voie ? Merci beaucoup pour votre aide et vos conseils.

le code jusqu'à présent :

//+------------------------------------------------------------------+
//|                                                      1expert.mq4 |
//|                                                              ant |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window

extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75)
     {
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[0],high_price);
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
   {
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[0],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }
 

j'ai posté en même temps que le poste deVries.

Je vais lire :)

 
double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

if (stoch > 75 && High[1] < High[high_nr] && High[0] < High[high_nr])
   {
   ObjectCreate("tomato"+H,OBJ_TREND,0,Time[H],high_price,Time[0],High[0]);
   ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
   Print ("tomato ON"+H);   
   }

B.T.W. pas besoin de ligne pour le faire.

 

Le cas dont vous parlez cichichan se produira rarement, vous devez donc utiliser un index pour voir ce que vous faites :

http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png

La flèche vers le bas ne s'affiche pas, il y a un bug quelque part ....

//+------------------------------------------------------------------+
//|                                                      lexpert.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 8
#property  indicator_color1 YellowGreen  
#property  indicator_color2 Coral


extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;

 double arrow_up[];
 double arrow_down[];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   //-------- 
   SetIndexBuffer(0, arrow_up );
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(0,233);
   SetIndexEmptyValue(0,0.0);
//-------- 
   SetIndexBuffer(1,arrow_down);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(1,234 );
   SetIndexEmptyValue(1,0.0);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   int    limit;
   int    counted_bars=IndicatorCounted();

   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   //---- macd counted in the 1-st additional buffer
   for(int i=limit; i>=0; i--)
      { 

double stoch_1, stoch_2;
stoch_2=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+2);
stoch_1=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+1);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,i+2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,i+2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////


   if(Bid<high_price && High[i]<high_price && High[i+1]<high_price && stoch_2<75 && stoch_1 >75)
     {
     arrow_down[i] =  High[i] + 5*iATR(NULL,0,200,i);
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[i],high_price);
      ObjectSet("tomato"+H,OBJPROP_RAY_RIGHT, false);
      ObjectSet("tomato"+H,OBJPROP_WIDTH,5 ); 
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
    else    arrow_down[i] = 0.0;

///////////////////////////////////////////////////////////////////////////////

if(Bid>low_price && Low[i]>low_price && Low[i+1]>low_price &&  stoch_2>25 && stoch_1 < 25)
   {
   arrow_up[i] = Low[i] - 5*iATR(NULL,0,200,i);
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[i],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR, Yellow );
   ObjectSet("olive"+L,OBJPROP_WIDTH,5 );
   ObjectSet("olive"+L,OBJPROP_RAY_RIGHT, false);
   Print ("olive ON"+low_price);
   }
   else  arrow_up[i] = 0.0;
   
//----
  } 
//----
   return(0);
  }
 
ffoorr son n indicateurnot n EA
Raison: