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

 
dertop:


Oui, désolé d'avoir confondu, c'est la première fois que j'écris sur le forum. J'ai d'abord copié, puis décidé d'écrire à la main et je me suis embrouillé... Mais l'exemple ci-dessus est correct...

MA1>MA2 et MA1<MA3 et MA3<MA4


Lisez le fil de discussion suivant
 
Vinin:


Il y a quelque chose d'étrange ici.

MA1>MA2 et MA2>MA3 et ensuite MA1<MA3

D'autant plus qu'il suffit de

Oui, en effet, il y a une contradiction entre les deux. Je n'ai juste pas tout regardé ! L'auteur a encore beaucoup de chemin à parcourir pour faire des "erreurs difficiles" !
 

La question est la suivante. Ce n'est pas la première fois que je rencontre cette situation :

Si la fonction traal ou breakeven est appelée à chaque tick, par exemple, une erreur 1 apparaîtra. Ce qui signifie, selon la documentation :

ERR_NO_RESULT   1       Нет ошибки, но результат неизвестен

Si vous ne l'appelez pas ouvertement dans la fonction start, c'est-à-dire que vous ne vous contentez pas d'écrire la fonction avec des paramètres directement dans start, mais que vous l'appelez sur chaque barre, c'est-à-dire pas dans un tick, alors il n'y a pas d'erreur...

Je veux dire comme ça :

int start()
{
   MovingStopLossToBU();
// Что-то дальше делаем..

Pourquoi comme ça ?

Et en général, comment est-elle plus intelligemment mise en œuvre ? Cela nécessitera-t-il des ressources importantes pour chaque tique ?

 

Всем добрый день.

J'ai besoin de votre aide. Je ne comprends pas ce qui se passe.

si (OrderStopLoss() != NormalizeDouble(t6,5))

{

a=10 ;

}

LaconditionOrderStopLoss()=1.3017 etNormalizeDouble(t6,5)=1.3017 est toujours valable, c'est-à-dire que a=10. Mais elle ne doit pas être satisfaite.

Quelle peut en être la raison ?

 
hoz:

La question est la suivante. Ce n'est pas la première fois que je rencontre cette situation :

Si la fonction traal ou breakeven est appelée à chaque tick, par exemple, une erreur 1 apparaîtra. Ce qui signifie, selon la documentation :

S'il n'est pas appelé ouvertement dans la fonction de démarrage, c'est-à-dire s'il ne s'agit pas seulement d'entrer la fonction avec des paramètres directement dans le démarrage, mais de l'appeler sur chaque barre, c'est-à-dire pas par tick, alors erreur - non...

Je veux dire comme ça :

Pourquoi comme ça ?

Et de manière générale, comment la mettre en œuvre de manière plus intelligente ? Cela nécessitera-t-il des ressources importantes pour chaque tique ?

Je vous conseille de ne pas vous fier aux barres, à tant de pips. Si nécessaire, c'est à cela que servent les ressources. Et l'erreur "no error" se produit lorsque le prix est répété pour une modification qui existe déjà. C'est pourquoi vous devez le faire étape par étape, comme je vous l'ai conseillé au début.
 
hoz:

La question est la suivante. Ce n'est pas la première fois que je rencontre cette situation :

Si la fonction traal ou breakeven est appelée à chaque tick, par exemple, une erreur 1 apparaîtra. Ce qui signifie, selon la documentation :

S'il n'est pas appelé ouvertement dans la fonction de démarrage, c'est-à-dire s'il ne s'agit pas seulement d'entrer la fonction avec des paramètres directement dans le démarrage, mais de l'appeler sur chaque barre, c'est-à-dire pas par tick, alors erreur - non...

Je veux dire comme ça :

Pourquoi comme ça ?

Et en général, comment est-elle plus intelligemment mise en œuvre ? Est-ce que cela va demander beaucoup de ressources pour chaque tique ?

Le chalut essaie de déplacer la SL au même niveau. Nous devons ajouter un contrôle, le niveau du chalut doit être différent de la SL actuelle.

 
valeryk:

Le chalut tente de déplacer SL au même niveau. Une vérification devrait être ajoutée, le niveau de chalutage doit être différent de la SL actuelle.



J'ai un chèque pour ça :

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
{
  if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
  {
    Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
  }

}
Si l'arrêt - nouvel arrêt (en U.B.) n'est pas nul... puis nous modifions... Sinon, nous ne modifions pas. C'est pourquoi je ne comprends pas bien comment cela se passe. Après tout, je comprends que je dois vérifier l'égalité des arrêts passés et nouveaux et je l'ai fait.
 

Bonjour, comment puis-je modifier ma commande initiale et finale en 1 T/P ? Merci.

gi_304 = CountTrades();

   g_price_212 = 0;

   double ld_24 = 0;

   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

            g_price_212 += OrderOpenPrice() * OrderLots();

            ld_24 += OrderLots();

         }

      }

   }

   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);

   if (gi_332) {

      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_BUY) {

               g_price_180 = g_price_212 + TakeProfit2 * Point;

               gd_unused_196 = g_price_180;

               gd_308 = g_price_212 - Stoploss * Point;

               gi_268 = TRUE;

            }

         }

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_SELL) {

               g_price_180 = g_price_212 - TakeProfit2 * Point;

               gd_unused_204 = g_price_180;

               gd_308 = g_price_212 + Stoploss * Point;

               gi_268 = TRUE;

            }

         }

      }

   }

   if (gi_332) {

      if (gi_268 == TRUE) {

         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);

            gi_332 = FALSE;

         }

      }

   }

   return (0);


 
agat8430:

Bonjour, comment puis-je modifier ma commande initiale et finale en 1 T/P ? Merci.


Modifiez ce code pour qu'il ne ressemble pas à un hack.
 
hoz:



J'ai donc un chèque pour cette affaire :

Si arrêt - nouvel arrêt (en b.u.) n'est pas égal à zéro... puis nous modifions... Sinon, nous ne modifions pas. C'est pourquoi je ne comprends pas bien comment cela se passe. Après tout, je comprends que je dois vérifier l'égalité des arrêts passés et nouveaux et je l'ai fait.

Voici comment je vérifie d'en haut et d'en bas lorsque je recherche sans erreur un bai :

          if(OrderStopLoss() > OrderOpenPrice())
          {
            if(NormalizeDouble(Bid-OrderStopLoss()-plus*tral,Digits) > prev)
            if(Bid > NormalizeDouble(OrderStopLoss()+plus*tral+prev,Digits))
            {
              SL = NormalizeDouble(OrderStopLoss()+plus*part*tral,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue);return(0);
          } }

Je peux donner la fonction ModifyOrder(), bonne pour toutes les modifications d'ordre et de position.

Raison: