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

 
Lerchik:

Donc, ce que vous dites, c'est que l'ouverture d'un ordre au marché à Ask équivaut à l'ouverture d'un ordre BuyLimit.

Quelque chose ne va pas ici. Supposons que le cours acheteur soit égal à 1,4500. Ainsi, lorsque nous ouvrons un ordre d'achat sur le marché, il se situera au prix de l'offre et le prix de l'offre est, disons, de 10 points.

Ensuite, l'ordre se situera à 1.4510.

Maintenant l'ordre BuyLimit est égal à 1.4500. Et le prix tombe 10 points plus bas que le prix Ask sur Ask va ouvrir un ordre. Pas par l'offre mais par la demande.

Il ne s'emboîte pas du tout. Ce sont des choses différentes et on ne peut pas les comparer comme ça.

Peut-être que je me trompe ?

Tous les ordres d'achat sont ouverts par Ask et fermés par Bid, et vice versa pour les ordres de vente.

Si vous êtes trop paresseux pour le lire, ouvrez un compte de démonstration et entraînez-vous.

 
Сергей Таболин:

Pourquoi ne pas commencer par lire la documentation ?

Voici ce qui se trouve dans la documentation :

Ordre en attente

Un ordre en suspens est une instruction d'une société de courtage d'acheter ou de vendre un instrument financier à une date ultérieure à des conditions précises. Il existe les types suivants d'ordres en attente :

  • Limite d'achat- demande d'achat au prix Ask qui est égal ou inférieur à celui spécifié dans l'ordre. Le niveau de prix actuel est supérieur à la valeur de l'ordre. Habituellement, ce type d'ordre est placé dans l'espoir que le prix de l'instrument commencera à augmenter lorsqu'il aura atteint un certain niveau ;

Mais je ne comprends pas ce qui est écrit ici et comment cela fonctionne.

C'est-à-dire que le prix va tomber en dessous du bylimit et un Askom va ouvrir un ordre. Mais en même temps, l'ordre sera ouvert au même prix ou à un prix supérieur ?

Il n'y a rien à ce sujet nulle part. Il n'y a que des règles. Personne ici ne veut expliquer pourquoi.

J'essaie donc de réaliser quelque chose.

 
Lerchik:

Voici ce qui se trouve dans la documentation :

Ordre en attente

Un ordre en suspens est une instruction d'une société de courtage d'acheter ou de vendre un instrument financier à des conditions précises dans le futur. Il existe les types suivants d'ordres en attente :

  • Limite d'achat- demande d'achat au prix Ask qui est égal ou inférieur à celui spécifié dans l'ordre. Le niveau de prix actuel est supérieur à la valeur de l'ordre. Habituellement, ce type d'ordre est placé dans l'espoir que le prix de l'instrument commencera à augmenter lorsqu'il aura atteint un certain niveau ;

Mais je ne comprends pas ce qui est écrit ici et comment cela fonctionne.

C'est-à-dire que le prix va tomber en dessous du bylimit et un Askom va ouvrir un ordre. Mais en même temps, l'ordre sera ouvert au même prix ou à un prix supérieur ?

Il n'y a rien à ce sujet nulle part. Il n'y a que des règles. Personne ici ne veut expliquer pourquoi.

Donc, je veux réaliser quelque chose.

La BuyLimit peut être fixée UNIQUEMENT en dessous du prix Ask. La limite de vente peut UNIQUEMENT être fixée à un niveau supérieur au prix de l'offre.

Le BuyStop peut UNIQUEMENT être fixé au-dessus du prix Ask. Le SellStop peut UNIQUEMENT être fixé en dessous du prix de l'offre.

Lorsque le prix correspondant atteint l'ordre correspondant, celui-ci sera activé et la position correspondante sera créée.

 
Lerchik:

Voici ce qui se trouve dans la documentation :

Ordre en attente

Un ordre en suspens est une instruction d'une société de courtage d'acheter ou de vendre un instrument financier à des conditions précises dans le futur. Il existe les types suivants d'ordres en attente :

  • Limite d'achat- demande d'achat au prix Ask qui est égal ou inférieur à celui spécifié dans l'ordre. Le niveau de prix actuel est supérieur à la valeur de l'ordre. En général, ce type d'ordre est placé dans l'espoir que le prix de l'instrument commencera à augmenter lorsqu'il aura atteint un certain niveau ;

Mais je ne comprends pas ce qui est écrit ici et comment cela fonctionne.

C'est-à-dire que le prix va tomber en dessous du bylimit et un Askom va ouvrir un ordre. Mais en même temps, l'ordre sera ouvert au même prix ou à un prix supérieur ?

Il n'y a rien à ce sujet nulle part. Il n'y a que des règles. Personne ici ne veut expliquer pourquoi.

Donc je cherche quelque chose.

Ouvrez un compte de démonstration et entraînez-vous.

Lalimite d'achat est fixée en dessous du cours vendeur actuel et sera ouverte lorsque le coursvendeur sera inférieur .

Le Stop d'achat est fixé au-dessus du prix actuel de l' Ask et s'ouvrira lorsque l' Ask augmentera .

L'achat s'ouvre au cours vendeur actuel

 
MakarFX:

Ouvrez un compte de démonstration et entraînez-vous.

Lalimite d'achat est fixée en dessous du prix actuel de l'offre et s'ouvrira lorsquel'offre baissera .

Le Stop d'achat est fixé au-dessus du cours vendeur actuel et s'ouvrira lorsquele cours vendeur augmentera .

L'achat s'ouvre au cours vendeur actuel

C'est quelque chose.

Continuons...

Ok, le prix Bid est tombé en dessous du prix Ask et l'Ask ouvre l'ordre. Mais le prix de la commande restera-t-il le même que celui qui a été fixé dans la commande ou sera-t-il différent ?

 
Lerchik:

C'est quelque chose.

Continuons...

OK, le cours acheteur est tombé en dessous du prix de l'ordre et l'Ascom a ouvert l'ordre. Mais le prix de la commande restera-t-il le même que celui qui a été fixé dans la commande ou sera-t-il différent ?

1 Le prix de l'Ask devrait tomber au prix de la "Odds".

2 Le prix reste

 
MakarFX:

1 Le prix ascendant devrait tomber au prix de la pause.

2 Le prix reste

Merci beaucoup pour cette clarification.

Je me demandais pourquoi ça ne fonctionnait pas comme je le voulais.

 

Bonjour à tous.

D'après ce que j'ai compris des réponses à ma question précédente, je dois juste gérer les erreurs qui peuvent se produire lors de l'ouverture des commandes, c'est la première chose. Deuxièmement, je dois empêcher l'EA de planter le serveur à chaque tick en cas d'erreur.

Première question, dites-moi comment faire la gestion des erreurs ?

Deuxième question : comment se protéger des coups de boutoir du serveur ?

Maintenant, mes transactions sont ouvertes comme ceci

   /*УСЛОВИЕ 1*/
   if(flag_screen1==en_vbIkl_screen1 &&flag_screen2==en_vbIkl_screen2)
   { // НАЧАЛО УСЛОВИЕ 1
   if(ao_buy!=EMPTY_VALUE && count_orders_market_buy ==0)
   {
    if(OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,comment_ao_market_buy)) Print("Buy Open"); // ОТКРЫВАЕМ БАЙ ОРДЕР
   }
   } // КОНЕЦ УСЛОВИЕ1

// И ОТЛОЖКИ ВОТ ТАК

   /*УСЛОВИЕ 1*/
   if(flag_screen1==en_vbIkl_screen1 &&flag_screen2==en_vbIkl_screen2)
   { // НАЧАЛО УСЛОВИЕ 1
   
   if(ao_buy!=EMPTY_VALUE && count_orders_stop_buy ==0&& max_Price>Bid)
   { //НАЧАЛО ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   
   Print("БАЙ СТОП AO УСЛОВИЕ 1");
        if( OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,Magik_number,TimeCurrent()+order_life_time))Print("BUY_STOP OPEN"); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР
   
   }  //КОНЕЦ ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   } // КОНЕЦ УСЛОВИЕ1



La variable Count Market Buy est calculée à l'aide de cette fonction

         void data_orders(string comment="alt",int magik_number=123)
              {
         int I = 0;
   count_orders_all = 0;   //КОЛИЧЕСТВО ВСЕХ УСТАНОВЛЕННЫХ ОРДЕРОВ
   count_orders_market_all = 0; //КОЛИЧСТВО ВСЕХ РЫНОЧНЫХ ОРДЕРОВ
   count_orders_market_buy = 0;
   
   count_orders_stop_buy = 0;    //КОЛИЧЕСТВО СТОП БАЕВ
   count_orders_limit_buy = 0;   // КОЛИЧЕСТВО ЛИМИТ БАЕВ
   
   count_orders_stop_sell = 0;    //КОЛИЧЕСТВО СТОП СЕЛОВ
   count_orders_limit_sell = 0;   //КОЛИЧЕСТВО ЛИМИТ СЕЛОВ
   
   
  lot_orders_buy = 0;    //ОБЪЁМ ЛОТА ПО БАЙ ОРДЕРАМ
         lot_orders_sell = 0;      //ОБЪЁМ ЛОТА ПО СЕЛЛ ОРДЕРАМ
         balance_all = 0;          // БАЛАНС ПО ВСЕМ ОРДЕРАМ
         balance_buy = 0;         // БАЛАНС ПО ОРДЕРАМ БАЙ
         balance_sell = 0;        // БАЛАНС ПО ОРДЕРАМ СЕЛЛ
         
         
         
          for(int i = 0; i <= OrdersTotal();i ++) // перебор всех ордеров в цикле
          {
  
   if(OrderSelect(I , SELECT_BY_POS, MODE_TRADES))// выбираем ордер по переменной цикла
   {
    if(OrderMagicNumber() != magik_number || OrderSymbol() !=Symbol()) // если ордер не нашь то
    {
    continue; // переходим на следующую итерацию
    
    }
    if(comment== OrderComment() || comment=="alt")// если коментарий нашь то 
    {
    count_orders_all+=1;
    if(OrderType()== OP_BUY)
    {
    count_orders_market_all+=1;
    count_orders_market_buy+=1;
    }
    if(OrderType()== OP_SELL)
    {
    count_orders_market_all+=1;
    count_orders_market_sell+=1;
    }
    if(OrderType()== OP_BUYSTOP)
    {
    count_orders_stop_buy+=1;
    }
    if(OrderType()== OP_BUYLIMIT)
    {
    count_orders_limit_buy+=1;
    
    }
    if(OrderType()== OP_SELLSTOP)
    {
    count_orders_stop_sell+=1;
    
    }
    if(OrderType()== OP_SELLLIMIT)
    {
    count_orders_limit_sell+=1;
    
    }
    
    
    
    }
         
         
              }
              }
              }

Si je veux trader avec un serveur réel, j'aimerais savoir comment éviter le bavardage du serveur en cas d'erreurs.

 
DanilaMactep:

Bonjour à tous.

Veuillez m'écrire pour me dire comment gérer correctement les erreurs et comment éviter que le serveur sonne à chaque tic lorsqu'une erreur se produit.
if (GetLastError()==141){Alert(GetLastError()); ExpertRemove();}
 
MakarFX:

Et cette requête devrait être écrite après chaque ligne dans laquelle il y a une tentative d'ouvrir un ordre en utilisant Ordersend - n'est-ce pas ?

Mais j'ai une question : si l'opération de suppression de l'EA a supprimé l'EA du graphique, comment faire pour qu'il se rattache automatiquement au graphique et continue à fonctionner ? Pourriez-vous décrire le problème plus en détail - erreur 141 - trop de demandes. S'il y a trop de demandes, nous supprimons l'EA du graphique. Que dois-je faire ensuite - attendre de me lever le matin, tout changer et venir au PC pour attacher à nouveau l'EA au graphique ?

Raison: