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

 
Aleksey Mavrin:

s'agit-il du testeur ou de la version en ligne ?

Si vous êtes en ligne - regardez le code, quelque part l'événement de déplacement n'est pas acheminé normalement. Les panneaux d'ailleurs sur le site seulement cinq bibliothèques différentes, qu'est-ce que vous voulez dire ?

Et dans le testeur - il semble qu'il n'y ait aucun moyen, et pourquoi.

Après avoir envoyé des commandes de déplacement à TOUS les objets du panneau, faites ChartRedraw().
 
Aleksey Mavrin:

s'agit-il du testeur ou de la version en ligne ?

Si vous êtes en ligne - regardez le code, quelque part l'événement de déplacement n'est pas acheminé normalement. Les panneaux d'ailleurs sur le site seulement cinq bibliothèques différentes, qu'est-ce que vous voulez dire ?

Et dans le testeur - il semble qu'il n'y ait aucun moyen, et pourquoi.

Nous parlons de l'Internet. Je n'en ai vraiment pas besoin dans le testeur. Je ne suis pas sûr des bibliothèques - je ne suis pas un expert en programmation. Je viens de prendre un code de bouton prêt à l'emploi dans la référence MQL5.

Je l'ai déjà fait mais je n'ai pas eu d'erreur, je ne peux pas encore le réparer. Apparemment, c'est la raison pour laquelle la position du bouton est mise à jour au prochain tick. Je ne comprends pas comment faire bouger les boutons en même temps que le fond.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Artyom Trishkin:
Après avoir envoyé des commandes de déplacement à TOUS les objets du panneau, faites ChartRedraw().
J'ai essayé comme ça, mais ça n'a pas marché.
   ObjectSetInteger(0, "Buy",            OBJPROP_XDISTANCE, x + 2);
   ObjectSetInteger(0, "Buy",            OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
  
   ObjectSetInteger(0, "Sell",           OBJPROP_XDISTANCE, x + 74);
   ObjectSetInteger(0, "Sell",           OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
 
Aidez-moi à comprendre. J'ai un code pour un panneau de négociation qui ouvre un ordre d' achat stop en attente avec un suivi ultérieur si l'ordre ne se déclenche pas. L'ordre est ouvert mais il n'est pas modifié. Il n'y a pas d'erreurs dans le journal et nous n'avons vu aucune tentative de modification de l'ordre. J'ai essayé de retracer dans le journal à quel stade une erreur se produit en utilisant la fonction :
.
Print("Ордер Выбран!");

Il suffit de l'insérer après chaque condition if.

En conséquence, j'ai découvert que la fonction :

 for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  

La commande est sélectionnée avec succès, mais siPrint("Order Selected !") ; estinséré après ce code:

if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOp
en())

alors une erreur se produit :

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl : 1.12023 tp : 1.12275 -> 1.00000, sl : 1.00000 tp : 1.00000 [Prix invalide].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend : modifier #2 à 1.00000 (sl : 1.00000 tp : 1.00000) [prix invalide]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification échouée ! Résultat Retcode : 10015, description du Retcode : prix invalide

J'utilise le même code dans un autre EA pour l'autotrading (la seule différence est l'absence d'un tel code) :

ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true


) et je n'ai aucun problème. Les commandes sont ouvertes et modifiées sans aucun problème.

Voici le code lui-même :

     double Ask          = NormalizeDouble(PriceInformation_High_Buy[HighestCandle_High_Buy].high, _Digits) + indent; // максимум самой высокой свечи плюс отступ
     double sl_buy       = NormalizeDouble(PriceInformation_Low_Buy[LowestCandle_Low_Buy].low, _Digits) - indent;     // минимум самой низкой свечи минус отступ  
     double tp_buy       = Ask + ((Ask - sl_buy) * Профит_фактор);                                                    // количество стопов лоссов 
     
     if  (OrdersTotal()==0 && PositionsTotal()==0 &&                                         // проверка на наличие открытых позиций и ордеров
     ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true)                                 // проверка состояния кнопки
                                                                                             
     {
        atrade.BuyStop(Lots, Ask, _Symbol, sl_buy, tp_buy, ORDER_TIME_GTC, 0, "My comment"); // посылаем ордер Buy Stop
        ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                               // отжимаем кнопку
     }

     else

     ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                                  // отжимаем кнопку
       
//---Трейлинг Buy Stop---------------------------------------------------------------------------------------------------------------------------//     
      
        for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))                                                                      // выбираем ордер 
       
            if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen()) // проверяем символ, мэджик номер, цену
               
              {
                 if(aorder.OrderType()==ORDER_TYPE_BUY_STOP)
                 Print("Ордер Выбран!"); 
                 if(aorder.PriceCurrent()<aorder.PriceOpen())
                 
                    {
                     if(atrade.OrderModify(aorder.Ticket(),
                        asymbol.NormalizePrice(Ask),
                        asymbol.NormalizePrice(sl_buy),
                        asymbol.NormalizePrice(tp_buy),
                        aorder.TypeTime(),
                        aorder.TimeExpiration()))
                        Print("Модификация BUY STOP прошла успешно! Тикет ордера = ",atrade.ResultOrder());
                     else
                        Print("Модификация BUY STOP прошла с ошибкой! Result Retcode: ",atrade.ResultRetcode(),
                              ", description of Retcode: ",atrade.ResultRetcodeDescription());
                    }
              }

S'il vous plaît, dites-moi quelle est mon erreur ?

 
Mikhail:

Il s'agit de l'Internet. Je n'en ai vraiment pas besoin dans le testeur. Je ne peux pas répondre à la question sur les bibliothèques, je suis complètement nul en programmation. Je viens de prendre un code de bouton prêt à l'emploi dans la référence MQL5.

Je l'ai déjà fait mais je n'ai pas eu d'erreur, je ne peux pas encore le réparer. Apparemment, c'est la raison pour laquelle la position du bouton est mise à jour au prochain tick. Je ne comprends pas comment faire bouger les boutons avec l'arrière-plan.

Et comment avez-vous déterminé que c'est sur le prochain tic et non sur celui-là ?).

 
Mikhail:
Aidez-nous à comprendre. J'ai un code pour le panneau de trading pour ouvrir un ordre d' achat stop en attente suivi d'un ordre de suivi si l'ordre échoue. L'ordre est ouvert mais il n'y a pas de modification de l'ordre. Aucune erreur n'apparaît dans le journal et nous n'avons pas non plus de tentative de modification de l'ordre. J'ai essayé de retracer dans le journal à quel stade une erreur se produit en utilisant la fonction :
.

Il suffit de l'insérer après chaque condition if.

En conséquence, j'ai découvert que la fonction :

La commande est sélectionnée avec succès, mais siPrint("Order Selected !") ; estinséré après ce code:

alors une erreur se produit :

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl : 1.12023 tp : 1.12275 -> 1.00000, sl : 1.00000 tp : 1.00000 [Prix invalide].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend : modifier #2 à 1.00000 (sl : 1.00000 tp : 1.00000) [prix invalide]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification échouée ! Résultat Retcode : 10015, description du Retcode : prix invalide

J'utilise le même code dans un autre EA pour l'autotrading (la seule différence est l'absence d'un tel code) :


) et je n'ai aucun problème. Les commandes sont ouvertes et modifiées sans aucun problème.

Voici le code lui-même :

Pouvez-vous me dire quelle est mon erreur ?

De toute évidence, Normalize ne fonctionne pas correctement. Désimprimer asymbol.Digits() asymbol.TickSize(),. Point() vérifier .

 

Bonne journée à tous. J'ai rencontré ce problème lors de l'accès de l'EA à la DLL :

Impossible de charger 'C:\....\shablon.dll' [487]

L'erreur 487 semble signifierERROR_INVALID_ADDRESS mais le chemin vers la bibliothèque est correct. En fait, j'ai déjà mis cette dll dans tous les dossiers, cela n'aide pas.

Qu'est-ce que ça peut être ? Je vous serai reconnaissant de m'aider.


P.S. Au début cette dll était pour 32 bit et fonctionnait dans mt4*86. Je l'ai recompilé pour 64 bit, je l'ai mis sur mt5*64 maintenant et j'ai de tels problèmes.



 
Aleksey Mavrin:

Comment savoir ce qu'il y a sur le prochain tic-tac et pas sur celui-là ?).

Jusqu'à ce que le nouveau tic arrive, il n'y a pas de mouvement des boutons. C'est ce que je peux voir avec mes yeux. Dès que le prix change, les boutons bougent.

Aujourd'hui, cependant, même sur le nouveau tick, les boutons ont cessé de se redessiner, bien que je n'aie rien changé. Seul l'arrière-plan bouge.
 
Aleksey Mavrin:

Apparemment Normalize ne fonctionne pas correctement. arrondit à un. Désimprimer asymbol.Digits() asymbol.TickSize(),. Point() vérifier .

Quand je fais une requête comme celle-ci :

Print("Symbol ", _Symbol, " Digits ", _Digits, " Point ", Point());

J'obtiens ce résultat :

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Symbole EURUSD_i Chiffres 5 Point 1e-05

Quand je fais une demande comme celle-ci :

Print("Symbol ",aorder.Symbol(), " Digits ", asymbol.Digits(), " Point ", asymbol.TickSize());

J'obtiens ce résultat :

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Symbole EURUSD_i Chiffres 0 Point 0.0

En même temps, je veux noter que si je n'insère pas la fonction Print, je n'obtiens aucune erreur, l'ordre n'essaie même pas de se modifier. C'est comme si CTrade ne voyait pas mon ordre.

La vérification du symbole et du numéro magique ne fonctionne pas :

Print("Symbol ", asymbol.Name(), " Magic ", aorder.Magic(), " Ticket ", aorder.Ticket()); 

Résultat :

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2

Le numéro magique doit être 12345, le symbole est euro dollar.

Pourquoi je ne peux pas avoir le symbole et le medgic ?

Si vous changez la chaîne de caractères :

aorder.Symbol()==asymbol.Name()

est changé en

aorder.Symbol()==_Symbol

et supprimer la validation par numéro magique, alors nous avons des problèmes avec les prix.

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl : 1.12023 tp : 1.12275 -> 1.00000, sl : 1.00000 tp : 1.00000 [Prix non valide].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend : Modifier #2 à 1.00000 (sl : 1.00000 tp : 1.00000) [prix invalide].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification échouée ! Résultat Retcode : 10015, description du Retcode : prix invalide

Je me suis déjà creusé la tête, alors que ce même code fonctionne bien dans un autre conseiller expert.

Qu'est-ce que je fais de mal ?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна. Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно...
 
dozolov:

Bonne journée à tous. J'ai rencontré ce problème lors de l'accès de l'EA à la DLL :

Impossible de charger 'C:\....\shablon.dll' [487]

L'erreur 487 semble signifierERROR_INVALID_ADDRESS mais le chemin vers la bibliothèque est correct. En fait, j'ai déjà mis cette dll dans tous les dossiers, cela n'aide pas.

Qu'est-ce que ça peut être ? Je vous serai reconnaissant de m'aider.


P.S. Au début cette dll était pour 32 bit et fonctionnait dans mt4*86. Je l'ai recompilé pour 64 bits et maintenant je le mets sur mt5*64 et j'ai de tels problèmes.



ERROR_INVALID_ADDRESS ne concerne pas le chemin. Vous passez les mauvais arguments.

Raison: