2017-06-08 3 views
1

Troisième partie question:Comment obtenir le prix des objets graphique HLINE et calculer les niveaux de Fibonacci

  1. Comment trouver 2 utilisateur créé des lignes horizontales sur un tableau par nom et retourner le prix de chacun.
  2. Déterminer ensuite quel HLine a été traversé par le prix le plus récemment pour déterminer la direction de la tendance.
  3. Calculer les niveaux de Fibonacci en fonction des prix et de la direction
+1

S'il vous plaît fournir un [mcve] (https://stackoverflow.com/help/mcve) demonstartating le problème. – rgunning

Répondre

1

Exemple de travail d'un objet Fibonacci pouvant être édité par l'utilisateur et impression des niveaux de fibonacci.

#include <ChartObjects/ChartObjectsFibo.mqh> 
CChartObjectFibo *Fibo; 

int OnInit() 
    { 
    Fibo = new CChartObjectFibo(); 
    #Create object and set some defaults 
    if(!Fibo.Create(0,"Fibonacci",0,Time[5],Open[5],Time[0],Open[0])) 
    { 
      return(INIT_FAILED); 
    } 
    # Allow user to drag object 
    Fibo.Selectable(true); 
    return(INIT_SUCCEEDED); 
    } 

void OnDeinit(const int reason) 
    { 
    delete Fibo; 
    } 

void OnTick() 
    { 
    string level_description; 
    double level_value; 
    string printString="Fibonacci Levels - "; 
    # Get the two anchor prices 
    double p1 = Fibo.GetDouble(OBJPROP_PRICE,0); 
    double p2 = Fibo.GetDouble(OBJPROP_PRICE,1); 
    # Calculate range 
    double range=MathAbs(p1-p2); 
    for(int i=0;i<Fibo.LevelsCount();i++) 
    { 
      level_description=Fibo.LevelDescription(i); 
      # Calculate price of level 
      level_value=(p2>p1)?p2-range*Fibo.LevelValue(i):p2+range*Fibo.LevelValue(i); 
      printString=StringFormat("%s %s:%.5f",printString,level_description,level_value); 
    } 
    Print(printString); 
    } 
+0

Merci. Comment changer une couleur par défaut pour l'objet fibonacci? Je cherchais une propriété pour ce https://www.mql5.com/fr/docs/standardlibrary/chart_object_classes/obj_fibonacci/cchartobjectfibo/cchartobjectfibocreate mais je ne peux pas trouver. –

+0

Fibo.Color (clrBlue) ou Fibo.LevelColor (i, clrBlue) https://www.mql5.com/fr/docs/standardlibrary/chart_object_classes/cchartobject – rgunning

1

Difficile de comprendre exactement ce que vous recherchez, pas sûr si vous essayez de trouver les objets graphiques ou tout simplement calculer les niveaux sur la base des prix. En supposant que vous avez le prix des deux lignes horizontales, la structure et la fonction suivantes peuvent être utilisées pour calculer les niveaux de Fibonacci. (le prix 1 est plus tôt que le prix 2).

Calcul basé sur la formule trouvée here

struct FibLevel { 
    double retrace38; 
    double retrace50; 
    double retrace61; 
    double extension61; 
    double extension100; 
    double extension138; 
    double extension161; 
}; 

void FibLevel(double price1, double price2,FibLevel &fiblevel) 
{ 
    double range = MathAbs(price1-price2); 
    fiblevel.retrace38 =(price1<price2)?price2-range*0.382:price1+range*0.382; 
    fiblevel.retrace50 =(price1<price2)?price2-range*0.500:price1+range*0.500; 
    fiblevel.retrace61 =(price1<price2)?price2-range*0.618:price1+range*0.618; 
    fiblevel.extension61 =(price1<price2)?price2+range*0.618:price1-range*0.618; 
    fiblevel.extension100=(price1<price2)?price2+range  :price1-range; 
    fiblevel.extension138=(price1<price2)?price2+range*1.382:price1-range*1.382; 
    fiblevel.extension161=(price1<price2)?price2+range*1.618:price1-range*1.618; 
} 
+0

Merci. Je veux écrire un EA. L'utilisateur crée deux lignes horizontales et EA doit se baser sur cette ligne horizontale pour calculer les niveaux de fibonacci - sans montrer, juste pour calculer. Je ne sais pas comment obtenir un prix de la ligne horizontale sur le graphique au code source. –

+1

ok, donc la vraie question est de savoir comment obtenir le prix des lignes horizontales créées par l'utilisateur. Saisir des lignes spécifiques créées par l'utilisateur et déterminer quelle ligne correspond au point précédent est plus difficile que de simplement calculer les niveaux de fibonacci – rgunning

+0

Exactement. Je veux juste saisir les lignes créées par l'utilisateur (le nom des lignes sont données) lire un prix à partir des lignes et ensuite calculer les niveaux de fibonacci. –

2
double value = ObjectGetDouble(0,nameOfHLine,OBJPROP_PRICE1); 

ceci est votre valeur si vous avez le nom de l'objet, si vous ne l'avez pas - besoin de boucler sur tous les objets:

string name; 
for(int i=ObjectsTotal()-1;i>=0;i--){ 
    name = ObjectName(i); 
    if(ObjectType(name)!=OBJ_HLINE) continue; 
}