Fehler, Irrtümer, Fragen - Seite 1580

 

Auf der Startseite der Website werden HTML-Zeichen im Text angezeigt. Chrome 64 Win 10 64.

 

Kompilierungsfehler

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() ergibt in diesem Skript immer false:

//+------------------------------------------------------------------+
//|                                                     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);
      }
  }
//+------------------------------------------------------------------+
 
Ist es möglich, den PPI-Wert(Pixel pro Zoll) in den Grafikparametern zu ermitteln? Ich brauche es wirklich für mein Panel. WinAPI ist keine Option.
 
Andrey Voytenko:
Ist es möglich, den PPI-Wert(Pixel pro Zoll) über die Grafikparameter zu erfahren? Ich brauche es wirklich für mein Panel. WinAPI ist keine Option.

Gefunden in Ankündigungen:

MQL5: TERMINAL_SCREEN_DPI Wert zur ENUM_TERMINAL_INFO_INTEGER Client-Terminal-Eigenschaftsliste hinzugefügt - die Auflösung der Bildschirmausgabe wird in der Anzahl der Punkte pro Linearzoll (DPI) gemessen. Wenn Sie diesen Parameter kennen, können Sie grafische Objekte so vergrößern, dass sie auf Monitoren mit unterschiedlichen Auflösungen gleich aussehen.

Wird es helfen?
 
Wenn man beim Schreiben eines Artikels versucht, ein Bild einzufügen, gibt es keinen "Nur Bilder"-Filter - der ausgewählte Ordner zeigt absolut alle Dateien an, auch solche, die überhaupt nichts mit Bildern zu tun haben.
 
Karputov Vladimir:

Ich habe es in der Ankündigung gefunden: TERMINAL_SCREEN_DPI

Wird das helfen?

Ja, das ist es, was ich brauche. Ich danke Ihnen.
 
Der CHARTEVENT_MOUSE_MOVE funktioniert nicht im Indikator OnChartEvent, bis Sie den Expert Advisor auf den Chart laden

Bitte helfen Sie bei diesem Fehler,

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

FEHLER!!! OnChartEvent im Indikator funktioniert nicht CHARTEVENT_MOUSE_MOVE, bis Sie es auf den EA-Chart laden.

Vladislav Andruschenko, 2016.05.13 12:29

OnChartEvent funktioniert nicht im Indikator CHARTEVENT_MOUSE_MOVE, bis Sie ihn in den Chart von Expert Advisor laden

Die eigentliche Sabotage.

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

Also.

es gibt ein Prüfzeichen

der Code ist minimal:

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


  }

Wenn der Indikator an das Diagramm angehängt ist, zeigt der Kommentar also nicht die aktuelle Position des Mauszeigers an,

Wenn Sie auf das Diagramm klicken, werden die letzten Koordinaten angezeigt und beim Verschieben nicht verändert, d.h. der Parameter CHARTEVENT_MOUSE_MOVE funktioniert in diesem Fall nicht

Das Problem kann nur auf folgende Weise gelöst werden

wenn ein Expert Advisor an einen Chart angehängt ist - weiterhin aktualisiert der Indikator den Kommentar normal, d.h. er folgt dem Cursor und zeigt seine Koordinaten an.

Auch wenn Sie den Expert Advisor dann aus dem Chart entfernen - der Indikator zeigt normalerweise die Cursor-Koordinaten an.

Die Reihenfolge der Aktionen:

1. Öffnen Sie eine neue Karte

2. Werfen Sie den Testindikator

3. Kommentar zeigt das KennzeichenCHARTEVENT_MOUSE_MOVE nicht an(id=0)

4. Ich setze einen beliebigen Expert Advisor auf das Diagramm

5. Der Indikator beginnt normalerweise mit der Anzeige der AktionCHARTEVENT_MOUSE_MOVE (id=10)


 
Vladislav Andruschenko:
OnChartEvent im Indikator, CHARTEVENT_MOUSE_MOVE funktioniert nicht, bis Sie den Expert Advisor auf den Chart laden

Bitte helfen Sie bei diesem Fehler,

Die erste Frage, die Ihnen die Entwickler stellen werden, lautet: Ist CHART_EVENT_MOUSE_MOVE aktiviert?
 
Alexander Puzanov:
Die erste Frage, die Ihnen die Entwickler stellen werden, lautet: Ist CHART_EVENT_MOUSE_MOVE eingeschaltet?

Ich danke Ihnen. Etwas, das ich nicht wusste. ... .. .... ...