[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 125

 
Vinin:

Modifiez ce code pour qu'il n'ait pas l'air d'avoir été piraté.
Je ne comprends pas.
Comment l'éditer ? Que voulez-vous dire ?
 
borilunad:
Je conseillerais de le modifier non pas par barres, mais par autant de pips. Si nécessaire, c'est à cela que servent les ressources. Et l'erreur "no error" apparaît lorsque le prix est répété pour une modification qui existe déjà. Par conséquent, vous devez procéder étape par étape comme je vous l'ai conseillé au début.


Le B.U. est bien sûr tiré par des pips. Je voulais dire appeler la fonction B.U. à chaque tick ou à l'ouverture des barres par exemple... Mais ce serait idiot. Le prix peut varier considérablement d'une barre à l'autre. Donc, l'appel sera similaire à celui de tickwise, non ? Je pensais simplement qu'il faudrait peut-être ajouter une condition, afin qu'elle ne soit pas appelée à chaque tic. Je pense que nous devrions comparer le STOP actuel et celui qui va être mis en place, en quelque sorte...

En général. Quelle chose étrange à faire.

J'ai ajouté une condition au départ et ça a marché comme ça :

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }

Maintenant, il n'y a plus d'erreurs.

Ce que je ne comprends pas, c'est que la fonction MovingStopLossToBU() elle-même ne change que si le stop n'est pas égal au Stop Loss :

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
    if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
    {
       Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
    }
Comment le comprenez-vous alors ?
 
Bonsoir, pourriez-vous me dire comment colorer en vert les bougies au-dessus de la moyenne MA(10) et en rouge celles en dessous ?
 
hoz:


Le B.U. est bien sûr tiré par des pips. Je voulais dire appeler la fonction B.U. à chaque tick ou à l'ouverture des barres par exemple... Mais ce serait idiot. Le prix peut varier considérablement d'une barre à l'autre. Donc, l'appel sera similaire à celui de tickwise, non ? Je me disais juste qu'il faudrait peut-être ajouter une condition pour qu'elle ne soit pas appelée à chaque tic. Je pense que nous devrions comparer le STOP actuel et celui qui va être mis en place, en quelque sorte...

En général. Quelle chose étrange à faire.

J'ai ajouté une condition au départ et ça a marché comme ça :

Maintenant, il n'y a plus d'erreurs.

Ce que je ne comprends pas, c'est que la fonctionMovingStopLossToBU() elle-même ne change que si le stop n'est pas égal au Stop Loss :

Comment le comprenez-vous alors ?

Dans votre exemple, lorsque le stop est à zéro, cela signifie que vous venez d'ouvrir une position sans stop. Et je vous ai donné le cas où vous êtes déjà au seuil de rentabilité.

Mais voyez plus haut, je vous ai donné mon chalutage sans breakeven ! Et je peux vous donner la fonction.

 
agat8430:
Je ne comprends pas.
Comment l'éditer ? Comment le comprendre ?
Alors tu es venu au mauvais endroit si tu ne comprends pas. Étudiez ce que vous ne comprenez pas, vous demanderez. Et si vous ne comprenez rien, vous n'en avez pas besoin.
 
borilunad:
Voir ci-dessus, je vous ai donné mon chalutage sans erreur ! Et je peux vous donner la fonction.


Je n'ai pas vu votre réponse lorsque j'ai écrit. Je vais jeter un coup d'oeil maintenant.

Mais en général, je serais heureux de voir votre fonction de modification, peut-être que j'apprendrai quelque chose de nouveau pour moi-même.

 
borilunad:

Dans votre exemple, lorsque le stop est à zéro, cela signifie que vous venez d'ouvrir une position sans stop. Et je vous ai donné le cas où il est déjà à l'équilibre.

Voir plus haut, je vous ai donné mon chalut sans seuil de rentabilité ! Et je peux vous donner la fonction.


Non, pas sans arrêt. Je n'en ai posté qu'une partie. Voici ma fonction de seuil de rentabilité :

//+-------------------------------------------------------------------------------------+
//| Перевод в б.у. рыночных ордеров                                                     |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
{
    double priceBU;
    int type = OrderType();
    for (int i=OrdersTotal() - 1; i>=0; i--)
    {
        if (!OrderSelect(i,SELECT_BY_POS)) continue;
        if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        
        RefreshRates();
        
        if (type == 0)
        {
           double price = Ask;
           int li_cmd = 1;
        }
        else
        {
           price = Bid;
           li_cmd = -1;
        }

           if (li_cmd * (price - OrderOpenPrice()) >= i_triggerForBU * pt)
           {
             priceBU = ND(OrderOpenPrice() + li_cmd * (i_preservedProfit * pt));
             if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
             {

                 if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
                 {
                     Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
                 }
               
                     Comment ("Ордер успешно переведён в безубыток");
                     Print ("Ордер успешно переведён в безубыток");
             }
           }
    }
}

Dans la ligne, on voit clairement que si l'arrêt calculé est égal à celui qui est déjà là, il n'y aura pas de modification ! N'est-ce pas ? Donc, à l'origine, le chèque était... Mais l'erreur 1 apparaissait constamment, jusqu'à ce que j'aie introduit une autre condition dans le début avant la fonction de modification :

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }
C'est pourquoi.... c'est ce que j'essaie de comprendre. Je pense que j'ai tout décrit en détail.
 
hoz:
Alors tu es venu au mauvais endroit si tu ne comprends pas. Étudiez ce que vous ne comprenez pas, vous demanderez. Et si vous ne comprenez rien, vous n'en avez pas besoin.


Si vous ne comprenez rien, vous n'en avez pas besoin. Eh bien, dites-moi comment modifier le code pour qu'il n'ait pas l'air piraté si vous comprenez tout. C'est la première fois que je viens sur le forum, et j'ai reçu une réponse si agréable.

"Les gens géniaux ont une réponse géniale."

 
agat8430:


Alors dites-moi comment modifier le code sans que cela ressemble à un piratage si vous comprenez tous. Je suis venu sur la branche pour les débutants. C'est la première fois que je viens sur le forum et j'ai reçu une belle réponse.

"Les gens géniaux ont une réponse géniale".

Pour les nouveaux arrivants d'abord :

Un navigateur de forum et des réponses aux questions fréquemment posées. Lecture hautement recommandée !( 1 2 3 4 5 6 ) 51 18.02.2011 FAQ

 
agat8430:


Puis dites-moi comment modifier le code pour qu'il n'ait pas l'air piraté si vous comprenez ce que je dis. C'est ma première fois sur le forum, et j'ai obtenu une belle réponse.

"Les gens géniaux ont une réponse géniale."


Rendez les noms des variables "lisibles".
Raison: