Errores, fallos, preguntas - página 1580

[Eliminado]  

La página de inicio del sitio web muestra caracteres HTML en el texto. Chrome 64 Win 10 64.

 

Error de compilación

template<typename T>
class A {
public:
        A( T t1 ) : t( t1 ) {}
        T operator[]( int ) { return t; }
        T t;
};
typedef void (*fn)();
void OnStart()
{
        A<fn> a( OnStart );
        a.operator[]( 0 )(); //нормально
        a[            0 ](); // error: ')' - expression expected
}
 

ArrayIsSeries() siempre produce false en este script:

//+------------------------------------------------------------------+
//|                                                     TestCopy.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs

enum enumYN
  {
   enYes=1, // Да
   enNo=0,  // Нет
  };

//--- input parameters
input int Search_Period=10;   // Количество копируемых свечей
int searchPeriod=(Search_Period<1)?1:Search_Period;
input int Delta=2;            // Количество пунктов допуска
int delta=(Delta<0)?0:Delta;
input enumYN AsSeries=enYes;  // Массив array как таймсерия
MqlRates array[];             // Массив структур для копирования Open, High, Low, Close, Time
  
struct DataCandle             // Структура для хранения всех совпадений
  {
   int number_matched;           // Количество совпадений
   MqlRates reference_candle;    // Данные эталонной свечи
   MqlRates matched_candles[];   // Массив свечей, совпадающих с эталонной по нужному критерию 
  };
  DataCandle dataCandle[];    // Массив структур данных свечей и их совпадений
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period()));   // количество копируемых свечей
   int copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array);  // копируем данные
   if(copied>0) {                                                    // если скопировали
      ArraySetAsSeries(array,AsSeries);                              // задаём массив как таймсерию или нет
      ArrayResize(dataCandle,copied);                                // задаём размер структуры равным числу скопированных данных
      ZeroMemory(dataCandle);                                        // Обнуляем данные в структуре
      //--- основной цикл по "эталонным" свечам в массиве array. Их параметры будем искать в доп. цикле
      for(int i=0; i<copy_bars-1; i++) {                             // цикл по скопированным данным от начала до "на один меньше размера массива"
         dataCandle[i].reference_candle.high=array[i].high;          // ищем этот high
         dataCandle[i].reference_candle.low=array[i].low;            // запомнили low для сравнения
         dataCandle[i].reference_candle.time=array[i].time;          // запомнили time для вывода в журнал
         //--- поиск совпадений с эталонной свечой, индексируемой индексом основного цикла i
         int size=0;                                                 // размер массива совпадающих свечей
         ArrayResize(dataCandle[i].matched_candles,size);            // Размер массива совпадений в ноль
         dataCandle[i].number_matched=size;                          // Инициализируем количество совпадений нулём
         //--- теперь ищем совпадения по high свечей в цикле j с high эталонной свечи с индексом i
         for(int j=0; j<copy_bars; j++) {                            // в цикле от i+1 до copy_bars
            if(j==i) continue;                                       // пропустим свечу "саму себя"
            //--- если совпадают high эталонной свечи (i) и свечи с индексом j (с допуском на величину Point)
            if(NormalizeDouble(delta*Point()-fabs(array[i].high-array[j].high),Digits())>=0) {
               size++;                                               
               ArrayResize(dataCandle[i].matched_candles,size);            // увеличим размер массива совпадающих свечей
               dataCandle[i].number_matched=size;                          // запишем количество совпадений
               dataCandle[i].matched_candles[size-1].high=array[j].high;   // запишем в массив high совпадающей свечи
               dataCandle[i].matched_candles[size-1].low=array[j].low;     // запишем в массив low совпадающей свечи
               dataCandle[i].matched_candles[size-1].time=array[j].time;   // запишем в массив время совпадающей свечи
               //Print("Время свечи ",i," :",TimeToString(dataCandle[i].reference_candle.time=array[i].time),", high=",DoubleToString(dataCandle[i].reference_candle.high=array[i].high,Digits()),". Совпадение со свечой ",TimeToString(dataCandle[i].matched_candles[size-1].time=array[j].time),", её high ",DoubleToString(dataCandle[i].matched_candles[size-1].high=array[j].high,Digits()),". Совпадений: ",(string)dataCandle[i].number_matched);
               }
            }
         }
      }

   //--- Посмотрим чего понаписали в массивы
   Alert("Array is series: ",ArrayIsSeries(array),
         "\ntime array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
         "\ntime array[",string(searchPeriod-1),"]: ",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
   for(int i=0; i<ArraySize(dataCandle)-1; i++) {
      string refs_txt="";
      string matched_txt="";
      refs_txt="Свеча "+IntegerToString(i,2,'0')+": время "+TimeToString(dataCandle[i].reference_candle.time)+", high: "+DoubleToString(dataCandle[i].reference_candle.high,Digits())+" имеет совпадений: "+(string)dataCandle[i].number_matched+" шт. ";
      if(dataCandle[i].number_matched>0) {
         for(int j=0; j<ArraySize(dataCandle[i].matched_candles); j++) {
            matched_txt="Совпадение "+IntegerToString(j+1)+": "+TimeToString(dataCandle[i].matched_candles[j].time)+", high: "+DoubleToString(dataCandle[i].matched_candles[j].high,Digits());
            }
         }
      Print(refs_txt,matched_txt);
      }
  }
//+------------------------------------------------------------------+
 
¿Es posible averiguar el PPI(píxeles por pulgada) en los parámetros del gráfico? Realmente lo necesito para mi panel. WinAPI no es una opción.
 
Andrey Voytenko:
¿Es posible conocer el valor de PPI(píxeles por pulgada) a través de los parámetros gráficos? Realmente lo necesito para mi panel. WinAPI no es una opción.

Encontrado en anuncios:

MQL5: Añadido el valor TERMINAL_SCREEN_DPI a la lista de propiedades del terminal de cliente ENUM_TERMINAL_INFO_INTEGER - la resolución de la salida de pantalla se mide en número de puntos por pulgada lineal (DPI). Conocer este parámetro permite dimensionar los objetos gráficos para que se vean igual en monitores con diferentes resoluciones.

¿Servirá de algo?
 
Al escribir un artículo, cuando se intenta insertar una imagen, no hay un filtro de "sólo imágenes": la carpeta seleccionada muestra absolutamente todos los archivos, incluso los que no tienen nada que ver con las imágenes.
 
Karputov Vladimir:

Lo encontré en el anuncio: TERMINAL_SCREEN_DPI

¿Ayudará esto?

Sí, eso es lo que necesito. Gracias.
 
El CHARTEVENT_MOUSE_MOVE no funciona en el indicador OnChartEvent, hasta que se carga el Asesor Experto en el gráfico

Por favor, ayuda con el error,

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

¡¡¡ERROR!!! OnChartEvent en el indicador no funciona CHARTEVENT_MOUSE_MOVE hasta que se carga en el gráfico del EA.

Vladislav Andruschenko, 2016.05.13 12:29

OnChartEvent no funciona en el indicador CHARTEVENT_MOUSE_MOVE, hasta que se carga en el gráfico del Asesor Experto

El sabotaje real.

2016.05.13:23:49.434 Windows 7 Ultimate (PC basado en x64), IE 11.00, 8 x Intel Core i7-6700 @ 3.40GHz, RAM: 22784 / 32684 Mb, HDD: 16315 / 1498122 Mb, GMT+02:00

Así que.

hay un indicador de verificación

el código es mínimo:

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

   Comment(" MOVE \n id="+id+" \n lparam="+lparam+" \n dparam="+dparam+" \n sparam="+sparam
           );


  }

por lo que, cuando el indicador está unido al gráfico, el comentario no muestra la posición actual del cursor del ratón,

Si hace clic en el gráfico - muestra las últimas coordenadas, y además no las cambia al moverse, es decir, el parámetro CHARTEVENT_MOUSE_MOVE no funciona en este caso

El problema sólo puede resolverse de la siguiente manera

cuando cualquier Asesor Experto se adjunta a un gráfico - además el indicador actualiza el comentario normalmente, es decir, sigue el cursor y muestra sus coordenadas.

Incluso si luego quita el Asesor Experto del gráfico, el indicador normalmente muestra las coordenadas del cursor.

La secuencia de acciones:

1. abrir un nuevo gráfico

2. Lanza el indicador de prueba

3. El comentario no muestra la banderaCHARTEVENT_MOUSE_MOVE (id=0)

4. Pongo cualquier Asesor Experto en el gráfico

5. El indicador comienza a mostrar la acciónCHARTEVENT_MOUSE_MOVE (id=10) normalmente


 
Vladislav Andruschenko:
OnChartEvent en el indicador, CHARTEVENT_MOUSE_MOVE no funciona, hasta que descargue el Asesor Experto en el gráfico

Por favor, ayuda con el error,

La primera pregunta que le harán los desarrolladores es si CHART_EVENT_MOUSE_MOVE está activado.
 
Alexander Puzanov:
La primera pregunta que le harán los desarrolladores es si CHART_EVENT_MOUSE_MOVE está activado.

Gracias. Algo que no sabía. ... .. .... ...