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

 
Maksim Efimov MACD standard d'une ligne de signal et d'un histogramme. L'idée est la suivante : à chaque nouvelle barre, nous prenons les deux bougies précédentes et obtenons les valeurs de l'indicateur sur chacune d'elles. Si la valeur MACD de la deuxième bougie est supérieure à la valeur du signal et que la valeur MACD de la première bougie est déjà inférieure au signal et que toutes les valeurs sont supérieures à zéro, cela signifie qu'il y a un croisement à la hausse et vice versa.

Mais, au moment d'obtenir la valeur, elle devient en quelque sorte énorme. Et une seule - la ligne de signal de la deuxième bougie. Il peut être 8 à quel degré, 4,5, 7, etc. Lorsque la barre suivante apparaît, la valeur de la ligne de signal de la deuxième barre à partir de la nouvelle barre peut déjà être normale. Tous les autres s'avèrent être corrects. Et dans la fenêtre de données, la valeur est également correcte. Je ne comprends pas pourquoi. Qu'est-ce que je fais de mal ?

J'ai le sentiment qu'il s'agit d'une double variable. Parce que la valeur dans la fenêtre de données est 0,000081, mais il s'avère 8,1....., la même chose j'ai remarqué avec une autre valeur - dans la fenêtre de données 0,000071, mais dans la variable 7,1..... Mais elles sont toutes définies comme des variables doubles.

Il n'y a pas 8 dans le commentaire, il y a une suite.

Сomment(DoubleToString(CtrlMACD)+" "+DoubleToString(CtrlSignalMACD)+" "+DoubleToString(PrevMACD)+" "+DoubleToString(PrevSignalMACD));
 
Vitaly Muzichenko #:

Il n'y en a pas 8 dans le commentaire, mais il y a une suite.

Merci. Cela le montre correctement. Une erreur stupide, bien sûr. Mais je me demande toujours pourquoi toutes les autres valeurs sont affichées normalement et qu'une seule est de travers.

 
Maksim Efimov #:

Merci. C'est la bonne façon de faire. Une erreur stupide, bien sûr. Mais je me demande toujours pourquoi toutes les autres valeurs sont affichées normalement et qu'une seule est de travers.

Il n'est pas tordu, il est correct au niveau de la machine, vous voyez qu'il y a "e-08" à la fin.

Par exemple, le nombre 1e-05 n'est pas une erreur mais0,00001.

Vous devez utiliser DoubleToString pour voir ce à quoi nous sommes habitués et le programme fonctionnera correctement de toute façon

Lire

Все калькуляторы
  • allcalc.ru
Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E. На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где: M — мантисса, E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»), p — порядок. Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания. Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква "E" в цифровом калькуляторе? Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.
 
Vitaly Muzichenko #:

Il n'est pas tordu, il est correct au niveau de la machine, voyez qu'il y a un "e-08" à la fin.

Par exemple, le nombre 1e-05 n'est pas une erreur, il est égal à0,00001.

Pour voir ce à quoi nous sommes habitués, vous devez utiliser DoubleToString, et le programme fonctionnera correctement de toute façon

Lire

Merci encore. Je vais le lire.

 
Dans mql4, OrderSend() renvoie immédiatement le résultat du traitement de l'ordre par le serveur commercial.
Dans mql5, une telle fonction doit être écrite par vous-même ?

 
Tretyakov Rostyslav #:

Je l'ai corrigé, maintenant ça marche. Bien sûr, ce n'est pas correct, mais ça marche.

{
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
                {
                 if(((NormalizeDouble((Bid - OrderOpenPrice()*Point),Digits) >= NormalizeDouble(((Bid - NormalizeDouble((iTrailStart * Point),_Digits))),_Digits) > OrderStopLoss() || OrderStopLoss()==0)));//true
                   {
                    if((OrderStopLoss() == 0.0 && NormalizeDouble(Bid - OrderStopLoss()* Point,Digits) < NormalizeDouble((Bid - NormalizeDouble((iTrailDist * Point),_Digits)),_Digits)));//true
                      {
                      if(iTrailStep > 0.0 && OrderStopLoss() >= 0.0 && NormalizeDouble(((Bid - OrderStopLoss() - iTrailDist * Point)),Digits) >= iTrailStep);//true
                        {
                         sl_lev = NormalizeDouble((Bid - iTrailDist * Point()),_Digits);
                         if(NormalizeDouble(Bid - sl_lev * Point,_Digits) < MarketInfo(Symbol(),MODE_STOPLEVEL));//false
                           {
                            if(!OrderModify(Forder,OrderOpenPrice(),NormalizeDouble(Bid - NormalizeDouble((iTrailStart * Point),_Digits),_Digits),tp,OrderExpiration()));
                            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
                           }
                        }
                      }
                   }
                }
             }

Il ne fixe pas les arrêts correctement, comment puis-je le réparer ?

 
Valeriy Yastremskiy #:

Et regardez dans le magazine pour voir ce qu'il s'avère être)

Au début, je n'ai rien écrit, puis j'ai commencé à regarder les séquences et il s'est avéré que c'était beaucoup.

Merci.

 
Alexander Avksentyev #:

Je l'ai corrigé, maintenant ça marche. Bien sûr, ce n'est pas juste, mais ça marche.

Il ne règle pas les arrêts correctement, comment le réparer ?

D'où proviennent ces données ?

OrderTakeProfit()
OrderProfit() + OrderSwap() + OrderCommission()
OrderOpenPrice()
OrderStopLoss()
 
Tretyakov Rostyslav #:

D'où proviennent ces données ?

Du mandat.

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
       {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
           if(OrderType() == OP_BUY) 
             {
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
 
secret du traitement de l'ordre par le serveur commercial.
Dans mql5, une telle fonction doit être écrite par vous-même ?

Types de transactions commerciales

Le MQL5 retournera aussi immédiatement

CommanderEnvoyer

Si l'ordre est accepté avec succès par le serveur commercial, la fonction OrderSend() renvoie true.