Créer et tester des stratégies d'arbitrage - page 7

 
pronych:
Très bien. Nous en reparlerons lorsque vous passerez des ordres limités avec ces jambes.))
Je suis d'accord, il sera un peu difficile de contrôler un essaim d'ordres limités ;))
 

Je vais commencer un nouveau sujet.

Cette question peut se poser lorsque nous définissons la liquidité pour une position d'arbitrage.
Comment recalculer correctement la liquidité d'une paire croisée en unités USD sur une meilleure bande (et pourquoi) ?

1) directement par l'intermédiaire de la major dans la devise de base
2) par l'intermédiaire d'un major en devise cotée

Exemple : le volume sur l'EURCHF Best Bund est de 2 millions d'unités. Vous devez vérifier ce volume en USD. Que devons-nous faire ? Nous regardons le ticker EURUSD et estimons à combien s'élèvent 2 millions d'euros. Ou bien, nous estimons le volume en CHF au taux de change actuel, puis nous calculons le volume en USD en utilisant le cadran USDCHF ?

 
GaryKa:

Je vais commencer un nouveau sujet.

Cette question peut se poser lorsque nous définissons la liquidité pour une position d'arbitrage.
Comment recalculer correctement la liquidité d'une paire croisée en unités USD sur une meilleure bande (et pourquoi) ?

1) directement par l'intermédiaire de la major dans la devise de base
2) par l'intermédiaire d'un major en devise cotée

Exemple : le volume sur l'EURCHF Best Bund est de 2 millions d'unités. Vous devez vérifier ce volume en USD. Que devons-nous faire ? Nous regardons le ticker EURUSD et estimons à combien s'élèvent 2 millions d'euros. Ou bien, nous estimons le volume en CHF au taux de change actuel, puis nous calculons le volume en USD en utilisant le cadran USDCHF ?

Et par la valeur de la tique, non ?
 

J'ai vu la solution via TickValue. Mais le cas est général (pas MT) et en plus, je vais être honnête, manipuler TickValue me donne mal à la tête. J'aimerais une explication simple, qui serait facile à retenir.

Pour l'instant, c'est comme ça :

Sur les gangs d'Ask, nous avons une offre de vente, donc les vendeurs ont les marchandises(monnaie de base) disponibles. Nous calculons simplement son coût dans une autre devise de cotation (USD). De l'autre côté de la banque d'offres, nous n'avons pas de produit disponible à l'achat, mais nous avons des fonds (dans la devise cotée). Par le biais de la majeure correspondante, recalculez ces fonds.

Total :

  • pour Ask gangs count (1) way
  • Pour les gangs de Bid, nous calculons de la manière suivante (2)
 
Vous plaisantez... Ou je ne comprends pas ce que vous dites. Vous pensez donc qu'un volume de lot, par exemple sur EURUSD, est égal à un volume de lot sur n'importe quel autre symbole ?
 
GaryKa: ... Donc, vous pensez qu'un volume de 1 lot par exemple sur EURUSD est égal à 1 lot sur n'importe quel autre symbole ?

Pour les paires ayant la même devise de base, la comparaison par lots est acceptable, car les unités sont les mêmes. Par exemple, les volumes pour EURCHF et EURUSD.


papaklass:

Certains vendeurs EURUSD ASK-band = 2,0 millions, c'est-à-dire que les vendeurs veulent vendre 2 000 000 / 100000 = 20 lots d'EUR et acheter 2 000 000 / 136345 = 14,67 lots d'USD.

Autres vendeurs GBPUSD ASK-band = 3,5 millions, c'est-à-dire que les vendeurs veulent vendre 3 500 000 / 100000 = 35 lots de GBP et acheter 3 500 000 / 164349 = 21,3 lots de USD.

Il en résulte qu'en ce moment, ils veulent acheter 14,67 + 21,3 = 35,97 lots USD pour l'euro et la livre. Vous pouvez calculer n'importe quelle devise de cette façon.

Dans cet exemple, vous avez des paires majeures qui ont la même devise de cotation. La comparaison par lots n'est pas acceptable : 20 lots d'euros et 35 lots de livres, il faut donc convertir et obtenir des volumes en lots d'USD : 14.67 et 21.3, qui peuvent déjà être comparés.


La question était un peu différente ? Comment calcule-t-on le volume d'une paire croisée ? Montrez-moi avec ou sans lots. Par exemple, comment comparer le volume de l'EURCHF et de l'AUDNZD ?

GaryKa: ... Comment recalculer correctement la liquidité sur la meilleure bande d'une paire croisée en unités USD (et pourquoi) ?
 

Voici une autre option pour la position d'arbitrage, qui consiste à calculer des lots pour chaque symbole afin d'échanger autant de liquidités que possible sans se convertir en unités communes.

Supposons que nous ayons un arbitrage triangulaire de type A/B, B/C, C/A

1) Commencez du premier au dernier symbole. Prenez le volume A sur la première paire (rappelez-vous que la taille de la commande est de A/B) et calculez le volume B (convertissez A en B). Si le volume obtenu est supérieur à celui de B/C, on passe au point 2. S'il est inférieur, on mémorise ce volume (comme la taille de commande pour B/C), on calcule C, on le compare, etc. Nous avons réussi à atteindre le bout de la chaîne -> nous avons déjà des volumes pour les commandes, la sortie.

2) Faites un changement cyclique (A/B, B/C, C/A est devenu B/C, C/A, A/B ), et revenez au point 1).

 
papaklass: ... Exprimez les volumes pour ces devises par la garantie requise à l'ouverture de la position. Ainsi, obtenez les volumes de ces monnaies en USD et comparez-les.
Bonne suggestion.

Calculons par nous-mêmes le montant de la marge qui nous sera (devra) déduite dans la devise de dépôt en USD si.. :

- Nous voulons acheter 1 lot d'EURCHF.
Acheter EURCHF, c'est acheter EUR pour CHF. Nous n'avons pas de CHF. Nous les empruntons ou nous les achetons nous-mêmes (avec un effet de levier de 1:1). En d'autres termes, nous disposons de USD (dépôt) et nous devons acheter des CHF (ou ne pas acheter si le crédit est disponible en CHF) afin d'acheter des EUR. Cela signifie que pour acheter de l'EURCHF, nous devons réellement (effet de levier 1:1) ou virtuellement vendre de l'USDCHF (vente d'USD du dépôt, achat de CHF), à un prix de marché (pire cas).

- Nous voulons vendre 1 lot d'EURCHF.
Vendre EURCHF, c'est vendre EUR pour CHF. Nous n'avons pas d'EUR (nous n'avons rien à vendre). Nous les empruntons ou les achetons nous-mêmes (avec un effet de levier de 1:1). En d'autres termes, nous avons des USD (dépôt) et nous devons acheter des EUR (ou ne pas acheter, si le crédit nous est accordé en EUR) pour acheter des CHF. Cela signifie que pour vendre l'EURCHF, nous devons réellement (effet de levier 1:1) ou virtuellement acheter l'EURUSD (vendre des USD du dépôt, acheter des EUR), au prix du marché (pire des cas).

En résumé :
  • lors de l'achat d'EURCHF, la marge en USD pour le crédit doit être calculée en utilisant les prix en USDCHF.
  • sur la vente d'EURCHF, la marge en USD pour le crédit doit être calculée en utilisant les prix EURUSD


Maintenant, passons en revue votre code. À mon avis, la fonction manque d'un argument qui serait responsable de la direction de l'opération. Vous avez la variable marginCurrency, qui est toujours définie comme la devise de base. Par conséquent, la marge pour la vente et l'achat d'EURCHF est toujours calculée par rapport à l'EURUSD.

   string marginCurrency = StringSubstr( StringTrimLeft( smb ), 0, 3 );

...


   if( calcCurrency == "" ){
      calcCurrency = GetSymbolByCurrencies( marginCurrency, accCurrency );
      mode = true;
     
      if( calcCurrency == "NULL" ){
         calcCurrency = GetSymbolByCurrencies( accCurrency, marginCurrency );
         mode = false;
      }
   }


P.S. Je suis curieux de savoir dans quelle mesure vos calculs de marge coïncident maintenant avec les calculs de MT, d'autant plus qu'il y a eu des revendications similaires à celles-ci auparavant.

 
papaklass:

A en juger par le silence, tout n'est pas clair.

Répondez par des chiffres à la question : "Comment calculer le volume d'une paire de croix ? Montrez-moi avec ou sans lots. Par exemple, comment comparez-vous les volumes sur l'EURCHF et l'AUDNZD?"

Pour connaître la différence entre les lots, je divise les taux des principales devises au numérateur. La devise du gage est la devise qui se trouve au numérateur.

EURUSD / AUDUSD -> 1,36368 / 0,90639 = 1,50451, c'est-à-dire que le volume de la position AUDNZD à ouvrir doit être 1,50 fois supérieur à celui de l'EURCHF.

Pourquoi je divise les majors ?

Je ne comprends pas ce message. Ainsi, en comptant de cette manière, vous concluez que le volume sur AUDNZD (en USD) est environ 1,5 fois plus important que le volume sur EURCHF (en USD). N'est-ce pas ?

 
papaklass: ... Maintenant à propos de mon code pour le calcul de la marge. Je l'ai commenté en détail. N'est-ce pas difficile à lire et à comprendre ? La marge est calculée par une autre fonction... Regardez le code après le commentaire "//receive the current price for the specified direction".

papaklass calme-toi ou on va se disputer. J'ai regardé votre code avant de le commenter, avez-vous regardé mon commentaire ? Avec précaution ?


Ma plainte concernant votre méthode de calcul (par l'exemple du calcul de l'EURCHF) .

GaryKa: ... Vous calculez toujours la sécurité pour la vente et l'achat d'EURCHF par le biais d'EURUSD.

Après le commentaire "//fetch the current price for the specified direction" vous calculez toujours les prix au même symbole à l'achat et à la vente de , alors que je crois que vous devez les calculer à des symboles différents (justification ci-dessus).

   prc = Dbl_If( dir == OP_BUY, MarketInfo( calcCurrency, MODE_ASK ),
                                MarketInfo( calcCurrency, MODE_BID ) );

Dans l'exemple de l'EURCHF, vous avez toujours l' EURUSD.


P.S. c'était inutile, désolé

GaryKa: ... À mon avis, il manque à la fonction l'argument qui serait responsable de la direction du commerce ...