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

 
MakarFX:

mql4 est également possible ici

Je ne pense pas que ce soit ça. Le conseiller expert crée un objet graphique sous la forme d'une ligne de tendance :

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

Mais après avoir redémarré le terminal, seuls les paramètres du premier point sont disponibles. Les paramètres du point précédent n'apparaîtront qu'après la formation du nouveau point. Je pense que je commence à comprendre - je dois trouver non seulement le dernier point calculé par l'indicateur mais aussi le précédent. Comment puis-je sauter le dernier (premier) point et calculer le suivant ? Je trouve le premier point ainsi :

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

Il me semble que ce n'est pas le cas. L'EA crée un objet graphique sous la forme d'une ligne de tendance :

Mais après avoir redémarré le terminal, seuls les paramètres du premier point sont disponibles. Les paramètres du point précédent n'apparaîtront qu'après la formation d'un nouveau point. Je pense que je commence à comprendre - je dois trouver non seulement le dernier point calculé par l'indicateur mais aussi le précédent. Comment puis-je sauter le dernier (premier) point et calculer le suivant ? Je trouve le premier point ainsi :

Mettez un compteur.

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

En général, il faut créer un tableau et le remplir, puis prendre le point requis dans le tableau.

 
Vitaly Muzichenko:

Définir un compteur

Et en général, faites un tableau et remplissez-le, puis prenez le point désiré dans le tableau.

Merci. Il me semble que le compteur que vous avez fourni est exactement ce dont nous avons besoin et, surtout, il est simple.

Pendant que mon site était en cours de mise à jour, j'ai essayé la variante que vous suggérez. Tout fonctionne. Merci beaucoup. C'est si simple, et je commençais à m'y retrouver. De plus, les fonctions de prix et d'heure ci-dessus ont été simplifiées.

 
MakarFX:

J'ai souligné ce qui n'allait pas

le surlignage jaune est inutile et peut être supprimé.

La fonction surlignée en vert doit se trouver en dehors de OnStart(),

là où vous voulez définir une nouvelle barre, utilisez la surbrillance marron.

Merci !)

 

Bonjour à tousJe vous prie de m'aider à trouver un code fonctionnel de trailing stop sur parabolique. J'aimerais savoir comment ajouter cette fonction à mon conseiller expert, afin qu'il soit suivi lorsque le prix augmente d'un certain nombre de points ? Je remercie d'avance, et demande aux personnes expérimentées et compétentes de ne pas passer à côté - le Graal je dois le terminer d'une manière ou d'une autre ;-)

 
DanilaMactep:

Bonjour à tousJe vous prie de m'aider à trouver un code fonctionnel de trailing stop sur parabolique. Je veux demander comment ajouter cette fonction à mon conseiller expert, de sorte qu'il soit suivi lorsque le prix augmente d'un certain nombre de points ? Merci d'avance, et s'il vous plaît, ne passez pas à côté de personnes expérimentées et bien informées - je devrais en quelque sorte ajouter le Graal ;-)

comme ceci

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

Pouvez-vous me dire comment mettre à jour le jour du mois pour refléter le nouveau jour de l'année.


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

Je pensais donc que l'heure de début correspondrait au nouveau jour de l'année. Mais il y a la vieille date...

Hmm... probablement plus facile d'enlever des secondes...

 
leonerd:

Je ne peux pas réfléchir maintenant, je vais vous donner un exemple, peut-être que vous aurez une idée.

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

une idée https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

comme ceci

Makar, merci beaucoup pour le code - j'ai réécrit le code en passant des variables externes à icastom au lieu de valeurs fixes. Veuillez clarifier, intTral = 50; est-ce la distance à laquelle le chalut sera maintenu ou est-ce la distance en pips après laquelle le chalut sera activé ?

 
DanilaMactep:

Makar, merci beaucoup pour le code - j'ai réécrit le code en passant des variables externes à icastom au lieu de valeurs fixes. Veuillez clarifier, est-ce que intTral = 50; est-ce que c'est la distance de profit en pips après laquelle le chalut est activé ?

il s'agit de la distance de profit en pips après laquelle le chalut est activé.