Задача по поиску ордеров - страница 14

 
Dmitry Fedoseev:
Не я не ОТК:) Тестируйте на ордерах в тестере или на демосчете.
Что такое ОТК ?
 
Допустим, сначала идет второй по цене ордер, его запомнили в price_max, потом первый, заменили price_max, второй ордер потеряли,
 
Vladimir Pastushak:
Что такое ОТК ?
Отдел Технического Контроля.
 
Vladimir Pastushak:

Получается что что бы избежать избыточности то 99% случаев нужно все равно писать весь код в ручную...

Дак я же говорю про адекватный баланс, а совсем избежать избыточности в ПЕРЕНОСИМОМ коде не получится. Я остановился на такой матрёшке из 3х структур

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;

Заполняется за один проход, обновляется, когда бот совершает операцию или меняется кол-во ордеров. Тут избыточность на грани, на моё ИМХО. Мне хватает в 90% случаев, но вот вашу задачу не решает, нужна отдельная функция

 
Dmitry Fedoseev:
Допустим, сначала идет второй по цене ордер, его запомнили в price_max, потом первый, заменили price_max, второй ордер потеряли,

нет, второй не теряем, максмальный сначала записывается

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

Если второй орде выше то перезапись если ниже то работает второе условие

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

проверяется тиккет, если это тиккет не максимального но верхнего значит это верхний перед максимальным..

 
Alexander Puzanov:

Дак я же говорю про адекватный баланс, а совсем избежать избыточности в ПЕРЕНОСИМОМ коде не получится. Я остановился на такой матрёшке из 3х структур

Заполняется за один проход, обновляется, когда бот совершает операцию или меняется кол-во ордеров. Тут избыточность на грани, на моё ИМХО. Мне хватает в 90% случаев, но вот вашу задачу не решает, нужна отдельная функция

получается вы две структуры закладываете в третью ...

Интересен Ваш метод заполнения всех структур ...

 
Dmitry Fedoseev:

Быстрее некуда. Если надо быстрее, надо думать о всем алгоритме советника, может быть можно избавиться от необходимости на каждом тике искать два нижних, два верхних. 
Должен признать что Ваш метод поиска ордеров стабильнее моего в некоторых случаях, сейчас сижу провожу тесты и в зависимости от положения открытия ордеров ваш метод работает без ошибок... Мой в некоторых моментах косячит ...
 
Vladimir Pastushak:
Должен признать что Ваш метод поиска ордеров стабильнее моего в некоторых случаях, сейчас сижу провожу тесты и в зависимости от положения открытия ордеров ваш метод работает без ошибок... Мой в некоторых моментах косячит ...

Вчера писал об этом. Зависит от того, в каком порядке открывались.

 
Dmitry Fedoseev:

Вчера писал об этом. Зависит от того, в каком порядке открывались.

Да да да, только я не придал этому значения...
Причина обращения: