オーダーを探すという作業 - ページ 14

 
Dmitry Fedoseev:
OTKではありません:)テスターまたはデモ口座での注文でテストしてください。
GTCとは?
 
2番目に高い価格の注文が先に行ったとすると、それは price_max に記憶され、次に1番目の注文が price_max に置き換えられ、2番目の注文は失われます。
 
Vladimir Pastushak:
QAとは?
技術管理部です。
 
Vladimir Pastushak:

99%のケースで冗長性を回避するためには、やはりすべてのコードを手書きで書かなければならないことがわかりました......。

まあ、適度なバランスということで、TRANSFORMのコードでは冗長性は全く避けられないんですけどね。そんな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;

1回のパスで入力され、ボットが取引を行ったときや注文数が変化したときに更新される。 冗長性はこの辺にある。 90%のケースで十分だが、問題は解決されていない。

 
Dmitry Fedoseev:
2番目に高い価格の注文が先に出て、それが price_max に格納され、その後、最初の注文が price_max に上書きされ、2番目の注文が失われたとする。

いいえ、2次を失うのではなく、最大次が最初に書かれているのです

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

2次が高ければ上書きされ、低ければ2次条件が成立する

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

がチェックされ、最大値でなく最上位のチケットであれば、最大値より前の最上位となる。

 
Alexander Puzanov:

まあ、適度なバランスということで、TRANSFORMALのコードで冗長性を完全に回避することはできないのですが。このような3つの構造からなるマトリックスに落ち着きました。

これは、1回のパスで入力され、ボットが取引を行ったときや注文数が変わったときに更新されます。 この冗長性は、90%のケースで私には多すぎますが、あなたの問題を解決するものではありません。

つまり、2つの構造物を3つ目に置くと......。

全構造を埋めるという方法は面白いですね.

 
Dmitry Fedoseev:

手っ取り早い方法はありません。もし、より速くしたいのであれば、EAのアルゴリズム全体を考える必要があり、もしかしたら、すべてのティックで2つの安値と2つの高値を探す必要性を取り除くことができるかもしれません。
あなたの注文の検索方法は、場合によっては私の方法よりも安定していると認めざるを得ません。現在、テストを実施していますが、注文の開始位置によっては、あなたの方法はエラーなく動作しています...私のやり方が正しく機能しない場合があるのですが...。
 
Vladimir Pastushak:
今、テストをしているのですが、注文の開始位置によっては、あなたの方法はエラーなく動作しています。私のやり方が正しく機能しない場合があるのですが...。

昨日、こんな ことを書きました。どの注文を開封したかによる。

 
Dmitry Fedoseev:

昨日、こんな ことを書きました。開封した順番による。

そうそうそう、ただ、あまり気にしていなかったのですが...。