Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 746

 
AlexeyVik:

Oh, et il y a une autre chose que je ne comprends pas. Si N est une date, alors D' 19:00 ' est un format texte. Peut-on les comparer ? Non. Dans les cas de comparaison de temps, j'écris

D'19:00' est une constante littérale de type datetime.
 

Je veux vous demander, chers programmeurs, de m'expliquer en russe comment rechercher les lectures passées de l'indicateur avec le code. Par exemple, le stoploss lors de la vente doit être placé sur 3 High ZigZag à partir de la barre zéro, ou sur la huitième fractale supérieure. partout où je lis - soit pas cela, soit écrit pas ainsi :)

 
Petiyashaket:

Je veux vous demander, chers programmeurs, de m'expliquer en russe comment rechercher les lectures passées de l'indicateur avec le code. Par exemple, le stoploss lors de la vente doit être placé sur 3 High ZigZag à partir de la barre zéro, ou sur le haut de la huitième fractale. partout où je lis - soit ce n'est pas ça, soit ce n'est pas écrit :)

La boucle de la barre zéro au début du graphique, int x=0. Dans la boucle, appelez l'indicateur requis, par exemple, fractal. Si la valeur n'est pas vide, ajouter 1 à x, lorsque x atteint la valeur désirée - mémoriser l'itération de la boucle et sortir de la boucle, la valeur de l'itération sera théoriquement le numéro de la barre où se trouve la fractale désirée. Théoriquement, parce que pendant que le cycle est en cours, une autre barre peut apparaître sur M1 et alors le pointeur sera montré sur une mauvaise barre ;))).
 
evillive:
Cycle de la barre zéro au début du graphique, int x=0. Dans le cycle, appelez l'indicateur requis, par exemple, fractal. Si la valeur n'est pas vide, ajouter 1 à x, lorsque x atteint la valeur requise - se souvenir de l'itération de la boucle et sortir de la boucle, la valeur de l'itération sera théoriquement le numéro de la barre où se trouve la fractale requise. Théoriquement, parce que lorsque la boucle est en cours, une nouvelle barre peut apparaître sur M1 et alors le pointeur sera montré sur une mauvaise barre)))).
Il faut gagner du temps. Ou, mieux encore, utilisez le tableau où est stocké le temps de formation des dernières fractales. La vitesse de travail sera réduite en raison de l'élimination des boucles inutiles.
 
Petiyashaket:

S'il vous plaît, expliquez-moi en russe comment rechercher les lectures passées de l'indicateur dans le code ? Par exemple stoploss sur la vente que je dois mettre sur 3 High ZigZag à partir de la barre zéro, ou le haut huitième fractale, où que je lise - ou pas quelque chose, ou écrit pas ainsi :)

"Langue russe" et "langage de programmation" (vouloir une explication en code) ne sont pas la même chose.

Algorithmiquement :

1) Définir quelle valeur le ZigZag d'intérêt retourne, s'il n'a pas de "point fractal" - cela peut être EMPTY_VALUE ou 0.0.

2) En utilisant iCustom() dans la boucle, récupérer la valeur de l'indicateur tampon correspondant sur la barre vérifiée dans la boucle, vérifier la différence avec la "valeur vide" et garder un compteur de ces différences. Lorsque le compteur est égal à 3 dans votre cas - le numéro (N) de la barre sera la barre souhaitée ;

3) High[N]\Low[N] - sera le niveau requis.

Pour le ZigZag High standard, nous recherchons quelque chose comme ceci :

#define  ZZ_NULL  0.0

    uint li_N = 0, li_Bar = 1;
    double ld_ZZ = 0.;
//----
    while (li_Bar < Bars - 1)
    {
        ld_ZZ = iCustom (_Symbol, _Period, "ZigZag", /* внешние параметры индикатора */, 1, li_Bar);
        if (ld_ZZ != ZZ_NULL)
        {
            li_N++;
            if (li_N >= 3) break;
        }
        li_Bar++;
    }
    double ld_Price = High[li_Bar];

Mais avant cela, nous devons modifier le nombre de tampons affichés dans le code ZigZag de 1 à 3 :

#property indicator_buffers 3
 

Merci pour les réponses, je vais y revenir :) maintenant le problème est le suivant

http://clip2net.com/s/j7xvk9

Je n'arrive pas à comprendre pourquoi il ne modifie pas l'ordre, mais ouvre simplement de nouveaux ordres en attente.

 
Petiyashaket:

Merci pour les réponses, je vais y revenir :) maintenant le problème est le suivant

http://clip2net.com/s/j7xvk9

Je n'arrive pas à comprendre pourquoi il ne modifie pas l'ordre, mais ouvre simplement de nouveaux ordres en attente.

 
evillive: Merci de l'avoir montré :)
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);           //верхний фрактал
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);         //нижний фрактал
//----
  if(Up>0&&Down==0&&Volume[0]<2) //если верхний есть а нижнего нет то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если цена позволяет выставить отложенный ордер то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {
        for (int pos=0;pos<OrdersTotal();pos++) //     скопировал эту строчку хз откуда ибо не понимаю грёбаный счетчик :) тут видимо и косяк
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); // ищем текущие ордера
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)// и если все условия совпадают то:
          {
          OrderModify(OrderTicket(),Up+5*Point,Up-sl,Up+tp,0,CLR_NONE);//переносим байстоп на новый верхний фрактал
          }


 
Petiyashaket:
Merci de l'avoir montré :)
De quoi se plaint-il dans le journal des modifications ? "Ouvre stupidement de nouveaux ordres en attente" car il n'y a pas de limite, mais il y a un OrderSend.
 
Petiyashaket:

1) Toute stratégie doit être définie par le nombre d'ordres ouverts en même temps. Par conséquent, avant d'ouvrir la prochaine commande, nous devons vérifier combien sont déjà ouvertes.

2) Sur une barre, il ne peut pas y avoir de fractales UPPER et LOWER en même temps, respectivement, le contrôle est classé comme étant

    if (Up > 0 && Down == 0)

appartient à la catégorie des idioties de programmeurs.

3) Avant d'écrire les conditions de retour des valeurs de l'indicateur de tampon, vous devez savoir exactement quelle valeur est "vide" pour celui-ci ? Avez-vous vérifié qu'il est à zéro ?

4) La construction.

    if (Volume[0] > 2)

Bien qu'elle fonctionne (dans la plupart des cas), elle n'est pas naturelle, car il s'agit d'une idée de "libre arbitre" du développeur, et elle est peu informative pour l'opérateur. Une alternative - le suivi d'un nouveau bar.

5) Vous devez commencer par les bases, car ceci :

    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {

Cela indique que vous ne comprenez pas du tout ce que vous écrivez.

La meilleure façon de comprendre est d'étudier le fonctionnement des codes d'autres personnes et de les modifier pour vos propres besoins. Bonne chance.