Erreurs, bugs, questions - page 1550

 
Des records d'interdictions. Pendant les interdictions, je reçois des réponses sur le forum, mais je ne peux que les lire. Et après la levée d'une autre interdiction, il est très difficile de se rappeler qui et où a répondu pour continuer. Est-il possible de résoudre ce problème (sans conseil pour ne plus être banni) ? Et en général, il arrive que l'on lise, mais que l'on n'ait pas le temps de répondre tout de suite. Est-il possible de définir un drapeau de rappel pour "répondre plus tard" ?
 
comp:
Des records d'interdictions. Pendant les interdictions, je reçois des réponses sur le forum, mais je ne peux que les lire. Et après la levée d'une autre interdiction, il est très difficile de se rappeler qui et où a répondu pour continuer. Est-il possible de résoudre ce problème (sans conseil pour ne plus être banni) ? Et en général, il arrive que l'on lise, mais que l'on n'ait pas le temps de répondre tout de suite. Est-il possible de définir un drapeau de rappel pour "répondre plus tard" ?
Il faut d'abord penser, puis agir. Et non l'inverse. Il n'y aura alors aucun problème de mémoire.
 
Karputov Vladimir:
Il faut d'abord penser et ensuite agir. Et non l'inverse. Il n'y aura alors aucun problème de mémoire.
Des mots d'or ! !!
 
Vladimir Pastushak:
Des mots en or ! !!
Entièrement pris en charge ! !! Est-il possible de répondre à la question-suggestion
comp :
Parfois, vous le lisez et n'avez pas le temps de répondre tout de suite. Est-il possible de se mettre une sorte de drapeau de rappel pour "répondre plus tard" ?
 
comp:
Est-il possible de se mettre un drapeau de rappel pour "répondre plus tard" ?
Je vous comprends en partie. Tout le monde veut une solution à ses problèmes immédiats. Dans votre cas, c'est trop. Vous, même assis dans une salle de bain, vous essayez d'édifier les développeurs.
 

Question sur MathRound() dans MQL4, qui "renvoie une valeur arrondie à l'entier le plus proche d'une valeur numérique spécifiée".

Code :

#property strict
void OnStart()
  {
   Print("1) MathRound(10.50001) = ",MathRound(10.50001));  // 11.0
   Print("2) MathRound(10.49999) = ",MathRound(10.49999));  // 10.0
  }

Résultat :


Pouvez-vous nous expliquer pourquoi c'est le cas ? Si cela doit être ainsi, veuillez ajouter dans la documentation que seul le premier chiffre après le point est pris en compte.

MathRound - Математические функции - Справочник MQL4
MathRound - Математические функции - Справочник MQL4
  • docs.mql4.com
MathRound - Математические функции - Справочник MQL4
 

Chers collègues, aidez-nous s'il vous plaît. Je n'ai pas assez de cervelle à moi.

Le robot, qui a placé des ordres Limit, doit supprimer l'ordre restant lors de la fermeture d'une position ouverte (peu importe s'il est au stop ou au profit), mais pas tous les ordres, mais celui dont le nombre magique est égal au ticket de la position fermée. Ainsi, le déclencheur de la suppression doit être l'événement de fermeture de la position. Pour moi, cela n'a pas d'importance dans ce cas, comment cette position a été fermée (juste par condition, il s'avérera que si la fermeture par SL, alors il n'y a pas de limites, qui doivent être supprimées). Mais si nous détaillons et faisons bien les choses, le déclencheur est un TP.

Ainsi, le robot supprime l'ordre, mais pas après la fermeture de la position, mais dès son ouverture. Et il commence à se battre lui-même en plaçant et ensupprimant constammentles ordres en attente. S'il vous plaît, voyez ce qui ne va pas.

input double   lot                  = 0.2;
input double   TakeProfitPips       = 50;
input double   StopLossPips         = 200;

int               bar=0;
int               shift=1;
int               tiket;
int               otkt;
double            price;
int               cnt;
double            TPp,SLp;
int               tkt;
int               n;
int               type;

    int _OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на текущий тик
    int now_OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на предыдущий тик
    static int pre_OrdersTotal = 0;
    // массив открытых позиций состоянием на текущий тик
    int now_OrdersArray[][2]; // [№ в списке][№ тикета, тип позиции]
    // текущий номер позиции в массиве now_OrdersArray (для перебора)
    int now_CurOrder = 0;
    // текущий номер позиции в массиве pre_OrdersArray (для перебора)
    int pre_CurOrder = 0;
    // массив для хранения количества закрытых позиций каждого типа
    int now_ClosedOrdersArray[6][3]; // [тип ордера][тип закрытия] 
 
    // временные флаги
    bool OrderClosed = true, PendingOrderOpened = false;
    // временные переменные
   

    int pre_OrdersArray[][2]; // [количество позиций][№ тикета, тип позиции]
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }


void OnTick()

  {

        if(OrdersTotal()== 0 && iTime(Symbol(),PERIOD_M1,1)==D'14.01.16 16:30')

        {
        
         price=Open[shift];

         tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot,price,3,price+StopLossPips*Point,price-TakeProfitPips*Point);
         if(tiket<0)
           {
            Print("Ошибка OrderSend № - ",GetLastError());
           }
        }

     

   if(OrdersTotal()!=0)
     {
      for(cnt=0; cnt<OrdersTotal(); cnt++)

         OrderSelect(cnt,SELECT_BY_POS); // Если есть следующий
        {                                    // Анализ ордеров:
         price=OrderOpenPrice();
         otkt = OrderTicket();
         n=otkt;
         //--------------------------------------------------------------

 
         if(OrderType()==OP_SELL && OrderMagicNumber()==0)

           {
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*3,price+100*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*9,price+200*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
           }
        }

     }

  
        _OrdersTotal = OrdersTotal(); // запоминаем общее количество позиций
        ArrayResize( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-во
        ArrayInitialize( now_OrdersArray, 0.0 ); // обнуляем массив
        now_OrdersTotal = 0; // обнуляем количество позиций, соответствующих критериям
        ArrayInitialize( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров
       
 
        //+------------------------------------------------------------------+
        //| Перебираем все позиции и записываем в массив 
        //+------------------------------------------------------------------+
        for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
           
            {
                now_OrdersArray[now_OrdersTotal][0] = OrderTicket();
                now_OrdersArray[now_OrdersTotal][1] = OrderType();
                now_OrdersTotal ++;
            }
        }
        
        ArrayResize( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям
 
        //+------------------------------------------------------------------+
        //| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и
        //| сработало отложенных ордеров
        //+------------------------------------------------------------------+
        for ( pre_CurOrder = 0; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
        {
            tkt = pre_OrdersArray[pre_CurOrder][0]; // запоминаем тикет и тип ордера
            type   = pre_OrdersArray[pre_CurOrder][1];
            
            OrderClosed = true; // предпологаем, что если это позиция, то она закрылась
           
            for ( now_CurOrder = 0; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
            {
                if ( tkt == now_OrdersArray[now_CurOrder][0] ) // если позиция с таким тикетом есть в списке,
                {   OrderClosed = false; // значит позиция не была закрыта (ордер не был удалён)
                    break;
                }
            }
           
            if ( OrderClosed )  // если была закрыта позиция (удалён ордер),
            {
                
                if (OrderSelect( tkt, SELECT_BY_TICKET )) // выбиаем ее
               
                    n = tkt; // присваеваем n номер тикета
                
            }   
      }  
     
        //+------------------------------------------------------------------+
        //| Удаляем ордер с магическим номером = тикету закрытой ранее позиции 
        //+------------------------------------------------------------------+
     for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
            otkt = OrderTicket();
            if (n == OrderMagicNumber ())
             {OrderDelete( otkt );}
         }
         
         return;
      }
Помогите отредактировать код, пожалуйста
Помогите отредактировать код, пожалуйста
  • www.mql5.com
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
Pouvez-vous me dire s'il existe un mécanisme intégré pour déterminer sur quel marché le robot de trading fonctionne, vous devez identifier les marchés FOREX et FORTS.
 

Aide, les gars, ne peut pas mettre la langue russe sur MT4 sur Macbook, il semble être présent, mais il est affiché en hiéroglyphes, mais dans l'éditeur méta est très bien. J'ai tout construit avec Play on mac,

Wine 1.9.4 serait très apprécié.

 
Savervvv:

Aide, les gars, ne peut pas mettre la langue russe sur MT4 sur Macbook, il semble être présent, mais il est affiché en hiéroglyphes, mais dans l'éditeur méta est très bien. J'ai tout construit avec Play on mac,

Wine 1.9.4 serait très apprécié.

Mettre à jour ou installer les polices de caractères sur l'analogue Windows...