Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 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);
  }

Pido disculpas de antemano a los administradores por trollear, una pregunta similar está en otro hilo https://www.mql5.com/ru/forum/154928,!))

Objetivo:

- Crea un array de 2.000 valores de media móvil.

- Marcar con cruces, sellos formados por las SMAs unidas.

El resultado es que las cruces se dispersan desordenadamente y no hay nada allí.

Pregunta:

Resulta que el error que hace que las cruces se coloquen de una manera que no se corresponde con la posición del agregado SMA, está en la formación de la matriz SMA || ...?

 

Buenas tardes. Por favor, aconséjeme cómo resolver este problema. Necesito hacer un array, un ejemplo es............. y resulta un completo juego de palabras, dime qué pasa. Gracias.

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.");
             
           }
        }
     }
 

o incluso así

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

y aún así Print imprime una construcción de asignación caótica en los registros

 
laveosa:

o incluso así

y aún así Print imprime una construcción de asignación caótica en los registros

Tal vez esto ayude.

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

¿Quién sabe cómo poner un punto en lugar de una cruz (DRAW_ARROW)?

- Hay un indicador, cómo establecer un objeto de punto en las 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én sabe cómo poner un punto en lugar de una cruz (DRAW_ARROW)?

- Hay un indicador de cómo introducir un objeto punto en las variables globales


En global:

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

o

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

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

En int OnInit() entonces será:

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

Algo así.

 

¿Por qué mis puntos sólo se basan en la historia? En las ventanas del probador de estrategias y del gráfico wino sólo se dibuja la historia, no se dibujan nuevos puntos

Código:

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;
}

 
¿Podríais aconsejarme cómo hacer para que en tiempo real al arrastrar la HLINE no coja las órdenes de stop/stakeprofit que están en las proximidades de la línea? He intentado desactivar el comercio con un solo clic, pero no ayuda. Este efecto no existe en el Probador de Estrategias. Quiero utilizar OnChartEvent (por cierto, entiendo que los eventos no se manejan en el probador, sólo en el relé?)
 

Buenas tardes, el tutorial da un ejemplo de un experto https://book.mql4.com/ru/samples/expert

¿Puede decirme por qué hace varias compras/ventas en la misma vela?


CERRAR. vio stoploss

 
Pyro:
¿Me pueden aconsejar cómo hacer para que en tiempo real al arrastrar la HLINE no se atrapen las órdenes de stop/stake profit que están en las cercanías de la línea? He intentado desactivar el comercio con un solo clic, pero no ayuda. Este efecto no existe en el Probador de Estrategias. Quiero utilizar OnChartEvent (por cierto, entiendo que los eventos no se manejan en el probador, sólo en el relé?)