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

 
TarasBY:

2) Il ne peut pas y avoir de fractales UPPER et LOWER sur la même barre au même moment, respectivement, vérifiez

appartient à la catégorie des idioties de programmeurs.

Donc ces citations sont seulement pour les idiots.


 
TarasBY:

2) Il ne peut pas y avoir de fractales UPPER et LOWER sur la même barre au même moment, respectivement, vérifiez

appartient à la catégorie des idioties de programmeurs.


Les deux fractales peuvent être sur la même barre.
 
Vinin:
Les deux fractales peuvent être sur la même barre.
il voulait dire les minutes, mais a oublié les mois
 
Bonjour

Il y a la ligne suivante dans le code

 if (G_time_344 == Time[0]) return (0);
Si je comprends bien, il est responsable du fait que l'EA retarde le recalcul jusqu'à ce qu'une nouvelle barre apparaisse. Jusqu'à ce que l'heure d'ouverture de la barre de zéro change, le recalcul s'arrête.

Par conséquent, si j'ouvre un EA sur les minutes, il sera recalculé à chaque nouvelle minute. Et si je l'ouvre sur H4, il sera recalculé toutes les 4 heures.

Comment écrire cette ligne correctement, pour que l'EA ne prenne pas l'heure d'ouverture de la barre courante, c'est-à-dire la barre à laquelle le terminal est ouvert, mais celle que je spécifierai dans les paramètres ? C'est-à-dire que je place l'EA sur H4, par exemple, et il recalculera toutes les 5 minutes, parce que je l'ai réglé ainsi. Ou chaque minute.


 
_new-rena:
il voulait dire les minutes, mais a oublié les mois

Quelle est la différence entre les minutes et les mois ?


 
evillive:
De quoi se plaint-il dans le journal des modifications ? "Ouvre stupidement de nouveaux ordres en attente" car il n'y a pas de limite, mais il y a un OrderSend.
Aucune erreur, juste des triangles jaunes.
 
AlexeyVik:

Quelle est la différence entre les minutes et les mois ?

Je suis d'accord, il y a aussi de beaux moments sur la M1. Mais sur les mois, chaque barre est comme ça.
 
Pas d'autres questions, je me suis débrouillé tout seul.
 
TarasBY:

1) Toute stratégie doit être définie par le nombre d'ordres ouverts en même temps. Par conséquent, avant d'ouvrir la prochaine commande, nous devons vérifier combien sont déjà ouvertes.

2) Sur une barre, il ne peut pas y avoir de fractales UPPER et LOWER en même temps, respectivement, le contrôle est classé comme étant

appartient à la catégorie des idioties de programmeurs.

3) Avant d'écrire les conditions de retour des valeurs de l'indicateur de tampon, vous devez savoir exactement quelle valeur est "vide" pour celui-ci ? Avez-vous vérifié qu'il est à zéro ?

4) La construction.

Bien qu'elle fonctionne (dans la plupart des cas), elle n'est pas naturelle, car il s'agit d'une idée de "libre arbitre" du développeur, et elle est peu informative pour l'opérateur. Une alternative - le suivi d'un nouveau bar.

5) Vous devez commencer par les bases, car ceci :

Cela indique que vous ne comprenez pas du tout ce que vous écrivez.

La meilleure façon de comprendre est d'étudier le fonctionnement des codes d'autres personnes et de les modifier pour vos propres besoins. Bonne chance.

Il les affiche tels qu'ils sont écrits, point par point. Il ne les modifie pas, ce dont vous n'avez pas dit un mot. Voici le code complet :
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);       //верхний фрактал,формируется на третьей свече
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);     //нижний фрактал,формируется на третьей свече                                                   
//----
  if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        {
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        }
     
       }   
   else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
         {
         for (pos=1;pos==OrdersTotal();pos++)
             {
             OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
             if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
               {
               OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
               } 
             }
         }
    
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }}
//+------------------------------------------------------------------+
J'essaie d'écrire comme j'ai lu, regardé, compris. Votre critique me fait penser à un manuel MQL4 - je ne le comprends que si quelqu'un me l'explique.
 
if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
       } // это пара к той...
      }
     


Et ce code

if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака

il est préférable d'écrire dans init() et mieux encore pas comme ceci

double   point; // на уровне глобальных переменных

int OnInit()
{
   point = Digits%2 == 0 ? _Point : _Point * 10;
}

et ensuite dans start()

tp = High[3]+TP*point;