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

 
Bonne journée à tous.
J'ai écrit un code simple dans mql4 qui ouvre un ordre sur un graphique minute chaque fois que le prix augmente de 30 pips à partir du minimum local le plus proche. Après l'ouverture de l'ordre, le plancher local devient le prix d'ouverture de l'ordre.
void OnTick()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
}
}

Ce que je n'aime pas dans mon code..... Qu'il doit être exécuté sur presque chaque tic. Je peux améliorer ce code et il ne sera pas exécuté sur chaque tick, mais sur presque chaque minute de bougie. Cela signifie que le programme doit faire un travail énorme pour trouver le point où l'ordre est ouvert.

Q :

Pourriez-vous me suggérer une structure de langage qui m'aiderait à trouver le point d'ouverture de l'ordre mentionné dans mon code sans essayer les ticks ou les chandeliers, ou avec un minimum d'essai possible, c'est-à-dire pour que le programme passe le moins de temps possible à trouver le point d'ouverture.

Merci pour votre aide.

 
ANDREY:
Bonne journée à tous.
J'ai écrit un code simple dans mql4 qui ouvre un ordre sur un graphique minute chaque fois que le prix augmente de 30 pips à partir du minimum local le plus proche. Après l'ouverture de l'ordre, le plancher local devient le prix d'ouverture de l'ordre.

Ce que je n'aime pas dans mon code..... Qu'il doit être exécuté sur presque chaque tic. Je peux améliorer ce code et il ne sera pas exécuté sur chaque tick, mais sur presque chaque minute de bougie. Cela signifie que le programme doit faire un travail énorme pour trouver le point où l'ordre est ouvert.

Q :

Pourriez-vous me suggérer une structure de langage qui m'aiderait à trouver le point d'ouverture de l'ordre mentionné dans mon code sans essayer les ticks ou les chandeliers, ou avec un minimum d'essai possible, c'est-à-dire pour que le programme passe le moins de temps possible à trouver le point d'ouverture.

Merci pour votre aide.

//+------------------------------------------------------------------+
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Merci pour votre aide.

Mais le résultat de mon code n'est pas le même que le mien. Voici le résultat de mon code sur GBPUSD sur un graphique minute sur une journée du 04.01.2010 au 05.01.2010.
Voici le résultat de mon code

Et ceci est le résultat de votre code

 
ANDREY:

Merci pour votre aide.

Mais le résultat de mon code n'est pas le même que le mien. Voici le résultat de mon code sur GBPUSD sur un graphique minute sur une journée du 04.01.2010 au 05.01.2010.
Voici le résultat de mon code

C'est le résultat de votre code

Afficher le code OnInit()

 
MakarFX:

Montre-moi le code OnInit().

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

J'ai juste copié votre code dans MetaEditor et j'ai obtenu le résultat, qui est ci-dessus.

Votre code ouvre un ordre et compte 30 pips vers le bas (jaune), et le mien compte vers le bas (bleu).

Merci pour votre aide

 
ANDREY:

Je viens de copier votre code dans le MetaEditor et j'ai obtenu le résultat ci-dessus.

Merci pour votre aide.

J'ai besoin de votre code pour comprendre le point.

Dans votre code, le LoU change à chaque tick si le prix baisse, mais dans le mien, le LoU change seulement après l'ouverture d'une transaction.

 
MakarFX:

J'ai besoin de votre code pour comprendre ce dont il s'agit.

Dans votre code, le LoU change à chaque tick si le prix baisse, alors que mon LoU ne change qu'après l'ouverture d'une transaction.

Vous avez 30 pips du mauvais côté. J'ai ajouté une image au post précédent
Et mon code est dans le premier post. Dès que le prix a dépassé 30 pips du minimum local *bottom-up* - ouvrir un ordre. Et mon code ouvre la commande exactement comme je le souhaite. Mais je veux qu'il passe un minimum de temps pour cela.

D'accord, dans mon code, le LoU change à chaque tick après l'ouverture de chaque ordre. Sans elle, le programme ne trouvera pas le minimum local le plus proche, à partir duquel nous devons compter 30 pips. Je pense comment exclure le changement de LoU à chaque tick ou à chaque bougie minute, mais les ordres seront ouverts aux mêmes endroits où mon code les ouvre.
 
ANDREY:

Je viens de copier votre code dans MetaEditor et j'ai obtenu le résultat ci-dessus.

Votre code ouvre un ordre et compte 30 pips à la baisse (jaune), et le mien compte à la baisse (bleu).

Merci pour votre aide

Mon erreur... remplacer

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

Mon erreur... remplacer

Merci pour votre aide.
Je l'ai fait. Il ouvre un grand nombre d'ordres (27657 ordres), parmi lesquels se trouvent ceux dont j'ai besoin

Voici une capture d'écran des commandes initiales

 
MakarFX:

Mon erreur... remplacer

Voici votre code avec la ligne modifiée.

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
Comment faire pour que le code n'ouvre que les commandes requises ?