Questions des débutants MQL4 MT4 MetaTrader 4 - page 180

 
Igor Makanu:

Oui, je suis du même avis, mais il n'y a pas que l'historique et le nombre de tampons d'indicateurs - par exemple, toujours en ce qui concerne l'allocation de mémoire, si MT4 a englouti toute la mémoire, alors il ralentit - apparemment, il commence à libérer des zones de mémoire.

Certainement, les développeurs peuvent répondre, mais nous parlons de MetaTrader 4, et ici ...

 
Alexander Fedosov:

Pourquoi faire des calculs dans le code ?

Ne faites pas de calculs - le sujet n'était pas intelligent, et j'étais intéressé de vérifier ce que fait l'optimiseur, donc j'ai rédigé le code suivant

Vous pouvez l'ajouter à votre code de la manière suivante :

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

par exemple, il suffit d'écrire les paramètres d'optimisation dans le fichier, s'il se bloque, vous pouvez lire dans le fichier les paramètres de la dernière passe et l'heure du fichier sera l'heure du "dernier souffle" du testeur.

 
Artyom Trishkin:

Les développeurs seront en mesure de répondre sans ambiguïté, mais nous parlons de MetaTrader 4, et il ...

Et ici... rien ne va changer. Nous utilisons ce que nous avons.

 

Bonjour, Pouvez-vous me dire si le système de trading ouvre une position uniquement à l'ouverture d'une nouvelle barre horaire sous certaines conditions ? Je dois m'assurer que si je ferme la position en utilisant un stop loss sur la barre actuelle, la transaction ne se rouvrira pas. Je l'ai mis en œuvre de cette façon :

if (OrdersTotal()==0 && ticket!=-1) // aucun lot ouvert mais le ticket existe

{

si (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime() ; // heure de clôture de la commande

datetime tob=iTime(NULL,PERIOD_H1,0) ; // Heure d'ouverture de la barre actuelle

if (tob>tct) // ne permet pas d'ouvrir un nouvel ordre si la transaction s'est clôturée sur la même barre qu'elle s'est ouverte.

{

FONCTION POUR OUVRIR UNE POSITION

}


Dans le testeur de stratégie, les positions réouvertes ne sont plus ouvertes, mais lors de la négociation en direct, une position est ouverte. Pouvez-vous me dire ce qui ne va pas ?))

 
kmerlin:

Bonjour, Pouvez-vous me dire si le système de trading ouvre une position uniquement à l'ouverture d'une nouvelle barre horaire sous certaines conditions ? Je dois m'assurer que si je ferme la position en utilisant un stop loss sur la barre actuelle, la transaction ne se rouvrira pas. Je l'ai mis en œuvre de cette façon :

if (OrdersTotal()==0 && ticket!=-1) // aucun lot ouvert mais le ticket existe

{

si (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime() ; // heure de clôture de la commande

datetime tob=iTime(NULL,PERIOD_H1,0) ; // Heure d'ouverture de la barre actuelle

if (tob>tct) // ne permet pas d'ouvrir un nouvel ordre si la transaction s'est clôturée sur la même barre qu'elle s'est ouverte.

{

FONCTION POUR OUVRIR UNE POSITION

}


Dans le testeur de stratégie, les positions réouvertes ne sont plus ouvertes, mais lors de la négociation en direct, une position est ouverte. Pouvez-vous me dire ce qui ne va pas ?)

C'est le cas ?

 
Alexander Fedosov:

C'est le cas ?


pas vraiment. Qu'est-ce qui ne va pas avec ma variante ? La condition principale est de ne pas pouvoir rentrer sur la bougie horaire en cours ! C'est une condition assez simple, qu'est-ce qui ne va pas et pourquoi ça ne marche pas ?

 
kmerlin:

pas vraiment. Qu'est-ce qui ne va pas avec ma variante ? La condition principale est qu'il n'est pas possible de rentrer sur la bougie actuelle ! C'est une condition assez simple, qu'est-ce qui ne va pas et pourquoi ça ne marche pas ?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

Et quel ticket avez-vous choisi dans OrderSelect?

 
Alexander Fedosov:

Quel ticket avez-vous sélectionné dans OrderSelect ?

Le billet est envoyé en dernier... Lorsqu'un ordre est ouvert, aucun nouvel ordre ne peut être ouvert dans le système et aucun ordre en attente ne peut être placé. Le dernier ticket est donc le dernier ordre d'arrêt ou de profit.
 
kmerlin:
Le ticket est transmis à la dernière commande. Lorsqu'un ordre est ouvert, l'ouverture de nouveaux ordres est impossible dans le système, et les ordres en attente ne peuvent pas non plus avoir lieu. Ainsi, le dernier ticket est le dernier ordre au stop ou au profit.

Comment passe-t-on le ticket de la dernière commande ?

Et OrdersTotal() transmet le nombre total d'ordres ouverts et en attente.

Voici la nouvelle barre de l'échelle de temps actuelle.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

Comment passe-t-on le ticket de la dernière commande ?

Et OrdersTotal() transmet le nombre total d'ordres ouverts et en attente.

Voici la nouvelle barre de l'échelle de temps actuelle.

Le ticket est déclaré comme une variable globale. Un ticket est passé pour acheter ou vendre. Dans mon système, il n'est pas possible d'ouvrir plusieurs ordres, un seul peut être ouvert, et il ne peut pas non plus y avoir d'ordre en attente. Par conséquent, le dernier ticket, tel que je le comprends, est un ordre fermé au profit ou au stop.

ok, j'ai la tête qui tourne... je repenserai à votre conseil demain.

Raison: