Questions d'un "mannequin - page 166

 
Alphazavr:

Quel est le problème avec le code. Pourquoi le message d'erreur"failed cancel order #0 buy 0.00 at market [Invalid request]" continue-t-il d'apparaître ?

Où se trouve la sélection des positions?

Qu'est-ce que les ordres ont à voir avec les transactions ?

Qu'essayez-vous de faire ? Fermer une position ?


et le nom de la requête order_remove_mql_trade_request est un mauvais rêve.

 
sergeev:

où se trouve la sélection de la position?

qu'est-ce que les ordres ont à voir avec les transactions ?

Qu'essayez-vous de faire de toute façon ? Fermer une position ?


et le nom order_remove_mql_trade_request est un mauvais rêve.

Oui, je dois clarifier.

Le but du code -- s'il y a une position ouverte, alors annuler tous les ordres limites de la même direction que la position.

par exemple, si une position est ouverte BAY. alors annulez tous les ordres comme la limite d'achat.

J'ai oublié de sélectionner la position =). Eh bien, l'erreur ne vient pas de cela (vérifié).

 
Alphazavr:

Quel est le problème avec le code. Pourquoi les erreurs"failed cancel order #0 buy 0.00 at market [Invalid request]" continuent-elles d'apparaître ?


   MqlTradeRequest order_remove_mql_trade_request = {0};
   order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;

   i = OrdersTotal();
   if(i > 0){
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


supprimer ces égaux.
 
sergeev:
enlève ces signes égaux.
Je l'ai déjà fait, ça ne marche pas. Je ne sais pas où se trouve l'erreur. De plus, je ne comprends pas pourquoi ces erreurs ne concernent que les ordres BAY LIMIT, il n'y a pas d'erreurs avec les Sell Limits.
 
Alphazavr:
Je l'ai déjà fait, ça ne marche pas.
Ce n'est pas bien de tromper ses aînés.
 
sergeev:
Ce n'est pas bien de tromper ses aînés.

Ce n'est pas bien de tricher. Je ne fais pas ça.


Je viens de tout revérifier avec ce code :

   i = OrdersTotal();
   if(i > 0){
      PositionSelect(_Symbol);
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


Le résultat est le même. L'erreur mentionnée ci-dessus se produit souvent

 
Alphazavr:

le résultat est le même. L'erreur se produit souvent

"souvent" est une phrase vide de sens.

Vous pensez que 2+2 est souvent égal à 4 ?

ne soyez pas paresseux - faites une analyse d'envoi et une analyse de l'erreur retournée.

vérifier ce que vous essayez d'enlever ?

y a-t-il des commandes disponibles au moment de la fermeture ?

vous essayez peut-être de supprimer une commande qui a déjà été supprimée.


Troisièmement, qui vous a appris à fermer les ordres au point de penser que vous pouvez fermer tous les ordres ? Vous pensez qu'après chacun de vos fermetures, le OrdersTotal diminuera de 1. Et vous continuez à battre votre i2++ jusqu'à ce que vous gagniez, jusqu'au i primaire.

Vous ne prenez même pas la peine de vérifier si OrderGetTicket ou OrderSelect renvoie une erreur.

mauvais, très mauvais.

C'est à cause de tels stylos que nos satellites sortent de leur orbite.

 
sergeev:

"souvent" est une phrase vide de sens.

Vous pensez que 2+2 est souvent égal à 4 ?

ne soyez pas paresseux - faites une analyse des envois et une analyse des erreurs de retour.

vérifier ce que vous essayez de supprimer ?

Y a-t-il des commandes disponibles au moment de la fermeture ?

vous essayez peut-être de supprimer une commande qui a déjà été supprimée.


Troisièmement, qui vous a appris à clôturer les ordres de cette manière ? Vous pensez que vous passez tous les ordres, mais ce n'est pas le cas. Après chacune de vos clôtures, OrdersTotal diminue de 1. Et vous battez toujours votre i2++ jusqu'à ce que vous gagniez, jusqu'au i primaire.

Vous ne prenez même pas la peine de vérifier si OrderGetTicket ou OrderSelect renvoie une erreur.

C'est mauvais, très mauvais.

C'est à cause de tels stylos que nos satellites sortent de leur orbite.

J'étais sûr que ce n'était pas cela, sinon il y aurait eu des erreurs dans le test non seulement avec les bylimits, mais aussi avec les selllimits. Merci d'essayer de m'aider et de me guider.

 

Salutations messieurs.

Il s'agit du prototype d'une fonction Windows qui émule une frappe :

VOID WINAPI keybd_event(__in  BYTE bVk,               // Тип BYTE, занимает 1 байт
                        __in  BYTE bScan,             // Тип BYTE, занимает 1 байт
                        __in  DWORD dwFlags,
                        __in  ULONG_PTR dwExtraInfo
);

Le problème est que cette fonction est appelée dans MT4 avec des int au lieu d'octets. Ça ressemble à ça :

void keybd_event(int bVk,                 // Тип int, занимает 4 байта
                 int bScan,               // Тип int, занимает 4 байта
                 int dwFlags,
                 int dwExtraInfo);
Quel est le problème ? Transmet-il au moins 4 octets ? Cela dépend-il du matériel ?
 
220Volt:

Salutations messieurs.

Il s'agit du prototype d'une fonction Windows qui émule une frappe :

Le problème est que cette fonction est appelée dans MT4 avec des int au lieu d'octets. Ça ressemble à ça :

Quel est le problème ? Transmet-il au moins 4 octets ? Cela dépend-il du matériel ?

Lors du passage de paramètres à une fonction, le quantum minimum est un entier de 32 bits. C'est-à-dire que, dans votre cas, bVk et bScan seront convertis en type int avant d'être passés dans la fonction

C'est pourquoi les prototypes de fonction donnés ci-dessus ne se contredisent pas entre eux

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5