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

 
Artyom Trishkin:

Dans le testeur sur un autre symbole ? Ou en démo/réel sur un autre symbole ? Ou dans le testeur sur ce symbole ? Ou sur démo/real sur ce symbole ?

Pourquoi faut-il que vous sortiez tout de vous ?

Où voulez-vous en venir ? Quelle différence cela fait-il de savoir où vous l'avez essayé ? La question est de savoir si Point = 0. Et si c'est le cas, comment dois-je écrire le code correctement pour ne pas rencontrer une erreur : division par zéro?
 
LuckySith:

Désolé, je suis très ringard - je ne comprends pas vraiment.
Peut-être que vous avez l'indicateur le plus simple avec un code de certains, j'ai une analogie à comprendre ? Parce que je n'en ai pas trouvé.

J'ai un code très simple qui met des points au milieu de la barre. Comment faire pour que le texte apparaisse lorsque je le survole, ou une boîte, peu importe.



#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Black
//---- input parameters
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars;
//----  
   for(int i=limit; i>=0; i--)
     {
      double       fabody0 = fabs(Close[i]-Open[i]);
      double       fabody1 = fabs(Close[i+1]-Open[i+1]);
      double       fabody2 = fabs(Close[i+2]-Open[i+2]);
      double       fabody3 = fabs(Close[i+3]-Open[i+3]);
      double       fabody4 = fabs(Close[i+4]-Open[i+4]);
      double       fabody5 = fabs(Close[i+5]-Open[i+5]);
      double       fabody6 = fabs(Close[i+6]-Open[i+6]);
      double       fabody7 = fabs(Close[i+7]-Open[i+7]);
      if((fabody0>fabody1) && (fabody0>fabody2) && (fabody0>fabody3) && (fabody0>fabody4) && (fabody0>fabody5) && (fabody0>fabody6) &&(Volume[i]>Volume[i+1]))
      {  
         if (((Close[i]>Open[i])&&(Low[i]+(High[i]-Low[i])/2>Low[i+1]+(High[i+1]-Low[i+1])*0.9))||((Close[i]<Open[i])&&(Low[i]+(High[i]-Low[i])/2<Low[i+1]+(High[i+1]-Low[i+1])*0.1)))
         ExtMapBuffer1[i]=(iHigh(Symbol(),0,i)+iLow(Symbol(),0,i))/2;
      }
     }
//----
   return(0);
  }
Essayez
Dossiers :
gmxdk8j.mq4  6 kb
 
Gevorg Hakobyan:
Où voulez-vous en venir ? Quelle différence cela fait-il de savoir où vous l'avez essayé ? La question est de savoir si Point = 0. Et si c'est le cas, comment dois-je écrire un code correct pour ne pas rencontrer une erreur : la division par zéro?
Faites comme vous voulez.
Il faut donc vérifier que le diviseur est à zéro avant de diviser.
Je pensais que vous étiez intéressé par la cause, pas l'effet, et la béquille appropriée.
 
Artyom Trishkin:
Faites comme vous voulez.
Il faut donc vérifier que le diviseur est à zéro avant de diviser.
Je pensais que vous étiez intéressé par la cause, pas l'effet, et la béquille appropriée.
Je n'ai pas lu tout le dialogue, mais je soupçonne un problème d'impression de la cinquième décimale.
 
Alexey Viktorov:
Je n'ai pas lu tout le dialogue, mais je soupçonne un problème d'impression de la cinquième décimale.
Non, il divise par Point() et obtient une division par zéro.
C'est pourquoi j'essaie d'obtenir une réponse cohérente sur la manière et l'endroit où il obtient les données du symbole.

 
Artyom Trishkin:
Non, il divise par Point() et obtient une division par zéro.
J'essaie d'obtenir une réponse claire à la question de savoir comment et où il prend les données pour le symbole.

si(v=="NZD")
{
h=(iClose("NZDUSD",p,b)-iOpen("NZDUSD",p,b))/MarketInfo("NZDUSD",MODE_POINT)+
(iOpen("EURNZD",p,b)-iClose("EURNZD",p,b))/MarketInfo("EURNZD",MODE_POINT)+
(iOpen("GBPNZD",p,b)-iClose("GBPNZD",p,b))/MarketInfo("GBPNZD",MODE_POINT)+
(iOpen("AUDNZD",p,b)-iClose("AUDNZD",p,b))/MarketInfo("AUDNZD",MODE_POINT)+
(iClose("NZDJPY",p,b)-iOpen("NZDJPY",p,b))/MarketInfo("NZDJPY",MODE_POINT)+
(iClose("NZDCAD",p,b)-iOpen("NZDCAD",p,b))/MarketInfo("NZDCAD",MODE_POINT)+
(iClose("NZDCHF",p,b)-iOpen("NZDCHF",p,b))/MarketInfo("NZDCHF",MODE_POINT) ;
}
 
Alexey Viktorov:
Je n'ai pas lu tout le dialogue, mais je soupçonne un problème d'impression de la cinquième décimale.
Est-ce que ça pourrait être le problème ?
 
Gevorg Hakobyan:
Est-ce que ça pourrait être le problème ?
Non. Il s'agit uniquement de l'invisibilité du cinquième chiffre à l'impression et dans les alertes.
 
Alekseu Fedotov:
Essayez
En général, c'est ce dont vous avez besoin, mais le problème est que la description sera assez longue, et cette méthode peut littéralement écrire quelques mots - le reste n'apparaît pas.
 

Bonjour.

Aidez-moi, s'il vous plaît.

Maintenant le lot de chaque ordre suivant augmente en 1, 2, 3, 4, 5...

Je veux que le lot de chaque commande augmente non pas à chaque commande, mais par tranches de 3, donc 1, 1, 1, 1, 2, 2, 2, 3, 3, 3...


extern double   LotStop        = 0.01;
extern double   Plus_LotStop   = 0.01;
extern double   Plus_N_ORD  = 3;        //каждые N ордеров
void OnTick()
  {
//---
      for (int i=1; i<=OrdersStop; i++)
   {
         if((Close[1]<Open[1]&&Close[2]>Open[2]&&NumberOfPositions(Symbol(), -1,_Magic)<1))
         {
            OPENORDER (OP_BUYSTOP,PriceBS,LOTs,_Magic,i);
            numB++;
            PriceBS = NormalizeDouble(PriceBS+Step_Stop*Point,Digits);
          
            OPENORDER (OP_SELLSTOP,PriceSS,LOTs,_Magic,i);
            numS++;
            PriceSS = NormalizeDouble(PriceSS-Step_Stop*Point,Digits);
         }
      
      LOTs=LOTs+Plus_LotStop;
      }
  }