Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 197

 
Aleksandr Verkhozin:


J'ai regardé la vidéo sur le travail avec un indicateur externe, j'ai écrit un petit code pour voir les valeurs des tampons dans le testeur :

void OnTick()

{

double Buf1=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",0,1) ;

double Buf2=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",1,1) ;

double Buf3=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",2,1) ;

double Buf4=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",3,1) ;

Comment("Buf1=",Buf1,"\n", "Buf2=",Buf2,"\n","Buf3=",Buf3,"\n","Buf4=",Buf4);

}

Les zones apparaissent et disparaissent en mode visualisation. Mais la valeur des tampons est toujours nulle de toute façon. N'y a-t-il pas moyen de formaliser ces zones dans le code ?

Peut-être existe-t-il une fonction, autre que iCustom, qui conviendrait à de tels indicateurs ? Peut-être que quelqu'un a écrit des hiboux avec de tels indicateurs ?


Pas moyen d'utiliser les tampons indicateurs, ils stockent des valeurs fractales.

Dans les propriétés de l'indicateur fractals_show = true ; vous les verrez sur le graphique.

Zones, objet graphique OBJ_RECTANGLE

Vous pouvez obtenir la valeur de ces zones en utilisant


ObjectGet

Renvoie la valeur d'une propriété d'objet spécifiée.

doubleObjectGet(
stringobject_name,// nom de l'objet
intindex// identifiant de la propriété
) ;


Vous passez en boucle tous les objets, trouvez le bon, et trouvez le chemin.

 int obj_total=ObjectsTotal(); 
  string name; 
  for(int i=0;i<obj_total;i++) 
    { 
     name = ObjectName(i);
     Print(i," - объект ",name); 
    }

Approximativement, cela ressemble à ceci

 
Artyom Trishkin:
Vous savez, juste dans ce fil, j'ai posté un modèle pour un chalut qui utilise la valeur de l'indicateur qui lui est envoyé dans ses calculs. Cherchez, ne soyez pas paresseux.

J'ai besoin d'un stop suiveur correct sur les positions ouvertes. En fin de compte, il y en a 1 ou 3 et ils sont liés par une valeur Step, c'est-à-dire un système de stop/reverse. Ou peut-être est-il plus facile de suivre tous les ordres en utilisant la fonction CalculateProfit(). Maintenant, je n'arrive pas à comprendre comment la valeur de l'indicateur dans ce schéma de traitement des ordres peut être liée au suivi du profit total des positions ouvertes.
 
geratdc:

J'ai besoin d'un stop de trailing correct sur le profit des positions ouvertes. Au final, il y en a 1 ou 3 et ils sont liés par la valeur Step, c'est-à-dire qu'il s'agit d'un système stop et reverse. D'où la complexité. Ou peut-être est-il plus facile de suivre tous les ordres à l'aide de la fonction CalculateProfit(). Maintenant, je n'arrive pas à comprendre comment la valeur de l'indicateur dans ce schéma de traitement des ordres peut être liée au suivi du profit total des positions ouvertes.

L'indicateur, sa valeur, peut être une valeur autre que, par exemple, la MAK de la barre souhaitée. La valeur du prix calculé pour déplacer l'arrêt total des positions peut être envoyée au chalut.

Cependant, il n'est pas clair quel type de chalut est en position ouverte - ce qu'il tracte et quand exactement.

 
geratdc: Je cherche le bon chalutage pour le profit.

Tous les sentiers sont ici. Dans le fichier TrailingFuncLib.mq4, je prends la fonction TrailingStairs - Trailing STANDARD-STANDARD. Chaque commande est suivie indépendamment.

 
Artyom Trishkin:

L'indicateur, sa valeur, peut être une valeur autre que, par exemple, la MAK de la barre souhaitée. La valeur du prix calculé pour déplacer l'arrêt total des positions peut être envoyée au chalut.

Cependant, il n'est pas clair quel type de chalut est en position ouverte - ce qu'il tracte et quand exactement.


En principe, oui, on m'a proposé une fois un chalutage par prix moyen. Tout semble logique, mais qu'est-ce que cela signifie - prix moyen ? Est-ce (prix de 1 ordre + Step*Point + (prix de 2 ordres + Step*Point) + prix de 3 ordres) / 3 ? Il s'agit donc de beaucoup de paramètres - vous devez appeler les positions ouvertes et le prix actuel de chaque position. Quoi qu'il en soit, ce trailing stop me dérange moins que le fait que l'EA perde de la valeur pendant les tests. Que se passera-t-il dans le commerce réel ? Il peut être défini, mais là encore, nous ne savons pas quelle tournure prendra le graphique des devises dans une semaine ou un mois, il y a donc une faiblesse - si 3 ordres sont ouverts et qu'il y a un contre-mouvement sur le marché, le conseiller expert échouera en raison du drawdown. Il faut donc penser à limiter le drawdown et à fermer les positions avant que le dépôt ne soit annulé. Pour faire court, c'est Fox qui m'intéresse le plus))))
 

Je n'arrive pas à le comprendre moi-même et je n'ai pas trouvé d'informations spécifiques non plus(( L'idée est de marquer les frontières de prix dans le code, les zones les plus proches construites par l'indicateur. J'ai commencé à écrire du code, mais je suis confus et je ne sais pas si je le fais bien ou pas. Je ne sais pas si je le fais bien ou mal.

 int obj_total=ObjectsTotal();       

  string name; 

  for(int i=0;i<obj_total;i++)

  {

  name = ObjectName(i); 

  if(ObjectType(name)==OBJ_RECTANGLE)

  {

    pr1=ObjectGet(name,OBJPROP_PRICE1);// верхняя цена зоны

    pr2=ObjectGet(name,OBJPROP_PRICE2);// нижняя цена зоны

  }  

  }  

Et pourquoi mon code n'est pas inséré ici, comme dans l'original, en multicolore et en lignes les unes à côté des autres ?
 
-Aleks-:

J'ai trouvé la solution - apparemment le terminal n'avait pas assez de mémoire - j'ai fermé quelques graphiques et ça a marché.

Merci - en effet, les calculs ont lieu.

Et si les variables ne sont pas de type int, mais bool, que faire ?


//+------------------------------------------------------------------+
//|                                                       Decode.mq4 |
//|                                            Copyright 2017, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int N=162;  //0..162
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for (int n=0;n<N;n++)
   {
      int tmp=n;
      int a=(int) MathMod(tmp,3);
      tmp=(tmp-a)/3;
      int b=(int) MathMod(tmp,3);
      tmp=(tmp-b)/3;
      bool c= (bool) MathMod(tmp,2);
      tmp=(tmp-c)/2;
      int d=tmp;
   
      Print("N=",n,"; A=", 2+2*a, "; B=", b+1,"; C=",c,"; D=", 16+4*d);
   }
  }
//+------------------------------------------------------------------+
 
Victor Nikolaev:

Je suis désolé, mais ce code est-il différent du précédent ?
 
-Aleks-:

Je suis désolé, mais ce code est-il différent du précédent ?


Les différences sont minimes. L'une des variables est logique.

La sortie dira vrai ou faux

 
Victor Nikolaev:


Les différences sont minimes. L'une des variables est logique.

La sortie dira vrai ou faux

Êtes-vous sûr d'avoir regardé le dernier code que vous avez posté ? Si c'est le cas, j'ai besoin de repos... Merci.