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

 
//+------------------------------------------------------------------+
//|                                                         SSMA.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   1
//--- plot average
#property  indicator_label1  "average"
#property  indicator_type1   DRAW_ARROW
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
extern int      CountMA=200;
extern int      Period_start =1;
extern int      Period_shift =5;
//--- indicator buffers
double         averageBuffer[];
double         maxBuffer[];
double         minBuffer[];
double         Label1Buffer[];
double         scBuf[][2];

double tmparray[],tmparrayF1[];
//double tmparrayD[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  // массив tmparrayF1[] является индикаторным буфером
   SetIndexBuffer(0,tmparrayF1);
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   
   ArrayResize(tmparray, CountMA+1);  // массив для рассчитанных SMA 
   ArrayResize(scBuf, CountMA+1);     // массив для значений повторений на цене  
   ArrayResize(tmparrayF1, CountMA+1); // массив для перевода в одномерный массив для отображения на графике

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if (rates_total<Period_start+Period_shift*CountMA+1) return(0);
   ArrayInitialize(tmparray,0);
   ArrayInitialize(scBuf,0);
   
   int limit=rates_total-prev_calculated;
   if (limit>1) limit=rates_total-(Period_start+Period_shift*CountMA+1);
   
   double min=-99999,max=99999, sum=0;
   int count, countMA,schet;
   
   for (int i=limit;i>=0;i--)
   {
      sum=0;
      count=0;
      countMA=0;
      // формируем массив со значения машек
      for (int j=0;j<Period_start+Period_shift*CountMA;j++)
      {
         sum+=(High[i+j]+Low[i+j])*0.5;
         count++;
         if (count==Period_start+Period_shift*countMA)
         {
            tmparray[countMA]=sum/count;
            countMA++;
         }          
      }    
      // Массив создан. Можно обрабатывать
   }
 //***** Рассчитать количество повторений SMA, в десятичном интервале.
   for (int b=0;b<CountMA;b++)
   {
     schet=0;
     for (int a =CountMA;a>=0;a--) 
     {
       if(NormalizeDouble(tmparray[a],4)==NormalizeDouble(tmparray[b],4)&&tmparray[a]!=0) // 1.30000 = 1.30004
       {
         scBuf[b][0]=schet;                       // количество повторений МА
         scBuf[b][1]=tmparray[b];                 // Цена
         tmparray[a]=0;                           // Обнуляем посчитанную ячейку
         schet++;
       }
     } 
   }
   
   ArraySort(scBuf,WHOLE_ARRAY,0,MODE_DESCEND);   // Сортируем массив по убыванию
  
   for (int x=0;x<CountMA;x++) 
   {
     tmparrayF1[x]=scBuf[x][1];           //переносим значения цены в одномерный массив, для отображения через индикатор
   }  
     
      
Print("rates_total = ",rates_total,
"tmparray = ",tmparray[0]
,"KolVBuf ", scBuf[0][0],"+",scBuf[0][1]
       ,"/ ",scBuf[1][0],"+",scBuf[1][1]
       ,"/ ",scBuf[2][0],"+",scBuf[2][1]
       ,"/ ",scBuf[3][0],"+",scBuf[3][1]
       ,"/ ",scBuf[4][0],"+",scBuf[4][1]
       ,"/ ",scBuf[5][0],"+",scBuf[5][1]
     );

   
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Je m'excuse d'avance auprès des admins pour avoir trollé, une question similaire est dans un fil séparé https://www.mql5.com/ru/forum/154928,!)))

Objectif :

- Créez un tableau de 2 000 valeurs de moyenne mobile.

- Marquer avec des croix, des sceaux formés à partir des SMA jointes.

Le résultat est que les croix sont dispersées de manière désordonnée et qu'il n'y a rien.

Question :

Il s'avère que l'erreur qui fait que les croix sont placées d'une manière qui ne correspond pas à la position de l'agrégat SMA, se trouve dans la formation du tableau SMA || ... ?

 

Bon après-midi. Veuillez me conseiller sur la façon de résoudre ce problème. J'ai besoin de faire un tableau, un exemple est............. et qu'il s'agit d'un jeu de mots complet, dis-moi ce qui ne va pas. Merci.

for(int i=1;i<=20;i++)
     {
     for(int j=1;j<=20;j++)
        {
        for(int q=1;q<=20;q++)
           {
           
             M5gooB[i,j,q]=false;
             Print("M5gooB ",i," ",j," ",q," false.");
             
           }
        }
     }
 

ou encore comme ceci

bool M5gooB[50],M5gooS[50];
  for(int i=1;i<=50;i++)
     {
     M5gooB[i]=false;
     
     }

et imprime toujours une construction d'affectation chaotique dans les journaux.

 
laveosa:

ou encore comme ceci

et imprime toujours une construction d'affectation chaotique dans les journaux.

Peut-être que cela vous aidera.

bool M5gooB[50],M5gooS[50];
  for(int i=0;i<50;i++)
     {
     M5gooB[i]=false;
     
     }
 

Qui sait comment placer un point à la place d'une croix (DRAW_ARROW) ?

- Il existe un indicateur permettant de définir un objet ponctuel dans les variables globales.

//--- plot average
#property  indicator_label1  "average"
#property  indicator_type1   DRAW_ARROW
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1

 
Top2n:

Qui sait comment placer un point à la place d'une croix (DRAW_ARROW) ?

- Il existe un indicateur de la manière d'entrer un objet point dans les variables globales


Dans le monde entier :

input uchar arrowsCodes0=159;//Wingdings: >= 33 or <= 255

ou

uchar arrowsCodes0=159;//Wingdings: >= 33 or <= 255

https://docs.mql4.com/ru/constants/objectconstants/wingdings

Dans int OnInit() alors ce sera :

SetIndexArrow(0,arrowsCodes0);// https://docs.mql4.com/ru/customind/setindexarrow

Quelque chose comme ça.

 

Pourquoi mes points ne portent-ils que sur l'histoire ? Dans l'historique des fenêtres du testeur de stratégie et du graphique wino uniquement, aucun nouveau point n'est dessiné.

Code :

double sellArrowsBuffer[];
double buyArrowsBuffer[];
double closeArrowsBuffer[];

int jbnbHandle;

void OnInit()
{
....
    jbnbHandle = iCustom(_Symbol, _Period, "Projects\\iJBNB");
}


int OnCalculate(...)
{
    double cbearsColor[];
    double cbears[];

    int to_copy;

    if(prev_calculated > rates_total || prev_calculated <= 0)
        to_copy = rates_total;
    else
        to_copy = rates_total - prev_calculated + 1;


    if(CopyBuffer(jbnbHandle, 4, 0, to_copy, cbearsColor) != to_copy) 
        return 0;


    if(CopyBuffer(jbnbHandle, 3, 0, to_copy, cbears) != to_copy) 
        return 0;

    for(int i = 2; i < to_copy; i++)
    {    
        if(cbearsColor[i] == 2
            && cbearsColor[i - 1] == 1
            && cbears[i] > 0.2
            )
        {
            sellArrowsBuffer[i] = open[i] - symPoint * 30;
        }
    }

    return rates_total;
}

 
Pouvez-vous m'indiquer comment faire en sorte qu'en temps réel, lorsque l'on fait glisser HLINE, les ordres stop/stakeprofit qui se trouvent à proximité de la ligne ne soient pas rattrapés ? J'ai essayé de désactiver la négociation en un seul clic, cela ne sert à rien. Cet effet n'existe pas dans le testeur de stratégie. Je veux utiliser OnChartEvent (d'ailleurs, j'ai cru comprendre que les événements ne sont pas traités sur le testeur, mais seulement sur le relais).
 

Bonjour, le tutoriel donne un exemple d'un expert https://book.mql4.com/ru/samples/expert.

Pouvez-vous me dire pourquoi il effectue plusieurs achats/ventes sur une même bougie ?


CLOSE. Voir stoploss

 
Pyro:
Pouvez-vous me conseiller sur la manière de m'assurer qu'en temps réel, lorsque l'on fait glisser la HLINE, les ordres stop/stake profit qui se trouvent à proximité de la ligne ne soient pas interceptés ? J'ai essayé de désactiver la négociation en un seul clic, cela ne sert à rien. Cet effet n'existe pas dans le testeur de stratégie. Je veux utiliser OnChartEvent (d'ailleurs, j'ai cru comprendre que les événements ne sont pas traités sur le testeur, mais seulement sur le relais).
Raison: