Errori, bug, domande - pagina 1580

 

La home page del sito web mostra caratteri HTML nel testo. Chrome 64 Win 10 64.

 

Errore di compilazione

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() produce sempre false in questo 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);
      }
  }
//+------------------------------------------------------------------+
 
È possibile scoprire i PPI(pixel per pollice) nei parametri del grafico? Ne ho davvero bisogno per il mio pannello. WinAPI non è un'opzione.
 
Andrey Voytenko:
È possibile conoscere il valore PPI(pixel per pollice) attraverso i parametri grafici? Ne ho davvero bisogno per il mio pannello. WinAPI non è un'opzione.

Trovato in annunci:

MQL5: Aggiunto il valore TERMINAL_SCREEN_DPI alla lista delle proprietà del terminale client ENUM_TERMINAL_INFO_INTEGER - la risoluzione dell'output dello schermo è misurata in numero di punti per pollice lineare (DPI). Conoscere questo parametro permette di dimensionare gli oggetti grafici in modo che appaiano uguali su monitor con risoluzioni diverse.

Sarà utile?
 
Quando si scrive un articolo, quando si cerca di inserire un'immagine, non c'è un filtro "solo immagini" - la cartella selezionata mostra assolutamente tutti i file, anche quelli che non hanno niente a che fare con le immagini.
 
Karputov Vladimir:

Trovato nell'annuncio: TERMINAL_SCREEN_DPI

Questo aiuterà?

Sì, è quello di cui ho bisogno. Grazie.
 
Il CHARTEVENT_MOUSE_MOVE non funziona nell'indicatore OnChartEvent, finché non si carica l'Expert Advisor sul grafico

Per favore, aiutatemi con l'errore,

Forum sul trading, sistemi di trading automatico e test di strategie di trading

ERRORE!!! OnChartEvent nell'indicatore non funziona CHARTEVENT_MOUSE_MOVE finché non lo carichi sul grafico EA.

Vladislav Andruschenko, 2016.05.13 12:29

OnChartEvent non funziona nell'indicatore CHARTEVENT_MOUSE_MOVE, finché non lo carichi sul grafico di Expert Advisor

Il sabotaggio vero e proprio.

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

Quindi.

c'è un indicatore di controllo

il codice è minimo:

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


  }

così, quando l'indicatore è collegato al grafico - il commento non visualizza la posizione corrente del cursore del mouse,

Se cliccate sul grafico - visualizza le ultime coordinate, e inoltre non le cambia quando si sposta, cioè il parametro CHARTEVENT_MOUSE_MOVE non funziona in questo caso

Il problema può essere risolto solo nel modo seguente

quando qualsiasi Expert Advisor è collegato a un grafico - inoltre l'indicatore aggiorna il commento normalmente, cioè segue il cursore e mostra le sue coordinate.

Anche se poi rimuovi l'Expert Advisor dal grafico, l'indicatore mostra normalmente le coordinate del cursore.

La sequenza delle azioni:

1. aprire un nuovo grafico

2. Lanciare l'indicatore di prova

3. Il commento non mostra il flagCHARTEVENT_MOUSE_MOVE (id=0)

4. Ho messo un qualsiasi Expert Advisor sul grafico

5. L'indicatore inizia a visualizzare l'azioneCHARTEVENT_MOUSE_MOVE (id=10) normalmente


 
Vladislav Andruschenko:
OnChartEvent nell'indicatore, CHARTEVENT_MOUSE_MOVE non funziona, finché non si scarica l'Expert Advisor sul grafico

Per favore, aiutatemi con l'errore,

La prima domanda che gli sviluppatori vi faranno è: CHART_EVENT_MOUSE_MOVE è abilitato?
 
Alexander Puzanov:
La prima domanda che gli sviluppatori vi faranno è CHART_EVENT_MOUSE_MOVE on?

Grazie. Qualcosa che non sapevo. ... .. .... ...