Qu'est-ce qu'un TICK ? - page 2

 

OK, excellent sujet ! !!!

Alors, qu'est-ce que le volume ? le nombre de changements de tick, ou le nombre de transactions, ou la quantité de fonds de transaction dans une période ?

 

Pour reformuler :

Ma conclusion de base est que s'il y a un changement dans MarketInfo() pour la paire, un "tick" est reçu.

.

Il peut y avoir des exceptions, comme "aucun changement trouvé" mais un tick a été reçu, mais c'est très rare.

Les ticks reçus sans changement de prix ne sont pas rares, et signalent un autre changement dans MarketInfo pour la paire.

.

Le volume est égal au nombre de ticks reçus, c'est-à-dire le nombre de fois que la fonction start() a été appelée, il ne s'agit pas spécifiquement de transactions ou de changements de Bid/Ask. Un changement dans MarketInfo() déclenche un tick, et le nombre de tick = volume.

 
phy:

.

Le volume est égal au nombre de ticks reçus, c'est-à-dire au nombre de fois où la fonction start() a été appelée.


Oui, mais certains ticks peuvent être manqués (la fonction start() n'a pas été appelée) car le start() précédent n'est toujours pas terminé.

A l'arrivée de nouvelles cotations, la fonction start() des experts et indicateurs personnalisés attachés sera exécutée. Si la fonction start() lancée à la cotation précédente était en cours d'exécution lors de l'arrivée d'une nouvelle cotation, la nouvelle cotation sera ignorée par l'expert. Toutes les nouvelles cotations reçues pendant l'exécution du programme sont ignorées par le programme jusqu'à ce que l'exécution actuelle de la fonction start() soit terminée. Après cela, la fonction start() ne sera exécutée que lorsqu'une nouvelle cotation successive sera reçue. Pour les indicateurs personnalisés, la fonction start() sera lancée pour un nouveau calcul après que le symbole graphique ou l'horizon temporel actuel ait été modifié indépendamment de l'arrivée de nouvelles cotations. La fonction start() ne sera pas lancée lorsque la fenêtre des propriétés de l'expert est ouverte. Cette dernière ne peut pas être ouverte pendant l'exécution de l'expert.

 

Je n'utilise pas la fonction Start() pour déclencher, j'utilise un script avec une boucle sans fin pour examiner MarketInfo().

Je vais réécrire le script, puisque l'expérience a pris une direction inattendue.

.


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+


    double oldBid, oldAsk, oldVolume, oldCheckSum, oldTickValue, oldSpread, oldMarginRequired;
    int oldTime;
    int tickValueChange;
    int checkSumCount = -2;
    double checkSum;

int start()
  {

   oldBid = Bid;
   oldAsk = Ask;
   oldVolume = Volume[0];
   oldTime = Time[0];
   oldCheckSum         = GetCheckSum();
   oldTickValue         = MarketInfo(Symbol(), MODE_TICKVALUE);
   oldSpread             = MarketInfo(Symbol(),MODE_SPREAD);  
   oldMarginRequired     = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   
   int bidChange, askChange, eitherChange, neitherChange, bothChange, tickCount, spreadChange, marginChange;

    while(!IsStopped()){

       RefreshRates();
       if(oldVolume != Volume[0]) tickCount += 1;
       if(oldBid != Bid && oldAsk == Ask) bidChange += 1;
       if(oldAsk != Ask && oldBid == Bid) askChange += 1;   
       if(oldBid != Bid && oldAsk != Ask) bothChange += 1;
       if(oldBid == Bid && oldAsk == Ask && oldVolume != Volume[0]){
           if     (oldTickValue != MarketInfo(Symbol(), MODE_TICKVALUE)) tickValueChange +=1;
           else if(oldSpread != MarketInfo(Symbol(),MODE_SPREAD)) spreadChange += 1;
           else if(oldMarginRequired != MarketInfo(Symbol(),MODE_MARGINREQUIRED)) marginChange += 1;
           else neitherChange += 1;
       }
       
       GetCheckSum();
       
       Comment("\n"+
                   " Bid Change              = " + bidChange + "\n" +
                   " Ask Change             = " + askChange + "\n" +
                   " Both Change            = " + bothChange + "\n" +
                   " MarketInfo Change  = " + checkSumCount + "\n" +
                      " TickValueChange     = " + tickValueChange + "\n" +
                      " Margin Change        = " + marginChange + "\n" +
                      " Spread Change        = " + spreadChange + "\n" +
                   " No Change              = " + neitherChange + "\n" +
                   //" Checksum           = " + checkSum + "\n" +
                   " Sum of above          = " + (bidChange + askChange + bothChange + spreadChange + neitherChange + checkSumCount +tickValueChange) + "\n" +
                   " Tick Volume            = " + tickCount);
                   
       Sleep(16);
                   
        oldVolume = Volume[0];
        oldBid = Bid;
        oldAsk = Ask;
        
    
    }


   return(0);
  }

double    GetCheckSum(){


    checkSum =
         
   (100*MarketInfo(Symbol(),MODE_LOW)) +
   (101*MarketInfo(Symbol(),MODE_HIGH)) +
   //(102*MarketInfo(Symbol(),MODE_TIME)) +
   //(103*MarketInfo(Symbol(),MODE_BID)) +
   //(104*MarketInfo(Symbol(),MODE_ASK)) +
   (105*MarketInfo(Symbol(),MODE_POINT)) +
   (106*MarketInfo(Symbol(),MODE_DIGITS)) +
   //(107*MarketInfo(Symbol(),MODE_SPREAD)) +
   (108*MarketInfo(Symbol(),MODE_STOPLEVEL)) +
   (109*MarketInfo(Symbol(),MODE_LOTSIZE)) +
   //(110*MarketInfo(Symbol(),MODE_TICKVALUE)) +
   (111*MarketInfo(Symbol(),MODE_TICKSIZE)) +
   (112*MarketInfo(Symbol(),MODE_SWAPLONG)) +
   (113*MarketInfo(Symbol(),MODE_SWAPSHORT)) +
   (114*MarketInfo(Symbol(),MODE_STARTING)) +
   (115*MarketInfo(Symbol(),MODE_EXPIRATION)) +
   (116*MarketInfo(Symbol(),MODE_TRADEALLOWED)) +
   (117*MarketInfo(Symbol(),MODE_MINLOT)) +
   (118*MarketInfo(Symbol(),MODE_LOTSTEP)) +
   (119*MarketInfo(Symbol(),MODE_MAXLOT)) +
   (120*MarketInfo(Symbol(),MODE_SWAPTYPE)) +
   (121*MarketInfo(Symbol(),MODE_PROFITCALCMODE)) +
   (122*MarketInfo(Symbol(),MODE_MARGINCALCMODE)) +
   (123*MarketInfo(Symbol(),MODE_MARGININIT)) +
   (124*MarketInfo(Symbol(),MODE_MARGINMAINTENANCE)) +
   (125*MarketInfo(Symbol(),MODE_MARGINHEDGED)) +
   //(126*MarketInfo(Symbol(),MODE_MARGINREQUIRED)) +
   (127*MarketInfo(Symbol(),MODE_FREEZELEVEL));

    if(checkSum != oldCheckSum) checkSumCount += 1;
    
    oldCheckSum = checkSum;
    
    return(checkSumCount);
}
 

Les ticks reçus avec changement de prix ou sans changement de prix, le nombre de ticks = volume.

Mais le client MT peut ne pas recevoir tous les ticks pour certaines raisons, comme une coupure de réseau temporaire pendant quelques secondes.

Dans ce cas, le nombre de ticks = volume correspond au nombre de changements de prix sur le serveur ou au nombre défini par le courtier qui veut changer son prix combien de fois dans une période.

Est-ce exact ?

Pour un courtier qui prend part au marché pour couvrir les positions de ses clients, le volume est aussi défini par le courtier qui veut changer son prix combien de fois dans une période.

Mon Dieu !

Comment utiliser les données de volume ?

 

Questions sur Marketinfo().

Des appels excessifs à Marketinfo() dans une boucle sans fin seront-ils considérés comme du spam par le courtier ?

Qu'est-ce qui ne serait pas considéré comme du spam ?

Combien de fois peut-on exécuter Marketinfo() sans contrarier le Broker ?

La commande Marketinfo() puise-t-elle dans le cache du Broker ou s'agit-il d'une véritable requote?

Merci

 

Les appelsMarketInfo() ne vont pas au concessionnaire, ils lisent les valeurs les plus récentes déjà reçues du concessionnaire.

Les appels au concessionnaire nécessiteront environ 100 à 300 millisecondes chacun pour se terminer.

// script
int start(){
  
   int startTime = GetTickCount();  
   for(int i = 0; i < 10000; i++){   
      int spread = MarketInfo(Symbol(), MODE_SPREAD);  
   }   
   int endTime = GetTickCount();   
   Print("Time to collect 10000 instances of data = " + (endTime -startTime) + " milliseconds");  
   
   startTime = GetTickCount();  
   OrderSend(Symbol(), OP_BUY, 1, Ask, 0, 0, 0 , "", 0, 0, CLR_NONE);
   endTime = GetTickCount();   
   Print("Time to send one order to Server = " + (endTime -startTime) + " milliseconds");  
   return(0);
}
 
2008.10.27 16:32:37 Test GBPJPY,M15: Time to send one order to Server = 531 milliseconds
2008.10.27 16:32:37 Test GBPJPY,M15: open #8556064 buy 1.00 GBPJPY at 144.77 ok
2008.10.27 16:32:37 Test GBPJPY,M15: Time to collect 10000 instances of data = 438 milliseconds
 
GRAND SUJET ! !! UP
 

Phy - désolé d'ouvrir à nouveau ce sujet :-)

Je pense qu'il y a un décalage entre ce que vous pensez de la nature d'un tick et votre méthode de calcul du profit/risque, etc. (d'après la lecture de certains messages précédents).

C'est-à-dire que vous utilisez MarketInfo(Symbol(),MODE_TICKVALUE) seul afin de déterminer la valeur du pip de la paire exprimée en termes de devise de dépôt.

Cependant, si ce que vous croyez au sujet des ticks dans MT4 est correct, alors la valeur du tick peut changer par un facteur du nombre de pips entre les ticks.

En d'autres termes, si le prix fait soudainement un bond de quelques pips, un appel préalable à MarketInfo pourrait révéler que TICKSIZE et TICKVALUE sont respectivement de 0,0001 et 7,16. L'appel suivant pourrait alors retourner 0,0002 et 14,32.

Dans ce cas, vous devriez toujours prendre en compte à la fois MarketInfo(Symbol(),MODE_TICKSIZE) et MarketInfo(Symbol(),MODE_TICKVALUE) dans vos formules de profit/risque et jamais MarketInfo(Symbol(),MODE_TICKVALUE) seul.

Est-ce exact ?


CB

 
MODE_TICKVALUE 16 Valeur du tick dans la devise de dépôt.
MODE_TICKSIZE 17 Taille du tick dans la devise de cotation.

.

Pour l'Euro chez MBTrading :

10000 MODE_LOTSIZE Taille du lot dans la devise de base.
0.1 MODE_TICKVALUE Valeur du tick dans la devise de dépôt.
0.00001 MODE_TICKSIZE Taille du tick dans la devise de cotation.

.

Remplacez le mot "tick" par "pip" ci-dessus, si vous le souhaitez.

.

Ce courtier utilise le mini-lot comme taille standard -- MODE_LOTSIZE

Ils utilisent 3/5 chiffres pour le prix -- MODE_TICKSIZE

La valeur d'un de ces "ticks" est de 0,10 $ -- MODE_TICKVALUE

.

Pour le GBPAUD :

.

10000 MODE_LOTSIZE Taille du lot dans la devise de base.
0.080262 MODE_TICKVALUE Valeur du tick dans la devise de dépôt.
0.00001 MODE_TICKSIZE Taille du tick dans la devise de cotation.

.

Le mouvement d'un pip de GBPAUD sur un lot rapporte 0,080262 $.

.

Votre idée pour calculer le changement de prix de votre ordre d'un moment à l'autre...

PositionValueChange = PriceChangeInPips * MarketInfo( OrderSymbol(), MODE_TICKVALUE) * OrderLots() ;

.

MB Trading Futures, Inc.
MBTrading- Demo Server

MB Trading Futures, Inc.
MBT MetaTrader 4
D:\Program Files ( x86)\MetaTrader\MBT MetaTrader 4
/ reports/ MarketInfo_MB Trading Futures, Inc._. txt
2009.07.15 16:47:49



Report for EURUSD

1.39775     MODE_LOW                Low day price. 
1.41344     MODE_HIGH               High day price. 
2009.07.15 16:47:48     MODE_TIME               The last incoming tick time ( last known server time). 
1.41044     MODE_BID                Last incoming bid price. For the current symbol, it is stored in the predefined variable Bid 
1.41054     MODE_ASK                Last incoming ask price. For the current symbol, it is stored in the predefined variable Ask 
0.00001     MODE_POINT              Point size in the quote currency. For the current symbol, it is stored in the predefined variable Point 
5     MODE_DIGITS             Count of digits after decimal point in the symbol prices. For the current symbol, it is stored in the predefined variable Digits 
10     MODE_SPREAD             Spread value in points. 
0     MODE_STOPLEVEL          Stop level in points. 
10000     MODE_LOTSIZE            Lot size in the base currency. 
0.1     MODE_TICKVALUE          Tick value in the deposit currency. 
0.00001     MODE_TICKSIZE           Tick size in the quote currency. 
-0.6     MODE_SWAPLONG           Swap of the long position. 
-2.4     MODE_SWAPSHORT          Swap of the short position. 
0     MODE_STARTING           Market starting date ( usually used for futures). 
0     MODE_EXPIRATION         Market expiration date ( usually used for futures).
1     MODE_TRADEALLOWED       Trade is allowed for the symbol. 
0.1     MODE_MINLOT             Minimum permitted amount of a lot. 
0.1     MODE_LOTSTEP            Step for changing lots. 
10000     MODE_MAXLOT             Maximum permitted amount of a lot. 
2     MODE_SWAPTYPE           Swap calculation method. 0 - in points; 1 - in the symbol base currency; 2 - by interest; 3 - in the margin currency.
0     MODE_PROFITCALCMODE     Profit calculation mode. 0 - Forex; 1 - CFD; 2 - Futures. 
0     MODE_MARGINCALCMODE     Margin calculation mode. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD for indices.
0     MODE_MARGININIT         Initial margin requirements for 1 lot. 
0     MODE_MARGINMAINTENANCE  Margin to maintain open positions calculated for 1 lot.
0     MODE_MARGINHEDGED       Hedged margin calculated for 1 lot. 
141.05     MODE_MARGINREQUIRED     Free margin required to open 1 lot for buying. 
0     MODE_FREEZELEVEL        Order freeze level in points. If the execution price lies within the range defined by the freeze level, the order cannot be modified, cancelled or closed. 

Report for GBPAUD
2.04     MODE_LOW                Low day price. 
2.06095     MODE_HIGH               High day price. 
2009.07.15 16:47:42     MODE_TIME               The last incoming tick time (last known server time). 
2.04538     MODE_BID                Last incoming bid price. For the current symbol, it is stored in the predefined variable Bid 
2.04588     MODE_ASK                Last incoming ask price. For the current symbol, it is stored in the predefined variable Ask 
0.00001     MODE_POINT              Point size in the quote currency. For the current symbol, it is stored in the predefined variable Point 
5     MODE_DIGITS             Count of digits after decimal point in the symbol prices. For the current symbol, it is stored in the predefined variable Digits 
50     MODE_SPREAD             Spread value in points. 
0     MODE_STOPLEVEL          Stop level in points. 
10000     MODE_LOTSIZE            Lot size in the base currency. 
0.080262     MODE_TICKVALUE          Tick value in the deposit currency. 
0.00001     MODE_TICKSIZE           Tick size in the quote currency. 
-1.47     MODE_SWAPLONG           Swap of the long position. 
-3.65     MODE_SWAPSHORT          Swap of the short position. 
0     MODE_STARTING           Market starting date (usually used for futures). 
0     MODE_EXPIRATION         Market expiration date (usually used for futures).
1     MODE_TRADEALLOWED       Trade is allowed for the symbol. 
0.1     MODE_MINLOT             Minimum permitted amount of a lot. 
0.1     MODE_LOTSTEP            Step for changing lots. 
10000     MODE_MAXLOT             Maximum permitted amount of a lot. 
2     MODE_SWAPTYPE           Swap calculation method. 0 - in points; 1 - in the symbol base currency; 2 - by interest; 3 - in the margin currency.
0     MODE_PROFITCALCMODE     Profit calculation mode. 0 - Forex; 1 - CFD; 2 - Futures. 
0     MODE_MARGINCALCMODE     Margin calculation mode. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD for indices.
0     MODE_MARGININIT         Initial margin requirements for 1 lot. 
0     MODE_MARGINMAINTENANCE  Margin to maintain open positions calculated for 1 lot.
0     MODE_MARGINHEDGED       Hedged margin calculated for 1 lot. 
164.21     MODE_MARGINREQUIRED     Free margin required to open 1 lot for buying. 
0     MODE_FREEZELEVEL        Order freeze level in points. If the execution price lies within the range defined by the freeze level, the order cannot be modified, cancelled or closed.  
Raison: