Fonctions utiles de KimIV - page 22

 
rid:

Maintenant j'ai mis une fonction dans le commentaire - Commentaire (isCloseLastPosByStop()) ;

Faites-vous des tests dans le testeur ? Si dans le testeur, il y a sûrement une situation dans laquelle deux ou plusieurs dernières positions fermées n'auront pas un OrderCloseTime() différent.

 

Je vois. Si plusieurs positions sont fermées simultanément dans le testeur (en fonction du signal), la fonction isCloseLastPosByStop() risque de "buguer" et de ne pas fonctionner ? Mais en ligne, ça semble fonctionner.

Oui, - j'ai vérifié dans le testeur maintenant en travaillant avec une position. Tout fonctionne correctement ! La fonction affiche correctement dans le commentaire (isCloseLastPosByStop()) la fermeture par Stop Loss et change le drapeau à temps lors de la fermeture pour une autre raison.

 
rid писал (а):
Je vois. Si plusieurs positions sont fermées en même temps dans le testeur, la fonction isCloseLastPosByStop() risque de ne pas fonctionner ?

Oui, car isCloseLastPosByStop() identifie la dernière position fermée par le temps de fermeture maximum, qui est mesuré en secondes. Il faut donc qu'il s'écoule plus d'une seconde entre la fermeture de plusieurs positions. Dans le testeur, moins d'une seconde peut passer.

rid a écrit :
Et en ligne, apparemment, ça marche.
Il peut également y avoir des bugs dans le mode en ligne, mais beaucoup moins souvent que dans le testeur. Même le robot de trading automatique nécessite un certain temps pour clôturer les positions. Si vous avez des idées pour identifier de manière plus fiable la dernière position fermée, je les accepterai avec gratitude et j'essaierai de modifier la fonction.
 

Bonjour, KimIV. J'ai besoin de vos conseils, ou plutôt de votre aide. J'ai besoin que la fonction start() ne fonctionne pas par tic, mais qu'elle s'exécute toutes les secondes, qu'un nouveau tic soit arrivé ou non. Voici comment j'ai essayé de réaliser cette tâche :

int start()
  {
   if(first==true)return(0); 
   else 
   {   
      for(int j=0;j<10;j++)
         {
         RefreshRates();//обновляем котировки 

         //Код эксперта

         first=true;
         Sleep(1000);//задержка в 1 секунду
         j=0;
         }
   }
   return(0);
  }
 
StatBars писал (а):
Je veux que la fonction start() s'exécute toutes les secondes, qu'un nouveau tick soit arrivé ou non.

Je l'ai fait comme ça :

void start() {
  while (IsExpertEnabled() && !IsStopped()) {
    // код .............
    Sleep(1000);
  }
}
 

Merci beaucoup !!!! Pouvez-vous encore me dire si mon code fonctionne ? Pas dans le testeur... Cela fonctionne-t-il dans le testeur... ? Ou est-ce que je dois...

Void start()...

 
StatBars писал (а):
Pouvez-vous également me dire si mon code fonctionne ?

Je ne sais pas... Je n'ai pas vérifié...

StatBars a écrit (a) :
Pasdans le testeur... Est-ce que cela fonctionnera dans la vraie vie... ?

Dans le testeur, tout ce qui est bouclé ne fonctionne pas. Seuls ceux sur les tiques fonctionnent...

En ligne, votre code devrait sembler fonctionner. Au moins, cela semble fonctionner logiquement...

StatBars:

Ou vous devez...

Void start()...

Non, ce n'est pas nécessaire. Pourquoi déclarer une fonction typée si elle ne renvoie aucune valeur, et si elle le fait, cette valeur n'est utilisée d'aucune façon ?
 

Je vois. Merci encore.

 
KimIV:
. Si vous avez des idées pour identifier de manière plus fiable la dernière position fermée, je les accepterai avec gratitude et j'essaierai de redéfinir la fonction.

Merci pour votre aimable proposition. Malheureusement, les bonnes idées ne me viennent pas souvent (hélas...) à l'esprit ! Il n'y a pas si longtemps, par exemple, j'ai remarqué que vos fonctions n'utilisaient pratiquement pas le "composant" - OrderComment.

Cependant, peut-être que l'application de cette fonction vous donnera de nouvelles idées (pour le plus grand plaisir de toutes les personnes présentes).

Par exemple, si (OrderComment()==" [sl] " && .... - pourrait élargir l'éventail des tâches que vous pouvez accomplir !

//---------------------------------------------------------------------------------

"Plus de fonctions, bonnes et différentes" (c)

 
rid:
KimIV:
. Si vous avez des idées pour identifier de manière plus fiable la dernière position fermée, je les accepterai avec gratitude et j'essaierai de réviser la fonction.

Par exemple, si(OrderComment()==" [sl]" && .... - pourrait élargir l'éventail des tâches à accomplir !

rid, vous avez suggéré un moyen d'identifier le stop déclenchant par l'entrée dans les commentaires de l'ordre. Merci, mais il peut y avoir d'autres entrées que [sl] dans les commentaires.

Je résous le même problème en comparant le prix de clôture avec le prix stop.