Écart entre deux contrats à terme

 

Bonjour à tous !

J'ai écrit un indicateur qui dessine le spread entre deux futures. J'ai deux problèmes :

1) l'indicateur est très instable, parfois il s'affiche, parfois il ne s'affiche pas, puis il affiche une absurdité (je dois appuyer sur rafraîchir, puis tout semble se mettre en place) ;

2) L'algorithme de l'auteur pour synchroniser les prix de deux futures : parce que les futures peuvent souvent manquer de certaines ou d'autres barres (en raison de la faible liquidité), il y avait alors un problème pour synchroniser leurs barres afin d'obtenir un écart réel entre eux. J'ai fait des recherches sur le forum et je n'ai rien trouvé sur ce sujet. Finalement, j'ai trouvé la méthode suivante : nous prenons 4 séries temporelles - temps de barre pour l'instrument #1, prix de clôture de barre de l'instrument #1, temps de barre de l'instrument #2, prix de clôture de barre de l'instrument #2. Si nous spécifions le même nombre de barres dans les séries temporelles, elles seront identiques pour un instrument et identiques pour un autre (temps de liaison et prix de clôture). Il ne reste plus qu'à synchroniser l'heure d'un instrument par rapport à l'autre. Voici un exemple de formation d'un spread basé sur les données de l'instrument #1 : nous prenons le i-ième prix de clôture de l'instrument #1 et nous en soustrayons le prix de l'instrument #2 dont l'indice est égal à l'indice du tableau de temps de l'instrument #2 dont la valeur de temps a coïncidé avec le tableau de l'instrument #1.

   if(Flag==SincForIn1)									// Синхронизируем по первому инструменту.
      {
       while(i>=0)                                                			// Цикл перебора для расчета спреда для всех непосчитанных баров, от самого последнего i до нулевого.
         {
          SpreadBuffer[i]=closeIn1[i]-closeIn2[ArrayBsearch(timeIn2,timeIn1[i])]; 	// Расчет спреда (существуют различия в количесве баров двух инструментов, за основу берутся бары Инструмента №1)
          i--;                                                    			// Снижение индекса бара для перехода расчетов к следующему бару и так до нулевого включительно.
         }

Je ne peux rien imaginer de mieux. J'aimerais écouter vos suggestions, peut-être existe-t-il un moyen beaucoup plus simple, clair et efficace de construire un graphique de spreads synchronisés de deux futures. Peut-être que ça arrêtera de buguer à ce moment-là, ou peut-être que j'écris des indicateurs "cool"...

J'ai attaché l'indicateur au poste.

Merci d'avance.

Dossiers :
Spread.mq5  24 kb
 
iiivasyaiii:

Bonjour à tous !

J'ai écrit un indicateur qui dessine le spread entre deux futures. J'ai deux problèmes :

1) l'indicateur est très instable, parfois il s'affiche, parfois il ne s'affiche pas, puis il affiche une absurdité (je dois appuyer sur rafraîchir, et ensuite tout semble se mettre en place) ;

2) L'algorithme de l'auteur pour synchroniser les prix de deux futures : parce que les futures peuvent souvent manquer de certaines ou d'autres barres (en raison de la faible liquidité), il y avait alors un problème pour synchroniser leurs barres afin d'obtenir un écart réel entre eux. J'ai fait des recherches sur le forum et je n'ai rien trouvé sur ce sujet. Finalement, j'ai trouvé la méthode suivante : nous prenons 4 séries temporelles - temps de barre pour l'instrument #1, prix de clôture de barre de l'instrument #1, temps de barre de l'instrument #2, prix de clôture de barre de l'instrument #2. Si nous spécifions le même nombre de barres dans les séries temporelles, elles seront identiques pour un instrument et identiques pour un autre (temps de liaison et prix de clôture). Il ne reste plus qu'à synchroniser l'heure d'un instrument par rapport à l'autre. Voici un exemple de construction d'un spread sur la base des données de l'instrument n°1 : nous prenons le i-ième prix de clôture de l'instrument n°1 et nous en soustrayons le prix de l'instrument n°2 dont l'indice est égal à l'indice du tableau de temps de l'instrument n°2 dont la valeur de temps a coïncidé avec le tableau de l'instrument n°1.

Je ne peux rien imaginer de mieux. J'aimerais écouter vos suggestions, peut-être existe-t-il un moyen beaucoup plus simple, clair et efficace de construire un graphique de spreads synchronisés de deux futures. Peut-être que ça arrêtera de buguer à ce moment-là, ou peut-être que j'écris des indicateurs "cool"...

J'ai attaché l'indicateur au poste.

Merci d'avance.

Vous devez prendre les cours acheteur et vendeur pour tracer l'écart. Le graphique est dessiné par flipper et ce ne serait pas correct.
 
Maxim Romanov:
Je dois prendre les prix d'achat et de vente pour construire le spread. Le graphique est dessiné par la nageoire et cela ne sera pas correct.

Maxim, merci de l'attention que vous portez à mon problème.

J'ai quelques commentaires à faire sur votre réponse :

1) Les prix des transactions qui ont eu lieu (en dernier) ne sont pas dessinés, ce n'est pas du forex. Si vous vouliez dire autre chose, veuillez expliquer plus en détail.

2) L'offre et la demande sont certainement bonnes, mais c'est un ordre de grandeur plus compliqué. J'ai essayé d'y écrire deux lignes supplémentaires pour le spread principal, comme le spread d'achat et le spread de vente. Je l'ai essayé une fois (d'ailleurs il a été dessiné comme ça pendant longtemps), mais j'ai changé quelque chose dans le code et il a disparu et n'est jamais réapparu)), si j'en ai besoin, je peux vous envoyer son code. Et le principal inconvénient de bid et ax : si je me souviens bien, les données bid et ax sont stockées pour les 2000 derniers ticks, donc un long historique ne peut pas être analysé.

Alors, s'il vous plaît,commençons par construire le spread entre les deux instruments sur les prix de clôture. Mon approche pour synchroniser les prix de deux instruments en utilisant ArrayBsearch() est-elle correcte ou existe-t-il une méthode plus simple ?

 
iiivasyaiii:

Maxim, merci de l'attention que vous portez à mon problème.

J'ai quelques commentaires à faire sur votre réponse :

1) Les prix des transactions qui ont eu lieu (en dernier) ne sont pas dessinés, ce n'est pas du forex.

Avec de telles connaissances, il est trop tôt pour que vous écriviez de tels indicateurs.

 
iiivasyaiii:

Bonjour à tous !

J'ai écrit un indicateur qui dessine le spread entre deux futures. J'ai deux problèmes :

1) l'indicateur est très instable, parfois il s'affiche, parfois il ne s'affiche pas, puis il affiche une absurdité (je dois appuyer sur rafraîchir, puis tout semble se mettre en place) ;

2) L'algorithme de l'auteur pour synchroniser les prix de deux futures : parce que les futures peuvent souvent manquer de certaines ou d'autres barres (en raison de la faible liquidité), il y avait alors un problème pour synchroniser leurs barres afin d'obtenir un écart réel entre eux. J'ai fait des recherches sur le forum et je n'ai rien trouvé sur ce sujet. Finalement, j'ai pensé à la méthode suivante : nous prenons 4 séries temporelles - temps de barre pour l'instrument #1, prix de clôture de barre pour l'instrument #1, temps de barre pour l'instrument #2, prix de clôture de barre pour l'instrument #2. Si nous spécifions le même nombre de barres dans les séries temporelles, elles seront identiques pour un instrument et identiques pour un autre (temps de liaison et prix de clôture). Il ne reste plus qu'à synchroniser l'heure d'un instrument par rapport à l'autre. Voici un exemple de formation d'un spread basé sur les données de l'instrument #1 : nous prenons le i-ième prix de clôture de l'instrument #1 et nous en soustrayons le prix de l'instrument #2 dont l'indice est égal à l'indice du tableau de temps de l'instrument #2 dont la valeur de temps a coïncidé avec le tableau de l'instrument #1.

Je ne peux rien imaginer de mieux. J'aimerais écouter vos suggestions, il y a peut-être un moyen beaucoup plus simple, clair et efficace de construire un graphique de spreads synchronisés de deux futures. Peut-être que ça s'arrêtera alors, ou peut-être que j'écris des indicateurs "cool"...

J'ai attaché l'indicateur au poste.

Je l'ai joint au message. Merci d'avance.

Bonne journée !

1. Vous devez écrire dans la section "Stock Trading".

2. Vous ne pouvez pas synchroniser 2 futures par barres.

Vous devez prendre comme base les barres d'un des futures (le plus liquide SBRF 9.20 est préférable).

3. Pour avoir une image complète du spread, il faut prendre non pas des fermetures, mais des ticks et les synchroniser avec les barres de l'un d'entre eux choisi comme le futur principal.

4. Pour recalculer rapidement, vous devez mémoriser la dernière position calculée.

Exemple de code pour le recalcul des écarts avec la synchronisation de l'heure de la barre.

int pr_pos = 0;
            int sec_pos = 0;
            bool is_found;
            int pr_mem = 0;
            int sec_mem = 0;
            for(int i = 0; i < a_bars; i++)
            {
              is_found = false;
              while(pr_pos < pr_cnt) 
              {
                if((ulong(data_time[i].time) <= ulong(pr_ticks[pr_pos].time)) &&
                   (ulong(data_time[i].time) + 60 > ulong(pr_ticks[pr_pos].time)))
                {
                  pr_mem = pr_pos;
                  while(sec_pos < sec_cnt) 
                  {
                    if((ulong(data_time[i].time) <= ulong(sec_ticks[sec_pos].time)) &&
                       (ulong(data_time[i].time) + 60 > ulong(sec_ticks[sec_pos].time)))
                    {
                      is_found = true;
                      sec_mem = sec_pos;
                      if((sec_ticks[sec_pos].bid > 0.0) && (pr_ticks[pr_pos].ask > 0.0) &&
                         (sec_ticks[sec_pos].ask > 0.0) && (pr_ticks[pr_pos].bid > 0.0))
                      {
                        data_time[i].hi_value = sec_ticks[sec_pos].bid - pr_ticks[pr_pos].ask;
                        data_time[i].low_value = sec_ticks[sec_pos].ask - pr_ticks[pr_pos].bid;
                      }
                      break;
                    }
                    sec_pos++;
                  }
                  break;
                }
                pr_pos++;
              }
              if(is_found == false)
              {
                pr_pos = pr_mem;
                sec_pos = sec_mem;
              }
            }
 
Alexey Viktorov:

Avec ce genre de connaissances, il est un peu tôt pour que vous écriviez de tels indicateurs.

Puisque vous êtes si intelligent, peut-être pouvez-vous me dire comment synchroniser deux séries de prix par les prix de clôture;)

 
prostotrader:

Bonjour !

1. Vous devez écrire à la section "Exchange Trading".

2. Il n'est pas possible de synchroniser 2 futures par barres.

Vous devez prendre comme base les barres d'un des futures (le plus liquide SBRF 9.20 est préférable).

3. Pour avoir une image complète du spread, il faut prendre non pas des fermetures, mais des ticks et les synchroniser avec les barres de l'un d'entre eux choisi comme le futur principal.

4. Pour recalculer rapidement, vous devez mémoriser la dernière position calculée.

Un exemple de recalcul du code de répartition avec synchronisation de l'heure de la barre.

Prostotrader, merci beaucoup pour le conseil ! Solution intéressante, je vais l'essayer maintenant et faire un rapport plus tard.

 
iiivasyaiii:

Puisque vous êtes si intelligent, peut-être pouvez-vous me dire comment synchroniser deux séries de prix par les prix de clôture;)

On vous a déjà dit l'essentiel de la question. Vous ne pouvez pas construire un spread sur la base des prix des transactions (sans parler des prix de clôture !), car il se peut qu'il n'y ait pas de transactions dans la branche lente pendant un long moment, et même s'il y en a, elles ne seront pas synchronisées avec les prix des transactions de la branche rapide. C'est-à-dire que la valeur de cette information est nulle. Il existe toujours (ou presque toujours) des cours acheteurs et vendeurs sur le marché, et ce sont eux qui doivent être analysés.

 
iiivasyaiii:

Maxim, merci de l'attention que vous portez à mon problème.

J'ai quelques commentaires à faire sur votre réponse :

1) Les prix des transactions qui ont eu lieu (en dernier) ne sont pas dessinés, ce n'est pas du forex. Si vous vouliez dire autre chose, veuillez expliquer plus en détail.

2) L'offre et la demande sont certainement bonnes, mais c'est un ordre de grandeur plus compliqué. J'ai essayé d'y inscrire deux lignes supplémentaires pour l'écart principal, comme l'écart d'achat et l'écart de vente. Je l'ai essayé une fois (d'ailleurs il a été dessiné comme ça pendant longtemps), mais j'ai changé quelque chose dans le code et il a disparu et n'est jamais réapparu)), si j'en ai besoin, je peux vous envoyer son code. Et le principal inconvénient de bid et ax : si je me souviens bien, les données bid et ax sont stockées pour les 2000 derniers ticks, donc un long historique ne peut pas être analysé.

Alors, s'il vous plaît,commençons par construire le spread entre les deux instruments sur les prix de clôture. Mon approche pour synchroniser les prix de deux instruments en utilisant ArrayBsearch() est-elle correcte ou existe-t-il une méthode plus simple ?

Je ne suis pas un programmeur, je n'ai pas besoin du code, je ne peux pas aider avec les codes. Mais je vais vous donner un conseil en substance. Ainsi, les instruments d'échange sont construits par le prix dans le terminal et, comme prostotrader l'a écrit, il n'est pas correct de les synchroniser par les prix de clôture. Par tics, oui, ce sera correct. Cherchez tout de suite le bon chemin, pourquoi faire une erreur).
 
prostotrader:

Bonjour !

1. Vous devez écrire à la section "Exchange Trading".

2. Il n'est pas possible de synchroniser 2 futures par barres.

Vous devez prendre comme base les barres d'un des futures (le plus liquide SBRF 9.20 est préférable).

3. Pour avoir une image complète du spread, il faut prendre non pas des fermetures, mais des ticks et les synchroniser avec les barres de l'un d'entre eux choisi comme le futur principal.

4. Pour recalculer rapidement, vous devez mémoriser la dernière position calculée.

Un exemple de recalcul du code de répartition avec synchronisation de l'heure de la barre.

Prostotrader, bonjour ! S'il vous plaît conseillez-moi, je n'ai pas bien compris votre code :

1) Avez-vous utilisé la fonction CopyTicksRange ou CopyTicks ?

2) La description de ces fonctions dit qu'elles ne peuvent copier plus de 2000 ticks, cela signifie que cet indicateur ne peut pas analyser un historique plus long ?

 
Dmi3:

On vous a déjà dit l'essentiel de la question. L'écart ne peut pas être basé sur les prix des transactions (et encore moins sur les prix de clôture !), car il se peut qu'il n'y ait pas de transactions dans la partie lente pendant longtemps et, même s'il y en a, elles ne seront pas synchronisées avec les prix des transactions de la partie rapide. C'est-à-dire que la valeur de cette information est nulle. Il existe toujours (ou presque toujours) des prix réels d'achat et de vente sur le marché, et ce sont eux que nous devons analyser.

Je ne conteste pas que les offres sont plus précises (bien que lorsque j'avais un indicateur de courte durée montrant trois spreads : flipper, ask-bead et bid-ask, le flipper se situait la plupart du temps entre les deux derniers, ce qui montre qu'en général le spread flipper sur les instruments liquides est adéquat).

Trouvons ensuite comment effectuer la synchronisation asc/enchère de la manière la moins gourmande en ressources possible et de préférence avec un historique profond.

Par exemple, Prostatrader offre une option intéressante (ci-dessus).

Raison: