[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 324

 
Forexman77:


//--------------------------------------------------------------- 5 --
// Critères de négociation
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0) ; // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0) ; // MA_2

si (PRICE_HIGH * Point >= MA_1_t * Point)
{
Opn_S=true ;
Cls_B=vrai ;
}

si (PRICE_LOW * Point <= MA_2_t * Point)
{
Opn_B=true ; //critère d'ouverture. Acheter
Cls_S=true ; // Critère de fermeture. Sell
}
//---------------------------------------------------------------

Maintenant, le nœud du problème : le système n'ouvre que les ordres de vente, mais ne veut pas acheter. Quelle peut être l'erreur ?

Il est tout à fait possible que j'aie des erreurs ailleurs, ne jugez pas, mais aidez-moi par des conseils).



Qu'est-ce que c'est ? PRICE_LOW et PRICE_HIGH. Ce sont des constantes entières qui ont la valeur 0 ou 1, jusqu'à 6.

Vous devez utiliser iHigh(Symbol(),Period(),i) pour obtenir la valeur maximale du BID sur la barre i, et iLow(Symbol(),Period(),i) pour obtenir la valeur minimale du BID sur la barre i.

S'il s'agit d'une chute sur la barre actuelle, alors : if ( iHigh(Symbol(),Period(),0) >= MA_1_t) Et il n'est pas nécessaire de multiplier MA par Point.

 

Bon après-midi à tous !

Veuillez me dire quel est le problème.

J'ai attaché un indicateur de volume (Volume) à l'indicateur standard Awesome.

Je veux organiser le calcul du volume total de la vague (compté du prix le plus bas au prix le plus haut et correspond à la valeur Min et Max de Awesome). Voir la figure 1.

fig1

Quelle est l'erreur, les valeurs ne sont pas comptées.

Voici le code lui-même.

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  SteelBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=2;
extern bool Show_Volume=true;
extern double coaf=1.5;
extern bool Show_Vol_line=true;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];


double VLUP;
   double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
    datetime tmhgh, tmlw;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
  string name_ind = "Awesome_super_volumes";
   IndicatorShortName("Awesome_super_volumes");
   
   
//---- AO_fan line 2 (basic)
   if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
   else 
    {Show_AOLine_2=DRAW_NONE; }
   SetIndexBuffer(0,AOBuffer3);
   SetIndexStyle(0,Show_AOLine_2);
   SetIndexLabel(0,"basic line");   

   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexLabel(1,"Volume");
   
  //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

//---- AO_fan line 2 (basic) buffer
   for(int i=0; i<limit; i++)
   {
     
 //---- AO_fan basic line + Volumes
     
      AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
}
if (Show_Vol_line==true)
{
double Vol_Arr[];


  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;}
//---- dispatch values between 2 buffers
   }
   
  //-- Поиск High & Time  
  if (AOBuffer3[i]>=0)
  {
  prhgh_s = High[i];
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}
  }   
   
  //-- Поиск Low & Time  
  if (AOBuffer3[i]<=0)
  {
  prlw_s = Low[i];
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
  } 
  
  // -- Пересчет баров от High до Low
  int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);     
  
  int shift=iBarShift(NULL,0,tmlw);
  
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));}
       
  SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);     
 
//-- Эти значения должны отображаться в окне Awesome
  SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); 
  SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); 
  SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10);
  SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10);  
  
  
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 10, "Times New Roman", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }
  
//--Ввeл дополнительную процедуру для отображения значений на чарте. Ее не должно быть.
  void SetText2(string name, string text, int xdist, int ydist, color c, int size) 
 {                                                                                    
  ObjectCreate(name,OBJ_LABEL,0,0,0,0,0);     
  ObjectSet(name, OBJPROP_XDISTANCE, xdist);
  ObjectSet(name, OBJPROP_YDISTANCE, ydist);    
  ObjectSetText(name,text,7,"Arial Black",c);
 }
 
Sepulca:


Qu'est-ce que c'est ? PRICE_LOW et PRICE_HIGH. Ce sont des constantes entières de valeur 0 ou 1, jusqu'à 6.

Vous devez utiliser iHigh(Symbol(),Period(),i) pour obtenir la valeur BID maximale de la barre i, et iLow(Symbol(),Period(),i) pour obtenir la valeur BID minimale de la barre i.

S'il s'agit d'une chute sur la barre actuelle, alors : if ( iHigh(Symbol(),Period(),0) >= MA_1_t) Et il n'est pas nécessaire de multiplier MA par Point.

Merci beaucoup ! !! Ça marche ! !!
 

Les gars, quelqu'un peut me dire ce qui ne va pas avec ce code, s'il vous plaît !

 
Fox_RM:

Les gars, quelqu'un peut me dire ce qui ne va pas avec ce code, s'il vous plaît !


if (Show_Vol_line==true)
{
double Vol_Arr[]; // ошибки: 1. Размещение  2. Область видимости


  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;}
//---- dispatch values between 2 buffers
   }
   
 
VladislavVG:


Je ne comprends pas bien. Mais il n'y a aucun problème avec l'affichage du volume. Le calcul des volumes pose des problèmes. Quelque part par là.

 //-- Поиск High & Time  
  if (AOBuffer3[i]>=0)
  {
  prhgh_s = High[i];
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} // -- tmhgh - выводил это значение оно = 0;

  }   
   
  //-- Поиск Low & Time  
  if (AOBuffer3[i]<=0)
  {
  prlw_s = Low[i];
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
  } 
  
  // -- Пересчет баров от High до Low
  int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);    tmlw - тоже = 0; Почему?
  
  int shift=iBarShift(NULL,0,tmlw);
  
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));}
       
  SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);     
 
asdfgh001:

Bonjour !

Ma question sera un peu hors sujet.

Pouvez-vous me dire s'il est possible de trouver quelque part le découpage des formes TA en fichiers CSV ? Je peux utiliser des formats txt, xls ou tout autre format pouvant être traité par programme.

Il existe des exemples de figures d'AT dans divers articles et manuels d'AT, mais bien sûr sous forme d'images ordinaires. Quelqu'un a-t-il des ensembles plus ou moins importants de symboles TA enregistrés comme une tranche d'histoire d'une paire de devises sur les périodes H1-H4, par exemple ?

J'ai cherché sur Google, mais je n'ai rien trouvé. Bien sûr, nous pouvons parcourir manuellement l'historique, marquer les formes, exporter ce morceau d'historique en tant que .csv ; répéter le nombre requis de fois, collecter la base de formes à la fin. Mais si quelqu'un l'a déjà fait, j'aimerais gagner du temps.

Merci d'avance :)


Pourquoi avez-vous besoin des formes sous forme de fichiers CSV ? Écrire une bibliothèque de formes... Écrivez-les vous-même, afin de pouvoir les comprendre, et n'empruntez pas ceux de quelqu'un d'autre. Beaucoup ne veut pas dire mieux !
 
Fox_RM:


Je ne comprends pas bien. Mais il n'y a aucun problème d'affichage des volumes. Il y a un problème avec le comptage des volumes. Quelque part par là.


1. Le tableau doit être placé, c'est-à-dire qu'il faut lui allouer de la mémoire. Sinon, il n'y a tout simplement aucun endroit où stocker les valeurs ;).

2. Lorsque vous recevez un nouveau tic-tac, votre tableau pair sera repositionné/réinitialisé. Cela a à voir avec la portée. Le tableau doit être de type "statique" pour éviter que cela ne se produise.

Lisez quelque chose sur les principes fondamentaux de la programmation.

HZ Le problème du comptage est celui où je vous ai signalé les erreurs d'utilisation des tableaux.

 
VladislavVG:


1. Un tableau doit être localisé, en d'autres termes, de la mémoire doit être allouée. Sinon, il n'y a tout simplement pas de place pour stocker les valeurs ;).

2. Lorsque vous recevez un nouveau tic-tac, votre tableau pair sera repositionné/réinitialisé. Cela a à voir avec la portée. Le tableau doit être de type "statique" pour éviter que cela ne se produise.

Lisez quelque chose sur les principes fondamentaux de la programmation.

HZ Le problème du comptage est que je vous ai signalé des erreurs dans l'utilisation des tableaux.

C'est-à-dire queVol_Arr[] devrait être initialisé comme un tableau global si je comprends bien.


La question est bien sûr une question nulle, MAIS.

1. Pourquoi alors les volumes sont affichés correctement dans l'indicateur.

2. Lors du calcul, j'accède àAOBuffer3[] et non àVol_Arr[].

Merci !

 

Pouvez-vous me dire comment prescrire, lorsque la différence de deux EMA (cinq jours/minimum et maximum) augmente, de vendre long à l'EMA maximum et de racheter court à l'EMA minimum ?

J'utilise"Rastvor" dans l'en-tête de la variable globale comme la différence de deux EMAs .

Comment écrire ce code dans les critères de négociation ?