Wenn ich versuche, die CGraphic.Erstellen, ich bekomme ein Malewitsch-Quadrat:
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.001"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input string rectangle_name="RECTANGLE"; // rectangle name
input int sleeping=15000; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int result_find=ObjectFind(0,rectangle_name);
Print("result_find: ",result_find);
if(result_find!=-1)
{
datetime from = (datetime)ObjectGetInteger(0,rectangle_name,OBJPROP_TIME,0);
datetime to = (datetime)ObjectGetInteger(0,rectangle_name,OBJPROP_TIME,1);
MqlTick tick_array_range[]; // массив для приема тиков
ResetLastError();
CopyTicksRange(Symbol(),tick_array_range,COPY_TICKS_INFO,(ulong)from*1000,(ulong)to*1000);
Print("Error: ",GetLastError());
if(GetLastError()!=0)
return;
double arr_ask[];
int size=ArraySize(tick_array_range);
ArrayResize(arr_ask,size);
for(int i=0;i<size;i++)
arr_ask[i]=tick_array_range[i].ask;
m_graphic.Create(0,"Deals",0,30,30,500,300);
m_graphic.CurveAdd(arr_ask,1);
Print("Цвет фона перед \"Update\": ",m_graphic.BackgroundColor());
m_graphic.Update();
Print("Цвет фона после \"Update\": ",m_graphic.BackgroundColor());
Sleep(sleeping);
m_graphic.Destroy();
}
}
//+------------------------------------------------------------------+
2016.12.11 09:06:02.531 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M @ 2.50 GHz, RAM: 4882 / 8077 Mb, HDD: 357683 / 476372 Mb, GMT+02:00
2016.12.11 09:06:02.531 Terminal C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Weder in "Experten" noch in "Journal" gibt es Fehler.
Suche nach Anwendungen für neue Funktionen - insbesondere für die Grahic-Bibliothek (wissenschaftliche Graphen).
Wählen Sie zum Beispiel einen Bereich in einem Diagramm mit einem Rechteckobjekt aus und führen Sie das Script aus:
Für Nicht-Programmierer sollte das Rechteck RECTANGLE genannt werden.
Frage: Was wird auf der X-Achse angezeigt? Ich habe 2 Balken M1 markiert, die Anzahl der Ticks gezählt, es passt nicht, die Sekunden stimmen auch nicht überein.
Sie haben Redraw() nicht vor Update() ausgeführt.
Erledigt, zeichnet einen Diagrammrahmen, Achsen. Es gibt kein eigenes Diagramm.
Außerdem wurde hinzugefügt, dass es so gezeichnet wird.
m_graphic.Create(0,"Deals",0,30,30,500,300);
CCurve* curve = m_graphic.CurveAdd(arr_ask,CURVE_LINES);
curve.Color(clrBlack);
curve.Visible(true);
Print("Цвет фона перед \"Update\": ",m_graphic.BackgroundColor());
m_graphic.Redraw();
m_graphic.Update();
....
***
Erledigt, zeichnet einen Diagrammrahmen, Achsen. Es gibt kein eigenes Diagramm.
Auch ergänzt, zieht es auf diese Weise.
m_graphic.Create(0,"Deals",0,30,30,500,300);
CCurve* curve = m_graphic.CurveAdd(arr_ask,CURVE_LINES);
curve.Color(clrBlack);
curve.Visible(true);
Print("Цвет фона перед \"Update\": ",m_graphic.BackgroundColor());
m_graphic.Redraw();
m_graphic.Update();
....
***
Ich danke Ihnen!
Arbeitsversion (Version "1.003"):
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.003"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input string rectangle_name="RECTANGLE"; // rectangle name
input int sleeping=15000; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
ResetLastError();
int result_find=ObjectFind(0,rectangle_name);
if(result_find<0)
{
Print("ObjectFind Error: ",GetLastError());
return;
}
datetime from = (datetime)ObjectGetInteger(0,rectangle_name,OBJPROP_TIME,0);
datetime to = (datetime)ObjectGetInteger(0,rectangle_name,OBJPROP_TIME,1);
MqlTick tick_array_range[]; // массив для приема тиков
ResetLastError();
CopyTicksRange(Symbol(),tick_array_range,COPY_TICKS_INFO,(ulong)from*1000,(ulong)to*1000);
if(GetLastError()!=0)
return;
double arr_ask[];
int size=ArraySize(tick_array_range);
ArrayResize(arr_ask,size);
for(int i=0;i<size;i++)
arr_ask[i]=tick_array_range[i].ask;
m_graphic.Create(0,"Deals",0,30,30,500,300); // создает графический ресурс, привязанный к объекту чарта
CCurve *curve=m_graphic.CurveAdd(arr_ask,1); // создает и добавляет кривую (CCurve) на график
curve.Visible(true); // отображает кривую
m_graphic.Redraw(); // redraw grahic
m_graphic.Update(); // отображает на экране сделанные изменения
Sleep(sleeping);
m_graphic.Destroy(); // удаляет с чарта график и уничтожает графический ресурс
}
//+------------------------------------------------------------------+
Die Klasse CGraphic hat ein sehr unglückliches (oder schlecht durchdachtes) Design mit ihrer Leinwand.
In seiner jetzigen Form dient es lediglich zu Demonstrationszwecken. Für andere Zwecke ist sie kaum geeignet. Da es nicht möglich ist, Position und Größe der Zeichnung auf einem eigenen Objekt zu verwalten, nimmt m_canvas ungerechterweise das gesamte grafische Objekt ein.
Und aufgrund der Tatsache, dass m_canvas privat ist, ist es unmöglich, etwas Eigenes zu erben und zu ändern.
Im Allgemeinen, bitte ändern Sie es.
, so dass die Leinwand entweder verfügbar wäre, wenn die Vererbung oder es wäre möglich, mit dieser m_canvas ohne reales Objekt auf dem Diagramm zu arbeiten und dann nehmen Sie die gemachte Konstruktion nach eigenem Ermessen.
m_canvas.FontSizeSet(m_history.name_size);
if(m_canvas.TextWidth(name)>m_history.name_width)
{
while(m_canvas.TextWidth(name+"...")>m_history.name_width)
name=StringSubstr(name,0,StringLen(name)-1);
name+="...";
}
Fehler gefunden - unendliche while-Schleife, wenn m_history.name_width klein ist
Wie kann ich den Verlauf auf der rechten Seite ganz deaktivieren?
Soweit es mich betrifft:
GetX | Schreibt die X-Koordinaten für alle Kurvenpunkte in ein Array |
Ich sollte die "x"-Koordinaten - Koordinaten in Pixeln - aller gezeichneten Punkte auf dem Diagramm in ein Array bekommen?
Prüfen:
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.000"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input int m_width=500; // ширина
input int m_height=300; // высота
input int sleeping=15000; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double arr_example[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
m_graphic.Create(0,"Example",0,30,30,m_width,m_height); // создает графический ресурс, привязанный к объекту чарта
CCurve *curve=m_graphic.CurveAdd(arr_example,1); // создает и добавляет кривую (CCurve) на график
curve.Visible(true); // отображает кривую
m_graphic.Redraw(); // redraw grahic
double arr_get_x[];
curve.GetX(arr_get_x); // записываем координаты X для всех точек кривой в массив
ArrayPrint(arr_get_x); // распечатываем массив
m_graphic.Update(); // отображает на экране сделанные изменения
Sleep(sleeping);
m_graphic.Destroy(); // удаляет с чарта график и уничтожает графический ресурс
}
//+------------------------------------------------------------------+
Das Diagramm wird gezeichnet:
Und hier ist ein Ausdruck des Arrays - es stellte sich heraus, dass es die Daten enthält, für die das Diagramm gezeichnet wurde, aber nicht die "x"-Koordinaten in Pixeln:
Ich muss die "x"-Koordinaten - Koordinaten in Pixeln - aller gezeichneten Punkte im Diagramm in ein Array übertragen?
Ich habe nichts über "Pixel" gesagt.
Sie haben nur ein Y-Array eingereicht. x ist also eine einfache Ordnungszahl. GetX ist richtig.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Suche nach Anwendungen für neue Funktionen - insbesondere für die Grahic-Bibliothek (wissenschaftliche Graphen).
Als Beispiel wählen wir einen Bereich in einem Diagramm mit einem Rechteckobjekt aus und führen das Script aus:
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input string rectangle_name="RECTANGLE"; // rectangle name
input int sleeping=15000; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int result_find=ObjectFind(0,rectangle_name);
Print("result_find: ",result_find);
if(result_find!=-1)
{
datetime from = (datetime)ObjectGetInteger(0,rectangle_name,OBJPROP_TIME,0);
datetime to = (datetime)ObjectGetInteger(0,rectangle_name,OBJPROP_TIME,1);
MqlTick tick_array_range[]; // массив для приема тиков
ResetLastError();
CopyTicksRange(Symbol(),tick_array_range,COPY_TICKS_INFO,(ulong)from*1000,(ulong)to*1000);
Print("Error: ",GetLastError());
if(GetLastError()!=0)
return;
double arr_ask[];
int size=ArraySize(tick_array_range);
ArrayResize(arr_ask,size);
for(int i=0;i<size;i++)
arr_ask[i]=tick_array_range[i].ask;
GraphPlot(arr_ask,1);
m_graphic.Destroy();
Sleep(sleeping);
ObjectsDeleteAll(0,"Graphic",0,OBJ_BITMAP_LABEL);
ChartRedraw();
}
}
//+------------------------------------------------------------------+
Das Ergebnis ist ein Diagramm, das von Ask in Form von Ticks dargestellt wird: