Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 393

 
YarTrade: VolC - así es como llamé al archivo. ¿No necesita un nombre de archivo?

Entonces es así:

   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);       // V5 - это что?
   FileClose(file_handle);
 
STARIJ:

Entonces es así:


El V5 es una especie de resultado de cálculo. He eliminado V5, he puesto un array en su lugar y quiero que se escriba en el archivo. El archivo se crea, pero sólo se escribe en él un valor, no la matriz de datos del indicador. ¿Qué falta? Tengo un indicador que se traza correctamente en el gráfico. Quiero escribir sus valores en un archivo para poder leerlos después. Pero sólo se escribe un número. ¿Pueden ayudarme a entender qué es lo que falla?

 
STARIJ:

Entonces es así:


Lo hice con FileWriteArray, pero ahora el archivo está vacío. no escribirá un array allí :(. ¿Sabes cómo ayudar? Claro que sí. Por favor, dime qué pasa.

 
YarTrade: Lo hice con FileWriteArray, pero ahora el archivo está vacío, no escribe el array allí :(. ¿Sabes cómo ayudar? Claro que sí. Por favor, dime qué pasa.

Dice así

   int V5=555;
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,V5);
   FileClose(file_handle);

¿Qué tipo de matriz? Inserta el código, ¡deja de ser codicioso! Y aquí hay un array escribiendo aparentemente sólo un array de caracteres.

   string V5[5]={"Жили","были","дед","и","баба"};
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWriteArray(file_handle,V5);
   FileClose(file_handle);

Y la matriz doble en el bucle escribe

   double V5[5]={3.333,7.7777777,1.1,2.22,9.999999999};
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   for(int n=0; n<5; n++)FileWrite(file_handle,V5[n]);
   FileClose(file_handle);
 
STARIJ:

Dice así

¿Qué tipo de matriz? Inserta el código, ¡deja de ser codicioso! Y este array escribe probablemente sólo un array de caracteres

Y aquí está el array doble en la escritura del bucle


¿Qué tan codicioso es eso? :)

#property copyright "ZyZy"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
// #property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_separate_window
//--- input parameters
input int      Aver=15;
datetime Время=0;   // Время прошлого бара
double Bid1;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // накопленный объем для всех тиков вниз для текущего бара
long V4; // объем текущего тика вниз
long V5;

//--- indicator buffers
double         Buf_1[];   // буфер для значений идикатора
double         Counter[];     // буфер для расчетов   
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   IndicatorBuffers(2);
   SetIndexBuffer(0,Buf_1,INDICATOR_DATA); // создаю буфер для значений индикатора
   SetIndexBuffer(1,Counter,INDICATOR_CALCULATIONS);
   SetIndexEmptyValue(0,0.0);
//---
   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[])
  {
//---
//int limit = prev_calculated > 0 ? rates_total-prev_calculated : rates_total-1;
//for(int i =  limit; i >= 0; i--)
// {
//  Counter[i] = close[i];
//  Indicator[i] = iMAOnArray(Counter, 0, 5, 0, 0, i);
// }
   if(prev_calculated==0)
     {
      ArrayInitialize(Counter,0.0);
      ArrayInitialize(Buf_1,0.0);
     }
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
     {
      Время=Вр;           // Запомнить
      Counter[0]=0;         // и обнулить последний элемент буфера
      V2 = 0;
      V4 = 0;
     }

   if(Bid>=Bid1)
     {
      if(Bid>Bid1)
        {
         V1 = iVolume(NULL, 0, 0);
         V2 = V1 + V2;
        }
      else
        {
         V1 = 0;
         V2 = V1 + V2;
        }
     }
   else
     {
      V3 = iVolume(NULL, 0, 0);
      V4 = V3 + V4;
     }

   V5=V2-V4;
   Bid1=Bid;
   Counter[0]=(double)V5;
   Buf_1[0]=iMAOnArray(Counter,0,Aver,0,MODE_SMA,0);
   Comment("Counter ",Counter[0],"\n"
           ,"Buf_1 ",Buf_1[0]);
   
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWriteArray(file_handle,Counter, 0, WHOLE_ARRAY);     
   FileClose(file_handle);

   return(rates_total);
  }
//+------------------------------------------------------------------+
 
YarTrade:¿Qué codicia hay en ello? :)

¿Por qué imprimir algo de un indicador? Todo está en la pantalla: eso es un indicador. Cuando necesito una tabla - ejecuto un script con iCustom()

 

Hola, he estado luchando con el código que se supone que comprueba el precio de la orden en el terminal. Decidí probar a comprobar los billetes. Poner los billetes en un array, empezar a comprobar.

Todo está bien, devuelve TRUE. Creo que, si borro uno, devolverá FALSE. Pero no((( He borrado todo, y el script sigue devolviendo 1 en lugar de 0. ¿Qué hago mal?


int start()
{
   while(!IsStopped())
   {
      int ordsel = 0;
      double ticord[3] = {8895969,8901032,8901033};
         for(ordsel=0; ordsel<=2;ordsel++) 
         {
            Sleep(5000); 
            Alert(OrderSelect(ticord[ordsel],SELECT_BY_TICKET,MODE_TRADES)); 
         }
      if(!IsExpertEnabled()) break;
   }
   return;
}
 

¡Hola, compañeros expertos! Por favor, ayude a un principiante. ¡Estoy tratando de poner un indicador en mi Asesor Experto(me he devanado los sesos...)! Da un error: 'limit' - declaración sin tipo.

En esta línea: limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period());


 
Dimitry-1983:

Hola, he estado luchando con el código que se supone que comprueba el precio de la orden en el terminal. Decidí probar a comprobar los billetes. Poner los billetes en un array, empezar a comprobar.

Todo está bien, devuelve TRUE. Creo que, si borro uno, devolverá FALSE. Pero no((( He borrado todo, y el script sigue devolviendo 1 en lugar de 0. ¿Qué hago mal?



El caso es que si se selecciona (OrderSelect(...)) por ticket, el parámetro 3 se ignoraMODE_TRADES

por lo que, para saber de qué lista (cerrada, abierta) se ha elegido la orden, hay que comprobar su hora de cierre

0- abierto y pendiente, >0 cerrado

 
Ptichka12:

¡Hola, compañeros expertos! Por favor, ayude a un principiante. ¡Estoy tratando de poner un indicador en un Asesor Experto (me he devanado los sesos...)! Da un error: 'limit' - declaración sin tipo.

En esta línea: limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period()));



Es una forma muy interesante de hacerlo.

Pruebe lo siguiente en el error

int limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
Razón de la queja: