Fonctions utiles de KimIV - page 20

 

Fonction GetTypeLastClosePos().

Cette fonction renvoie le type de la dernière position fermée ou -1. Une sélection plus précise des positions à prendre en compte est définie par des paramètres externes :

  • sy - Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument actuel.
  • mn - identifiant de la position, MagicNumber. La valeur par défaut -1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней закрытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction GetTypeLastClosePos().
Dossiers :
 

Fonction GetTypeLastOpenPos().

Cette fonction renvoie le type de la dernière position ouverte ou -1. Une sélection plus précise des positions à prendre en compte est spécifiée par des paramètres externes :

  • sy - Nom de l'instrument de marché. Si vous définissez ce paramètre, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument actuel.
  • mn - identifiant de la position, MagicNumber. La valeur par défaut -1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction GetTypeLastOpenPos().
Dossiers :
 
KimIV:

Fonction OpenPosition() en ligne.

      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      

Que signifient les codes d'erreur 142 et 143.

Merci.

 
zennon:

Que signifient les codes d'erreur 142 et 143 ?

142 - La commande a été mise en file d'attente.

143 - L'ordre a été accepté par le négociant pour exécution.

Pour plus d'informations , voir ici.

 

Le médecin conseille de les traiter comme une erreur 128.

si possible, un mot ou deux à ce sujet de votre point de vue ou position...

 
kombat:

Le médecin conseille de les traiter comme une erreur 128.

Si possible, un mot ou deux à ce sujet de votre point de vue ou de votre position...

Mon point de vue est exprimé dans le code donné par Andrei deux posts plus haut.

 

Désolé... l'a vu, bien sûr...

C'est un peu flou pour moi.

Sleep(1000*66.666);

A part ça, je ne sais pas... dormir...

Mais si et plus loin, pas tant que ça.

c'est-à-dire dormir, puis s' il y a une position, si on joue une marche.

-

OK, si c'est une question moins intéressante, je suis désolé et je ne peux pas y répondre.

 
kombat писал (а):
OK, si c'est une question moins intéressante, je suis encore une fois désolé, et je vais m'arrêter là.

nah... faisons le tri... ...une épreuve de force approfondit la compréhension... Je ne comprends pas ce que vous ne comprenez pas. Posez la question en termes plus simples et plus conventionnels. L'intervalle d'hibernation vous perturbe-t-il ? Pourquoi exactement 66 secondes ?

 
KimIV:
Pourquoi exactement 66 secondes ?

Non, pas ça ! Il n'y a aucun doute là-dessus... Absolument !

Mais la suite de l'action logique-séquentielle dans ce fragment n'est pas aussi bonne.

Disons que nous obtenons un code d'erreur, nous dormons, puis nous obtenons un boolt, Spoin's Waltz joue si cette fonction est activée...

-

(zut, il manque les queues de message, il faut répéter :((((

-

Je suis bien plus intéressé par la façon de poursuivre ce qui a été commencé !

C'est-à-dire d'autres gestes de négociation : soit la fonction s'emballe

Soit la fonction se bloque jusqu'à ce qu'elle s'ouvre, soit elle donne le contrôle à une autre...

Dans le premier cas, il n'est pas clair comment "boucler", appeler "lui-même" ou quoi ?

 

Hmm... Je ne comprends toujours pas. Je vais tirer au hasard. Tous les points suivants s'appliquent aux erreurs 128, 142 et 143.

Si l'erreur 128 n'est pas traitée de quelque manière que ce soit, vous risquez d'obtenir deux positions ouvertes identiques au lieu d'une seule. En deux ans de trading sur deux comptes réels, je n'ai eu qu'un seul cas de ce genre. Les positions dupliquées se produisent parce que le serveur de négociation, pour une raison quelconque, a renvoyé un message au terminal concernant l'expiration du délai d'exécution de l'ordre. Le terminal n'a pas été rejeté. La transaction peut encore être exécutée. Son exécution vient d'être retardée pour une durée "inacceptable". Si vous envoyez une autre demande après ce message, la demande retardée et la nouvelle demande peuvent être exécutées. Pour éviter cette situation, les développeurs vous conseillent de faire une pause d'au moins une minute et de vérifier si la requête pour laquelle le serveur de trading a envoyé le message a été retardée. Si OUI, nous avons atteint notre objectif - le poste est ouvert, si NON, nous pouvons répéter la demande. Voici comment mon code gère les erreurs 128, 142 et 143.

Raison: