Nettoyage dans le testeur - page 4

 
Roman Shiredchenko #:

Il n'est pas tenu compte des amortissements effectués lors de la compensation.

Exemple. Vous ouvrez une transaction d'achat à 50, au début du clearing le prix est disons 70. Pendant le clearing votre transaction sera supprimée et vous recevrez 20 tugrik, après le clearing votre transaction sera ouverte à 70.

Si vous le clôturez à 100, le terminal affichera une transaction avec un profit de 50 tugriks.

Le problème se pose généralement lors de la rédaction d'un chalut ou d'une CU. Supposons que nous voulions mettre un CUE de +5 lorsque la transaction est de 15+.

Si nous reprenons les chiffres de l'exemple, il s'avère qu'avant la compensation, notre stop loss sera de +5 points et après la compensation, il sera de -5 points. Mais si une transaction est fermée sur le stop, nous obtiendrons toujours un profit de 5 tours.

Par conséquent, la compensation peut être ignorée dans le testeur.

 
Aleksandr Slavskii #:

Vraiment simple, et surtout fiable.


Je pardonne l'auteur pour le hors-sujet, mais avez-vous une recette pour déterminer quand le défrichage est terminé ?

Le problème est le suivant : le courtier ouvreur, pendant la compensation, supprime les ordres en attente, et le champ de compensation ne les remet pas en place.

Je ne sais pas pour les contrats à terme, mais sur les actions, la compensation se termine à des moments différents.

Je n'ai donc pas été en mesure de déterminer le moment où la compensation prend fin pour un titre spécifique.

J'utilise simplement une minuterie pour envoyer le placement de l'ordre jusqu'à son ouverture.

Je n'aime pas cette approche, et je n'en ai pas d'autre.

Ce n'est pas grave - discutez et débattez ensemble - le sujet est ouvert à tous !!!!!.
 
Aleksandr Slavskii #:

Il n'est pas tenu compte des amortissements effectués lors de la compensation.

Exemple. Vous ouvrez une transaction d'achat à 50, au moment de la compensation, le prix est de 70. Pendant la compensation, votre transaction sera supprimée et vous recevrez 20 tugrik, après la compensation, votre transaction sera ouverte à 70.

Si vous le clôturez à 100, le terminal affichera une transaction avec un profit de 50 tugriks.

Le problème se pose généralement lors de la rédaction d'un chalut ou d'une CU. Supposons que nous voulions mettre un CUE de +5 lorsque la transaction est de 15+.

Si nous reprenons les chiffres de l'exemple, il s'avère qu'avant la compensation, notre stop loss sera de +5 points et après la compensation, il sera de -5 points. Mais si une transaction est fermée sur le stop, nous obtiendrons toujours un profit de 5 tours.

C'est pourquoi nous pouvons ignorer la compensation dans le testeur.

Oh ! Comme c'est intéressant... Il faudra aller plus loin et l'essayer ! :-)

écrit (tiré de l'article) f-i-tion exactement le compte de sortie des trades sur l'historique, sur le fait (c'est qui a la position dans plus) - compter les moins consécutifs et l'afficher sur l'écran - sorte de compensation ACCOUNT, peut certainement pas tout à fait il sera tout à fait correct lors de la négociation - juste en regardant maintenant ...

Ainsi, pour clôturer une position avec précision, par exemple, en tenant compte de la compensation précédente, si elle était négative - alors nous devrions comparer les valeurs du bénéfice clôturé et de la perte précédente lors de la compensation.

//+------------------------------------------------------------------+
//|                 УЧЕТ КЛИРИНГА
//+------------------------------------------------------------------+
double Calc_Clearing() // вычисление лота
  {
   bool ord;
   double TotalLot=0;
    for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
       //  && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) <= 0)
           {
            TotalLot+=HistoryDealGetDouble(ticket,DEAL_VOLUME);
           }
         else
           {
            break;
           }
        }
     }
   return TotalLot == 0 ? TotalLot: TotalLot;
  }

a trouvé une erreur - réparez-la :

TotalLot+=HistoryDealGetDouble(ticket,DEAL_PROFIT);

en conséquence, voici l'image sur l'écran ci-dessus avant cette insertion :

   Comment(" SPREAD текущий по символу ", _Symbol, " составляет: ", SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
    "      СВЕРКА по клирингу:  ", NormalizeDouble(Calc_Clearing(),0));

réconciliation de compensation

parce qu'il n'y avait pas encore de perte de compensation :

09.11.2021 : tous les "out" sont dans les "plus" :


 
Roman Shiredchenko #:

Terrible ! Il y a trop de choses mauvaises à commenter.

Disons-le autrement.

Pourquoi avez-vous besoin de l'historique des transactions si vous êtes intéressé par la position ?

A mon avis, il suffit d'écrire le prix de la dernière position dans une variable pour chaque nouvelle transaction, et au moment de la compensation, d'ajuster les CU par la différence entre le prix écrit dans la variable et le prix du dernier tick avant la compensation.

Exemple :

lot = 1 ;

double end_position=0 ;

première transaction au prix 30, end_position = 30 ;

deuxième transaction au prix de 60, end_position = 45 ;

troisième transaction au prix de 90, end_position = 60;


C'est-à-dire que vous avez une position à 60 avec un volume de 3.

Supposons que la compensation se fasse au prix de 70, le bénéfice est égal à 30 tugriks.

double clearing_price = 70 ;

Après la compensation, la position s'est ouverte au prix 70, mais nous devons nous rappeler que le prix réel de cette position estend_position == 60 ; c'est donc à partir de ce prix qu'il faut calculer le chalut ou le CUE.

En conséquence, lors de la compensation, remplissez la variable

double correcteur = 0;

correcteur =prix de compensation-position finale;

Supposons que vous ayez un début de CU lorsque le trade est +20 pips, respectivement, ajoutez à la fonction CU que le début de CU est : 20 -correcteur;

Et aussi le CU est mis certains points en plus, ils doivent aussi être corrigés par la valeur du correcteur.

Après la fermeture de tout correcteur de position = 0;


Mais cela ne fonctionnera que s'il n'y a pas de fermetures ou de remplissages partiels après la compensation. Si c'est le cas, nous devons procéder différemment.

 
Aleksandr Slavskii #:

Vraiment simple, et surtout fiable.


Je pardonne l'auteur pour le hors-sujet, mais avez-vous une recette pour déterminer quand le défrichage est terminé ?

Le problème est le suivant : le courtier ouvreur, pendant la compensation, supprime les ordres en attente, et le champ de compensation ne les remet pas en place.

Je ne sais pas pour les contrats à terme, mais sur les actions, la compensation se termine à des moments différents.

Je n'ai donc pas été en mesure de déterminer le moment où la compensation prend fin pour un titre spécifique.

J'utilise simplement une minuterie pour envoyer le placement de l'ordre jusqu'à son ouverture.

Je n'aime pas cette approche, et je n'en ai pas d'autre.

J'ai aussi un ouvreur, mais sur les futurs. J'ai le même problème avec la fin de la compensation, je ne sais pas comment la déterminer, je prends juste 19:05.

Je veux dire, vous pouvez mettre les reports jusqu'à la date, pas seulement pour aujourd'hui. Au moins dans le futur.

 
Aleksandr Slavskii #:

1. L'horreur ! Il y a trop de choses mauvaises à commenter.

Disons-le autrement.

Pourquoi avez-vous besoin de l'historique des transactions si vous êtes intéressé par la position ?

A mon avis, il suffit d'écrire le prix de la dernière position dans une variable pour chaque nouvelle transaction, et au moment de la compensation, d'ajuster les CU par la différence entre le prix écrit dans la variable et le prix du dernier tick avant la compensation.

Exemple :

lot = 1 ;

double end_position=0 ;

première transaction au prix 30, end_position = 30 ;

deuxième transaction au prix de 60, end_position = 45 ;

troisième transaction au prix de 90, end_position = 60;


C'est-à-dire que vous avez une position à 60 avec un volume de 3.

Supposons que la compensation se fasse au prix de 70, le bénéfice est égal à 30 tugriks.

double clearing_price = 70 ;

Après la compensation, la position s'est ouverte au prix 70, mais nous devons nous rappeler que le prix réel de cette position estend_position == 60 ; c'est donc à partir de ce prix qu'il faut calculer le chalut ou le CUE.

En conséquence, lors de la compensation, remplissez la variable

double correcteur = 0;

correcteur =prix de compensation-position finale;

Supposons que vous ayez un début de CU lorsque le trade est +20 pips, respectivement, ajoutez à la fonction CU que le début de CU est : 20 -correcteur;

Et aussi le CU est mis certains points en plus, ils doivent aussi être corrigés par la valeur du correcteur.

Après la fermeture de tout correcteur de position = 0;


2. Mais cela ne fonctionnera que s'il n'y a pas de fermetures ou de remplissages partiels après la compensation. S'il y en a, nous devrions le faire différemment.

1. Merci pour le programme. Je veux regarder sans correcteur pour le moment, car j'ai des ajouts et des trawl avec boo + par exemple 30 pips, aussi après le réglage du trawl il peut y avoir des fermetures partielles selon la logique de fonctionnement du robot. C'est-à-dire qu'après avoir ouvert une position de départ, je mémorise le prix ouvert, après les additions - le calcul de la moyenne - je mémorise à nouveau le NOUVEAU prix ouvert de la position. Et par essence, la compensation et la fixation d'un nouveau prix d'ouverture par le courtier n'auront aucune importance.

Je comprends bien, que cette approche peut aussi avoir lieu selon la logique de trading ci-dessus écrite ici dans ce post de ma part....

En outre, si le prix actuel de l'actif le permet, le transfert du SL à BU + 30 pips du prix de la position cumulée précédemment mémorisée.

Et qui se soucie du prix actuel de la position ouverte pour les futures, fixé par votre courtier ?


2.

"Mais cela ne fonctionnera que s'il n'y a pas de fermetures ou de remplissages partiels après la compensation. Si c'est le cas, il faut procéder différemment. "

J'ai des remplissages... avant et après - jusqu'à ce qu'il passe à BU + 30 pips - est-il vraiment nécessaire de lire le prix moyen actuel de tous les ordres du marché via des tableaux, car nous aurons besoin de

...nous aurions besoin du prix d'ouverture d'un ordre au marché ainsi que du nombre et du volume de contrats pour chaque ordre... pour afficher le prix moyen de l'ensemble de ceux-ci - où se situe le transfert vers une UC - pour calculer...


Un prix moyen = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1 + VOL_2 + VOL_3 + n), ici il s'avère que je n'ai pas traduit SL en BU + 30 pips sur toute la position agrégée - il faut écrire toutes ces valeurs dans des tableaux ou quoi ? Si nous ouvrons la N-ième tranche d'ordre de marché, devons-nous relever toute cette chaîne pour calculer la moyenne de toutes ces tranches ?

Ou nous pourrions jouer avec d'une manière ou d'une autre :

HistoryOrderSelect ()
HistoryOrderGetTicket ()

Mais là se pose la question, comment prendre le début et la fin de la boucle des ordres de marché RÉELS qui participent à la formation de la position agrégée RÉELLE ?

 
Roman Shiredchenko #:

VOLUME_Price = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1+VOL_2 + VOL_3 + n), il s'avère donc que je n'ai pas encore traduit SL en BU + 30 pips sur toute la position agrégée - dois-je écrire toutes ces valeurs dans des tableaux ? Si nous ouvrons le N-ième ordre de marché, nous devons faire remonter toute la chaîne afin de calculer la moyenne de tous les ordres ?

Hélas, c'est exactement le cas.

 

Roman Shiredchenko #:

Prix_moyen = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1 + VOL_2 + VOL_3 + n), il s'avère donc que je n'ai pas traduit SL en BU + 30 pips sur la position totale - dois-je écrire toutes ces valeurs dans des tableaux ? Si nous ouvrons la N-ième tranche d'ordre de marché, devons-nous relever toute cette chaîne pour calculer la moyenne de toutes ces tranches ?

Ou on pourrait jouer avec d'une manière ou d'une autre :

Mais là, la question se pose, comment prendre le début et la fin du cycle des ordres de marché RÉELS qui participent à la formation de la position totale RÉELLE ?

Il suffit de stocker le dernier prix moyen.

 
JRandomTrader #:

Il suffit de conserver le dernier prix moyen.

D'accord, mais si je remplis, par exemple, un volume quelconque, comment puis-je le compter RÉELLEMENT ?
 
Roman Shiredchenko #:
OK, mais si j'ajoute, par exemple, un volume quelconque - comment calculer son RÉEL ?

Je vous ai montré. Prenez ce dernier prix et volume moyen de la position, le prix de la nouvelle transaction et son volume. Tout sera calculé correctement.

Raison: