Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 105

 
Forexman77:


Bonjour !

Désolé de remettre sur le tapis un sujet relativement ancien. J'ai tout compris avec le code.

Maintenant, j'ai une énigme, comment ouvrir une transaction. Par exemple, juste après une plage donnée, nous recherchons

Le prix est inférieur au maximum d'un certain nombre de points. Nous ouvrons un marché.

J'ai essayé d'ajouter un tel code et de l'exécuter dans le testeur, mais il n'ouvre pas les transactions.

Que dois-je faire ?

Cela devrait fonctionner, je ne l'ai pas testé moi-même, car le terminal est occupé à optimiser un autre EA pour l'instant.

#define magic 123456789
extern int StartHour=16;
extern int StartMinute=1;
extern int StopHour=17;
extern int StopMinute=59;
bool Flag=true; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеров
double lots=0.1;// размер лота
double sl=100;  // стоплосс в пунктах
double tp=100;  // тейкпрофит в пунктах
int ticket=-1;
int OldBar;
int init() {
 sl=NormalizeDouble(sl*Point,Digits);//стоплосс в поинтах
 tp=NormalizeDouble(tp*Point,Digits);//тейкпрофит в поинтах
 return(0);}
int deinit() {return(0);}
int start(){
 static double Maximum=-1;
 int StartTime=StartHour*60+StartMinute;
 int StopTime=StopHour*60+StopMinute;
 if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
 int CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дня
 datetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970
 if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер
// В 22:55 Принудительно закрываем ордер
 if(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,30,Magenta)) ticket=-1;
 if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитан
  datetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
  int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
  int count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  count=start-count;// Сколко баров длится временной интервал
  Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
 }
 if(Maximum>0 && Flag) {
  double signal = Maximum - Bid;
  if (signal-12*Point>0.0) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL                                       
   ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Ask+sl,Ask-tp,"My order",magic,0,Blue);
   if(ticket>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.         
  }
 }
 return(0);
}
 
Sepulca:

Cela devrait fonctionner, je ne l'ai pas testé moi-même car le terminal est occupé à optimiser un autre EA.

Merci !
 
Sepulca:

Cela devrait fonctionner, je ne l'ai pas testé moi-même car le terminal est occupé à optimiser un autre EA.


// В 22:55 Принудительно закрываем ордер
 if(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,
   30,Magenta)) ticket=-1;
Puis-je supprimer cette ligne ou le système ne fonctionnera pas sans elle ? Je ne comprends pas pourquoi je dois fermer la commande ?
 
Forexman77:

Cette ligne peut-elle être supprimée ou le système ne fonctionnera-t-il pas sans elle ? Je ne comprends pas pourquoi je dois fermer une commande ?

Bien sûr vous pouvez le supprimer, c'est uniquement pour le tester et non pour multiplier le nombre d'ordres ouverts. Il s'agit simplement d'un exemple d' entraînement d'une EA. Il n'ouvre pas plus d'un ordre de VENTE par jour. Et dans votre EA, vous devez décider vous-même comment clôturer les ordres : par stop loss, take profit ou autres conditions. L'heure de 22:55 est choisie parce que de nombreuses sociétés de courtage augmentent considérablement le spread, en particulier le vendredi après 23h00. Vous pensez peut-être que nous devrions ouvrir plus d'une commande par jour. Et ceci est un exemple pour une commande placée sur le côté. Nous devrions chercher le minimum par analogie. Ce code à titre d'exemple, j'espère qu'il facilitera la création de ma propre EA)
 

Bonjour !

Je suis un imbécile, mais je veux changer quelque chose dans le code moi-même...

Un conseil, si vous voulez bien...

J'ai quelques questions à vous poser :

1. Comment ajouter une variable "stop loss" à mon EA ? Je veux pouvoir la modifier, bien sûr.

2. Comment permettre à mon EA d'ajouter un commentaire pour chacune de mes transactions ?

3. Comment ajouter un numéro Magic à mon EA ?

 
K-o-t:

Bonjour !

Je suis un imbécile, mais je veux changer quelque chose dans le code moi-même...

Un conseil, si vous voulez bien...

J'ai quelques questions à vous poser :

1. Comment ajouter une variable "stop loss" à mon EA ? Je veux pouvoir la modifier, bien sûr.

2. Comment permettre à mon EA d'ajouter un commentaire pour chacune de mes transactions ?

3. Comment ajouter un EA avec un numéro magique ?

1. double externe StopLoss=100.0;//ajoute la variable stop loss

2-3. int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder ,OpenPriceOfOrder,Slippage ,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit,YourMagicNumber,0, CLR_NONE) ;

4. LIRE !

 
artmedia70:

Voici le joint :

 for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют.. 
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
En fait, oui, j'ai jeté un nouveau regard ce matin. Il s'avère que le premier ordre, qui a plus de profit que nécessaire, donne un signal pour continuer la fonction (c'est-à-dire qu'il n'est pas manqué) et alors, bien sûr, tout sera faux.
 

Bonjour !

Pouvez-vous me dire comment configurer l'optimisation de l'Expert Advisor pour qu'il affiche également les résultats négatifs de la passe ?

 
filpan:

Bonjour !

Pouvez-vous me dire comment configurer l'optimisation de l'Expert Advisor pour qu'il affiche également les résultats négatifs de la passe ?

Dans l'onglet des résultats d'optimisation, faites un clic droit sur n'importe quel résultat et décochez "ne pas afficher les résultats inutiles" (ou quelque chose comme ça).
 
Je l'ai trouvé, merci !