La tâche de recherche des commandes - page 14

 
Dmitry Fedoseev:
Je ne suis pas OTK :) Testez sur des ordres dans le testeur ou sur un compte de démonstration.
Qu'est-ce que le GTC ?
 
Supposons que le deuxième ordre de prix le plus élevé passe en premier, il est mémorisé dans price_max, puis le premier, remplacé par price_max, le deuxième ordre est perdu,
 
Vladimir Pastushak:
Qu'est-ce que le QA ?
Le département du contrôle technique.
 
Vladimir Pastushak:

Il s'avère que pour éviter la redondance dans 99% des cas, vous devez encore écrire tout le code manuellement...

Eh bien, je parle d'un équilibre adéquat, et vous ne pouvez pas du tout éviter la redondance dans le code TRANSFORM. Je me suis arrêté sur une telle matryoshka de 3 structures

struct ORDER {
        double          d_Price;
        double          d_Lot;
        double          d_Profit;
        string          s_Comment;
        datetime        t_Time;
        int                             i_Ticket;
        int                             i_Op_Type;
};
struct ORDERS_GROUP {
        double  d_Lots_Total;           // сумма лотов
        double  d_Profit_Total;         // суммарная прибыль
        double  d_BreakEven_Price;      // уровень б/у
        ORDER           o_Lowest;       // параметры нижнего ордера
        ORDER           o_Highest;      // параметры верхнего ордера
        ORDER           o_Oldest;       // параметры старейшего ордера
        ORDER           o_Newest;       // параметры новейшего ордера
        int             i_Orders_Total; // кол-во ордеров
};
struct ALL_ORDERS {
        int      i_Orders_Total;        // кол-во ордеров
        double   d_Lots_Total;          // сумма лотов
        double   d_Profit_Total;        // суммарная прибыль
        double   d_BreakEven_Price;     // уровень б/у
        double   d_One_Point_Price;     // прибыль одного пункта
        datetime t_Data_Collected;      // время последнего обновления данных
        bool     b_Changed;             // была операция после последнего обновления данных?
        ORDERS_GROUP    o_Buy;          // сводка данных ордеров Buy
        ORDERS_GROUP    o_Sell;         // сводка данных ордеров Sell
        ORDERS_GROUP    o_Buy_Stop;     // сводка данных ордеров BuyStop
        ORDERS_GROUP    o_Sell_Stop;    // сводка данных ордеров SellStop
        ORDERS_GROUP    o_Buy_Limit;    // сводка данных ордеров BuyLimit
        ORDERS_GROUP    o_Sell_Limit;   // сводка данных ордеров SellLimit
        ORDERS_GROUP    o_Market;       // сводка данных рыночных ордеров
        ORDERS_GROUP    o_Pendings;     // сводка данных отложенных ордеров
};
ALL_ORDERS go_Orders;

Il est rempli lors d'un passage, il est mis à jour lorsque le robot effectue une transaction ou lorsque le nombre de commandes change. La redondance est à la limite ici, je pense. C'est suffisant pour moi dans 90% des cas mais cela ne résout pas votre problème ; vous avez besoin d'une fonction séparée

 
Dmitry Fedoseev:
Supposons que le deuxième ordre de prix le plus élevé passe en premier, il est stocké dans price_max, puis le premier ordre est écrasé par price_max et le deuxième ordre est perdu,

non, nous ne perdons pas le second ordre ; l'ordre maximum est écrit en premier.

                  if(op>price_max) // Самый верхний ордер
                    {
                     price_max=op;
                     m_tick_upper=tc;
                    }

Si le deuxième ordre est supérieur, il est écrasé ; s'il est inférieur, alors la deuxième condition fonctionne.

                  if(tc!=m_tick_upper) // Предпоследний верхний ордер
                     if(op>price_max2)
                       {
                        price_max2=op;
                        m_tick_upper_=tc;
                       }

le billet est vérifié, si ce n'est pas le maximum mais le plus haut, alors c'est le plus haut avant le maximum.

 
Alexander Puzanov:

Eh bien, je parle d'un équilibre adéquat, et vous ne pouvez pas éviter complètement la redondance dans le code TRANSFORMAL. J'ai opté pour une telle matrice de 3 structures

La redondance est trop importante pour moi dans 90 % des cas, mais elle ne résout pas votre problème ; vous avez besoin d'une fonction distincte.

Donc, vous mettez deux structures dans une troisième...

Votre méthode pour remplir toutes les structures est intéressante ...

 
Dmitry Fedoseev:

Il n'y a pas de moyen plus rapide. Si vous voulez être plus rapide, vous devez réfléchir à l'ensemble de l'algorithme de l'EA, peut-être pouvez-vous vous débarrasser de la nécessité de rechercher deux bas, deux hauts à chaque tick.
Je dois admettre que votre méthode de recherche des ordres est plus stable que la mienne dans certains cas, maintenant je fais des tests et selon la position d'ouverture de l'ordre votre méthode fonctionne sans erreur.... Ma méthode ne fonctionne pas correctement dans certains cas...
 
Vladimir Pastushak:
Je dois admettre que votre méthode de recherche d'ordres est plus stable que la mienne dans certains cas, maintenant je fais des tests et selon la position d'ouverture de l'ordre votre méthode fonctionne sans erreurs.... Ma méthode ne fonctionne pas correctement dans certains cas...

J'ai écrit à ce sujet hier. Cela dépend de la commande qui a été ouverte.

 
Dmitry Fedoseev:

J'ai écrit à ce sujet hier. Ça dépend de l'ordre dans lequel vous l'avez ouvert.

Oui oui oui, seulement je n'y ai pas prêté beaucoup d'attention...