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,
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.
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 ...
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...
Je ne suis pas OTK :) Testez sur des ordres dans le testeur ou sur un compte de démonstration.
Qu'est-ce que le QA ?
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
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
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.
Si le deuxième ordre est supérieur, il est écrasé ; s'il est inférieur, alors la deuxième condition fonctionne.
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.
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 ...
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 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.
J'ai écrit à ce sujet hier. Ça dépend de l'ordre dans lequel vous l'avez ouvert.