[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 434

 
Est-il possible de calculer les fonds propres minimums en utilisant les données historiques des commandes ?
 
forexnew:
Est-il possible de calculer l'équité minimale en utilisant les données historiques des commandes ?
.


Comprenez une chose - qu'est-ce qui est spécifié dans "données historiques des commandes" ??? Vous êtes intéressé par le prix de clôture, qu'il s'agisse d'un profit ou d'une perte pour l'ordre sélectionné... ? Et alors ? L'historique des ordres n'indique pas le montant de la réduction des capitaux propres du compte (la perte actuelle) lorsque l'ordre était sur le marché, c'est-à-dire que la perte à la clôture peut s'élever à, disons, 500 unités de la devise mais elle serait indiquée dans l'historique des ordres alors que les capitaux propres pourraient avoir diminué à -1000 unités de la devise lorsque l'ordre était sur le marché. Veuillez noter que le testeur de stratégie calcule les pertes sur fonds propres.

La réponse à votre question : vous ne pouvez pas.

 
LOA:

Bonne journée !

L'aide des professionnels - je ne vais nulle part sans vous !

J'ai déjà abordé cette question, mais je n'ai pas trouvé l'erreur, je voulais vraiment la comprendre moi-même, je me suis creusé la tête pendant quelques jours, mais jusqu'à présent pas beaucoup d'expérience.

La discussion précédente s'est terminée par l'idée que la raison se trouve peut-être dans le code des indicateurs que j'essaie d'utiliser.

J'ai écrit un indicateur (c'est mon premier pas) qui affiche la répartition de ME_Proboy_F5.

Le problème est le suivant : ..... L'indicateur ne se redessine pas lorsque de nouvelles barres sont formées et il est remis à zéro sur la dernière barre après la réception d'un tick. Il est redessiné si vous modifiez le tf ou affichez les propriétés.

L'indicateur demande des données à d'autres indicateurs, tous sauf un ME_Proboy_F_5 (je place son code aussi) fonctionne bien. Je ne trouve pas non plus d'erreur dans le deuxième indicateur. L'indicateur est redessiné, mais il est lent, c'est-à-dire qu'il s'affiche correctement au deuxième redémarrage (modifiez les propriétés FF ou d'affichage).

Je vous serais très reconnaissant de m'aider.

Proboy_Order_F5 - c'est l'indicateur principal, sur lequel je pose la question

ME_Proboy_F5 - le second, qui est douteux.


Je suis désolé de vous importuner avec ma question, mais je veux vraiment aller au fond des choses.

L'application de la fonction limit=MathMin(Bars-1, Bars-counterd_bars-1) n'a pas résolu le problème, mais j'ai suivi les recommandations, travaillé sur le style de programmation, j'espère que cela a fonctionné, je me suis débarrassé des variables inutiles.

Voir ci-dessus pour l'essence du problème

 
Roman.:


Il y a une chose que vous devez comprendre : qu'est-ce qui est spécifié dans "données historiques des commandes" ? Êtes-vous intéressé par le prix de clôture, le profit ou la perte sur un ordre sélectionné... ? Et alors ? L'historique des ordres n'indique pas le montant de la réduction des capitaux propres du compte (perte actuelle) lorsque l'ordre était sur le marché, c'est-à-dire que la perte à la clôture peut s'élever à, disons, 500 unités de la devise mais elle serait indiquée dans l'historique des ordres alors que les capitaux propres pourraient avoir diminué à -1000 unités de la devise lorsque l'ordre était sur le marché. Remarque : le testeur de stratégie calcule la perte sur fonds propres.

La réponse à votre question : vous ne pouvez pas.

Cependant, il existe un indicateur https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip où les fonds propres sont en quelque sorte calculés sur la base de données historiques. Je n'ai pas encore trouvé comment le faire. Peut-être que l'équité peut être calculée sur la base de points clés (clôtures de commandes) mais comment cela se présente-t-il sous la forme d'une formule unique ?

 

Voici le code avec la condition que les ordres doivent être supprimés après l'expiration du temps, c'est la condition

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Alors, pourquoi, si nous insérons cette condition dans le premier opérateur if, l'autre opérateur situé à l'intérieur ne prend pas en compte cette condition ?

C'est-à-dire que ce code ne fonctionne pas et supprime tous les ordres en attente en une seule fois.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

Et ce code fonctionne et ne supprime pas les commandes en une seule fois.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 
sss2019:

Voici le code avec la condition que les commandes doivent être supprimées après l'expiration du temps, voici la condition

Alors, pourquoi, si nous insérons cette condition dans le premier opérateur if, l'autre opérateur situé à l'intérieur ne prend pas en compte cette condition ?

C'est-à-dire que ce code ne fonctionne pas et supprime tous les ordres en attente en une seule fois.

Et ce code fonctionne et ne supprime pas les commandes en une seule fois.

Les deux codes ne sont pas corrects, j'analyse donc votre code et je ne sais pas ce qui est correct/incorrect.

Prenons l'exemple le plus simple. Vous avez 2 commandes qui doivent être supprimées.

1) for(int counter=0;counter<OrdersTotal();counter++)

le début d'un bon 0 est inférieur à deux et le premier ordre est retiré en toute sécurité, mais alors

2)

 for(int counter=0;counter<OrdersTotal();counter++)

compteur = 1, mais il ne reste qu'un seul ordre ! Cela signifie que la condition (1<1) n'est pas remplie, et la boucle se termine...

 
ilunga:

Notez que les deux codes ne sont pas corrigés, donc je ne sais pas ce qui fonctionne bien/mal pour vous.

Prenons l'exemple le plus simple. Vous avez 2 commandes, les deux doivent être supprimées.

1) for(int counter=0;counter<OrdersTotal();counter++)

Le bon 0 est inférieur à deux et la première commande a été supprimée avec succès, mais alors

2)

compteur = 1, mais il ne reste qu'un seul ordre ! Cela signifie que la condition (1<1) n'est pas remplie et que la boucle se termine...


Non, mais c'est le problème, à ce stade, il supprime TOUS les ordres, proprement. Le problème est qu'il les supprime immédiatement.
 
LOA:

Bonjour !

J'ai écrit un indicateur (ce sont mes premiers pas) qui montre clairement la décomposition de ME_Proboy_F5.


Bons premiers pas, Olga Alexandrovna. 330 lignes de code

 
forexnew:

Cependant, il existe un indicateur https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip où les fonds propres sont en quelque sorte calculés sur la base de données historiques. Je n'ai pas encore compris la méthode. Il est peut-être possible de calculer l'équité sur la base des moments clés (clôture des ordres), mais à quoi cela ressemble-t-il sous la forme d'une formule ?




Familiarisez-vous avec les concepts d'EQUITE et d'EQUILIBRE et leurs différences.

Cet indicateur montre la ligne d'équité en temps réel, car la ligne d'équité est le profit/la perte actuel(le) sur les positions non fermées, "Il est possible de déterminer réellement l'équité par des points clés (fermetures d'ordres)" - pas possible, donc vous considérerez le changement de la ligne d'équité sur les positions fermées.

"Les fonds propres sont en quelque sorte calculés sur la base de données historiques" - non. Cet indicateur calcule la ligne d'équité pour le moment actuel - par les positions ouvertes sur le marché.

 

Bonsoir ! J'ai trouvé ceci dans le tutoriel de S. Kovalev, mais dans le terminal MT4 il n'y a rien d'autre que "woof !". S'il vous plaît, conseillez, qui sait où emprunter un ensemble de signaux sonores pour différentes opérations, afin que je ne doive pas regarder l'ordinateur en permanence ? Merci pour un indice possible !

   switch(Mess_Number)                 // Elegir texto del mensaje segun el numero 
     {
      case 1:
         Graf_Text="Closed order Buy "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 2:
         Graf_Text="Closed order Sell "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 3:
         Graf_Text="Deleted pending order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 4:
         Graf_Text="Opened order Buy "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 5:
         Graf_Text="Opened order Sell "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 6:
         Graf_Text="Placed pending order "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 7:
         Graf_Text="Order "+Number+" modified into the market one";
         PlaySound("Transform.wav");                                break;
      case 8:
         Graf_Text="Reopened order "+ Number;
         PlaySound("Bulk.wav");                                     break;
      case 9:
         Graf_Text="Partly closed order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 10:
         Graf_Text="New minimum distance: "+ Number;
         PlaySound("Inform.wav");                                   break;
      case 11:
         Graf_Text=" Not enough money for "+
         DoubleToStr(Value,2) + " lots";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 12:
         Graf_Text="Trying to close order "+ Number;
         PlaySound("expert.wav");                                   break;
      case 13:
         if (Number>0)
            Graf_Text="Trying to open order Sell..";
         else
            Graf_Text="Trying to open order Buy..";
         PlaySound("expert.wav");                                   break;
      case 14:
         Graf_Text="Invalid password. EA doesn't function.";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 15:
         switch(Number)                 // Elegir texto del mensaje segun el numero del error 
           {
            case 2:   Graf_Text="Common error.";                    break;
            case 129: Graf_Text="Wrong price. ";                    break;
            case 135: Graf_Text="Price changed. ";                  break;
            case 136: Graf_Text="No prices. Awaiting a new tick.."; break;
            case 146: Graf_Text="Trading subsystem is busy";        break;
            case 5 :  Graf_Text="Old version of the terminal.";     break;
            case 64:  Graf_Text="Account is blocked.";              break;
            case 133: Graf_Text="Trading is prohibited";            break;
            default:  Graf_Text="Occurred error " + Number;//otros errores 
           }
         Color_GT=Red;
         PlaySound("Error.wav");                                    break;
      case 16:
         Graf_Text="Expert Advisor works only for EURUSD";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      default:
         Graf_Text="default "+ Mess_Number;
         Color_GT=Red;
         PlaySound("Bzrrr.wav");                    
     }
Raison: