Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1471

 
ANDREY:

J'ai trouvé un modèle statistique stable dans le testeur, qui a régulièrement produit des profits avec des retraits acceptables depuis 2008. Je dois le tester sur des paires et des cadres différents, etc.
Mais j'ai besoin de le tester en utilisant plusieurs paramètres simultanément. L'optimisation prend un temps irréel. Et j'ai déjà écrit un code qui teste ce dont j'ai besoin beaucoup plus rapidement. Et maintenant, j'améliore mon code, c'est-à-dire que je veux qu'il fonctionne encore plus vite dans le testeur, ou aussi vite que possible. L'algorithme principal de mon code consiste à ouvrir des ordres à 30 points après chaque minimum local. J'essaie donc de le faire aussi vite que possible.

Votre tâche sera plus facile si vous pouvez expliquer comment vous identifiez l'extremum local.

Si l'indicateur Fractals est adapté à cela, alors vous devez vérifier sur la deuxième barre la présence d'une fractale et à partir de cette valeur vous devez calculer les 30 points ou pips nécessaires... comme vous voulez.

 
MakarFX:

Le contrôle dans votre code n'est pas une charge, mais si vous voulez vraiment l'essayer, essayez-le.

Je l'ai essayé. Ouvre à nouveau les mauvaises commandes (en termes de temps, de prix et de quantité)

Votre code.

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Low[1]<LoU) {LoU=Low[1];}
   if ((Bid-30*Point)>=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }


Merci pour votre aide.

 
Alexey Viktorov:

Votre tâche sera plus facile si vous pouvez expliquer comment vous définissez un extremum local.

Si l'indicateur Fractals est adapté à cela, alors vous vérifiez sur la deuxième barre la présence d'une fractale et comptez les 30 points ou pips nécessaires... comme vous voulez.

Si par extremum on entend le minimum local après lequel l'ordre est ouvert, ce minimum est défini en vérifiant la valeur minimale du prix sur chaque tick ou bougie. Et c'est exactement ce contre quoi je me bats. Je veux que tout se passe beaucoup plus vite afin d'ouvrir des ordres aux positions dont j'ai besoin.

 
ANDREY:

Si l'on entend par extremum un plancher local après lequel un ordre est ouvert, ce plancher est déterminé en vérifiant la valeur minimale du prix sur chaque tick ou chandelier. Et c'est exactement ce contre quoi je me bats. Je veux que tout se passe beaucoup plus vite afin d'ouvrir des ordres aux positions dont j'ai besoin.

L'extremum est un minimum local ou un maximum local. Comment la définissez-vous ?

 
Alexey Viktorov:

Votre tâche sera plus facile si vous pouvez expliquer comment vous identifiez l'extremum local.

Si l'indicateur Fractals convient, vous vérifiez sur la deuxième barre la présence d'une fractale et à partir de cette valeur vous calculez les 30 points ou pips nécessaires... comme vous voulez.

Je pense que l'indicateur fractal ne me convient pas. Il manquera de nombreuses commandes.

L'ordre ouvert par mon code avec le contrôle du prix à chaque tick est surligné en bleu. Je pense que l'indicateur fractal ne me dit rien de nécessaire dans ce cas.

 
Alexey Viktorov:

Un extrême est un minimum local ou un maximum local. Comment la définissez-vous ?

Dans mon cas, c'est un minimum.

 
ANDREY

Qu'est-ce que c'est ?

Pr

comment est-il initialisé ?

 
MakarFX:
Cela dépend de l'endroit où vous le mettez.

Par exemple entre l'ouverture de deux ordres adjacents. C'est-à-dire qu'il faut se souvenir de la barre du dernier ordre ouvert et ouvrir un ordre dès que le prix est supérieur au minimum que cette fonction définit de 30 points. Mais dans ce cas, cette fonction doit être appelée à chaque tick. Remplacez le "shill" par le "soap.......".

 
ANDREY:

Changement d'un shill pour un soap.......

Encore pire...il faut toujours connaître le nombre de barres


Je l'ai modifié...essayez

 
MakarFX:

Qu'est-ce que c'est ?

comment est-il initialisé ?

double LoU,Pr;
void OnTick()//484
{
Tick++;
if (Bid<LoU)
LoU=Bid;
//**************************************************************||TimeCurrent()==1262568096
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Print("---------------------КАЖДЫЙ ТИК ------Tick---------=     "    ,   Tick);
Pr=LoU;
LoU=Bid;
}
}
Pr est une variable pour que seulement 1 ordre soit ouvert après 30 pips. Sans cette variable, ils s'ouvrent à chaque tique
Raison: