Die Aufgabe der Suche nach Aufträgen - Seite 14

 
Dmitry Fedoseev:
Ich bin nicht OTK:) Testen Sie mit Aufträgen im Tester oder auf einem Demokonto.
Was ist GTC?
 
Angenommen, die Bestellung mit dem zweithöchsten Preis geht zuerst ein, sie wird in price_max gespeichert, dann wird die erste Bestellung durch price_max ersetzt, die zweite Bestellung geht verloren,
 
Vladimir Pastushak:
Was ist QA?
Die Abteilung Technische Kontrolle.
 
Vladimir Pastushak:

Es stellt sich heraus, dass man in 99% der Fälle den gesamten Code von Hand schreiben muss, um Redundanzen zu vermeiden...

Nun, ich spreche von angemessener Ausgewogenheit, und man kann Redundanz im TRANSFORM-Code überhaupt nicht vermeiden. Ich habe auf einer solchen Matrjoschka aus 3 Strukturen angehalten

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;

Sie wird in einem Durchgang ausgefüllt und aktualisiert, wenn der Bot eine Transaktion durchführt oder sich die Anzahl der Aufträge ändert. Die Redundanz ist hier grenzwertig, wenn Sie mich fragen. In 90 % der Fälle ist das für mich ausreichend, aber Ihr Problem ist damit nicht gelöst; es wird eine separate Funktion benötigt

 
Dmitry Fedoseev:
Angenommen, der Auftrag mit dem zweithöchsten Preis kommt zuerst, er wird in price_max gespeichert, dann wird der erste Auftrag durch price_max überschrieben und der zweite Auftrag geht verloren,

nein, die zweite Ordnung geht nicht verloren; die maximale Ordnung wird zuerst geschrieben

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

Wenn die zweite Ordnung höher ist, wird sie überschrieben, wenn sie niedriger ist, gilt die zweite Bedingung

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

das Ticket wird geprüft, wenn es nicht das Maximum, sondern das Top-Ticket ist, dann ist es das Top vor dem Maximum.

 
Alexander Puzanov:

Nun, ich spreche von angemessener Ausgewogenheit, und man kann Redundanz im TRANSFORMAL-Code nicht ganz vermeiden. Ich habe mich für eine solche Matrix aus 3 Strukturen entschieden

Sie wird in einem Durchgang ausgefüllt und aktualisiert, wenn der Bot ein Geschäft abschließt oder sich die Anzahl der Aufträge ändert. 90 % der Fälle sind für mich zu redundant, aber das löst Ihr Problem nicht; Sie brauchen eine separate Funktion

Man setzt also zwei Strukturen in eine dritte ...

Ihre Methode, alle Strukturen zu füllen, ist interessant ...

 
Dmitry Fedoseev:

Es gibt keinen schnelleren Weg. Wenn Sie schneller wollen, müssen Sie über den gesamten EA-Algorithmus nachdenken, vielleicht können Sie die Notwendigkeit der Suche nach zwei niedrig, zwei hoch auf jedem Tick loswerden.
Ich muss zugeben, dass Ihre Methode der Auftragssuche in einigen Fällen stabiler ist als meine, jetzt führe ich Tests durch und je nach Eröffnungsposition des Auftrags funktioniert Ihre Methode ohne Fehler... Meine Methode funktioniert in einigen Fällen nicht richtig...
 
Vladimir Pastushak:
Ich muss zugeben, dass Ihre Methode, Aufträge zu finden, in einigen Fällen stabiler ist als meine, jetzt mache ich Tests und je nach Eröffnungsposition des Auftrags funktioniert Ihre Methode ohne Fehler... Meine Methode funktioniert in einigen Fällen nicht richtig...

Darüber habe ich gestern geschrieben. Hängt davon ab, welcher Auftrag eröffnet wurde.

 
Dmitry Fedoseev:

Darüber habe ich gestern geschrieben. Das hängt von der Reihenfolge ab, in der Sie sie geöffnet haben.

Ja, ja, ja, nur habe ich nicht besonders darauf geachtet...