[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 12

 
c'est là
Dossiers :
 
igrok2008 >> :

Dans votre commentaire précédent, vous avez souligné ma faille, à propos des niveaux d'achat et de vente incorrects, qui (si je comprends bien) nécessite d'inverser les signes < >.

Pour l'ICC, il est nécessaire ou non de préciser -100 ????????????????????????

Prenez-le et mettez-le dans le testeur

et il montrera où le résultat est meilleur

là où il y a un moins ou là où il n'y en a pas

et quel nombre finira par être 250 ou -250

 

Veuillez écrire ou suggérer comment faire pour qu'un ordre s'ouvre quand une nouvelle barre apparaît et se ferme quand elle se ferme ? J'ai mal à la tête, je n'arrive pas à comprendre. ))))

 
vadim2304 >> :

Veuillez écrire ou suggérer comment faire pour qu'un ordre s'ouvre quand une nouvelle barre apparaît et se ferme quand elle se ferme ? J'ai déjà mal à la tête, je n'arrive pas à y penser. ))))

if ( isTime(Period()*60)) { закрытьОткрытыйОрдер(); открытьНовыйОрдер()};


bool isTime(int sec){
   bool res = false;
   static datetime time = 0;
   double min = 0;
   if (TimeCurrent() >= time){
      min = MathFloor( sec / 60);
      if ( min==0) min = 1.0;         
      time = iTime(NULL,PERIOD_H1,0) + (MathFloor(Minute()/ min) + 1) * min * 60;
      res = true;
   } 
   return( res);
}
 
keekkenen >> :

J'ai compris que c'est pour une barre avec la trame temporelle H1, mais où écrire le code pour les prix d'ouverture et de fermeture, après if (isTime(Period()*60)), et qu'est-ce que cela signifie, s'il vous plaît déchiffrez )))))

 

malentendu... Period()*60 est pour n'importe quel TF - tout est exprimé en secondes, c'est à dire

sur M1 - 60 sec, M5 - 300 sec etc. (parce que Period() sur M1 renvoie 1, sur M5 - 5...)

Je l'ai écrit au sens figuré.

if ( isTime(Period()*60)) { закрытьОткрытыйОрдер(); открытьНовыйОрдер()};

La signification de ceci - quand une nouvelle barre apparaît, vous pouvez fermer un ordre ouvert et en ouvrir un nouveau.

Si vous ne pouvez pas le faire vous-même, jetez un coup d'œil au tutoriel https://book.mql4.com/ru/.

 
keekkenen >> :

malentendu... Period()*60 est pour n'importe quel TF - tout est exprimé en secondes, c'est à dire

sur M1 - 60 sec, M5 - 300 sec, etc. (comme Period() sur М1 renvoie 1, sur М5 - 5...)

Je l'ai écrit au sens figuré.

L'idée est de fermer un ordre ouvert et d'en ouvrir un nouveau.

Si vous n'êtes pas en mesure de le faire vous-même, jetez un coup d'œil à "https://book.mql4.com/ru/" pour un tutoriel.


Et s'il n'y a pas d'ordre ouvert (il les fermera après cette barre), et qu'il suffit d'ouvrir un nouvel ordre, il n'y aura pas d'erreur ?

 
satop >> :

Prenez-le et mettez-le dans le testeur

et ça te montrera où les résultats sont meilleurs.

où il y a un moins ou où il n'y en a pas.

et ça te montrera si c'est 250 ou -250.

Ne sois pas en colère, satop. Tout le monde était un débutant, tout le monde posait des questions stupides. Pensez à l'école. Il devait y avoir des geeks. Ils étaient curieux, ils voulaient apprendre. Avec le temps, bien sûr, ils les ont harcelés, mais cela montre que ceux qui étaient en colère ont tout saisi et compris plus rapidement. Mais les deux méthodes d'enseignement ont droit à la vie. Caesar to Caesar......No offence.......Je ne nie pas que je suis un imbécile, mais je suis curieux. Sans vouloir vous offenser...

 
vadim2304 >> :

Et s'il n'y a pas d'ordre ouvert (il les fermera après cette barre) et que nous ouvrons un nouvel ordre, il n'y aura pas d'erreur ?

Le problème est que la fonction OrderClose() qui ferme l'ordre prend le numéro d'ordre comme premier paramètre, et le numéro d'ordre ne peut être obtenu qu'en appelant OrderSelect() aux ordres existants, donc en général la fermeture ressemble à ceci...

bool res = false;
int slippage = 3;

for (int i = 0; i < OrdersTotal(); i++) {
   if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES) &&
         OrderSymbol()==Symbol()){

      while (IsTradeContextBusy() || !IsTradeAllowed())
         {Comment("Торговый поток занят ...");Sleep(2000);}               
      res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), slippage,CLR_NONE);
      if ( res){  
         res = true; Comment("Ордер закрыт !");              
      }else{
         Comment("Ошибка - ", msg);
      }
   }
}
  


Si OrdersTotal() = 0, c'est-à-dire s'il n'y a pas d'ordres ouverts, alors la boucle for se terminera immédiatement...

 
igrok2008 >> :

Ne sois pas en colère, satop. Tout le monde était un débutant, tout le monde posait des questions stupides. Pensez à l'école. C'est sûr qu'il y avait des geeks. Ils étaient curieux, ils voulaient apprendre. Avec le temps, bien sûr, ils les ont harcelés, mais cela montre que ceux qui étaient en colère ont tout saisi et compris plus rapidement. Mais les deux méthodes d'enseignement ont droit à la vie. Caesar to Caesar......No offence.......Je ne nie pas que je suis un imbécile, mais je suis curieux. >> sans vouloir vous offenser.

Qu'est-ce qui vous fait penser que je suis en colère ?

C'est juste ma façon d'expliquer que

en prenant tout signe d'inégalité et en courant

>> dans le testeur, vous pouvez obtenir un positif

le résultat avec un certain niveau, et peu importe quel niveau

positive ou négative. Et quand on lui demande

s'il faut prendre le niveau avec ou sans le moins,

Malheureusement, il n'y a pas de distinction claire.

Raison: