Da die Namen identisch sind, wird die kleinste erste Ziffer der Zahl ausgewählt, die das vierte Objekt ist, und da die ersten beiden Objekte eine vierte Ziffer haben, wird die kleinste Ziffer nach der vierten der ersten beiden Objekte ausgewählt.
A100:
Ja, nur die umgekehrte Umwandlung kann nicht durchgeführt werden. Die Zuweisung von Zufallszahlen an Objekte ist so, als würde man die Sprache MQL831 statt MQL5 nennen.
Um die Objekte in der Reihenfolge ihrer Erstellung manuell zu verarbeiten, müssen Sie meiner Meinung nach entweder die Namen nach allen oder während des Prozesses der Erstellung jedes einzelnen Objekts nummerieren und dann den Roboter laufen lassen, um das Array zu verarbeiten und zu schreiben, wobei die Nummerierung der Erstellung in den Namen beibehalten wird.
Meiner Meinung nach müssen wir, um Objekte in der Reihenfolge ihrer Erstellung manuell zu bearbeiten, entweder die Namen nummerieren, nachdem alle Objekte erstellt wurden, oder bei der Erstellung jedes Objekts und dann den Roboter einschalten, damit er ein Array verarbeitet und schreibt, das die Nummerierung der Erstellung in den Namen beibehält. In Zukunft wird dies ermöglichen, Objekte aus der Liste richtig auszuwählen, sowohl durch die ObjectName-Funktion als auch durch andere ähnliche Funktionen, in der Reihenfolgeder manuellerstellten Objekte.
Warum nicht ObjectGetInteger() mit der Eigenschaftskennung OBJPROP_CREATETIME verwenden?
2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. [in] Модификатор указанного свойства. Для первого варианта по умолчанию значение модификатора равно 0. Большинство свойств не требуют модификатора...
Was hindert mich daran, ObjectGetInteger() mit der Eigenschafts-ID OBJPROP_CREATETIME zu verwenden?
Die Idee ist, dass ich möchte, dass alles, was ich auf dem Chart zeichne, im Namen von Objekten geschrieben wird, einschließlich der Nummerierung der Objekterstellung in der Liste, in der Reihenfolge der Erstellung, des Zeitrahmens, des Fibo-Level-Typs und der Seriennummer des Fibo-Level-Typs, gleichzeitig schreiben wir Arrays mit diesen Level-Daten in der Reihenfolge, in der sie aufgelistet sind. Dann werden wir Kriterien für Handelsaktionen durch diese Namen und Daten in Arrays entsprechend der Reihenfolge der Erstellung dieser Objekte erstellen.
Bisher habe ich diesen Weg gefunden: Wir erstellen 4 Fibo-Objekte In der Liste wird die Reihenfolge der Erstellung gespeichert, nummerieren Sie sie für die Verarbeitung entsprechend der Reihenfolge der Erstellung Führen Sie den Expert Advisor
//+------------------------------------------------------------------+//| F.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| Fibo_Massiv.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+string NameFiboUp[15]; // Объявление массиваstring NameFiboDown[15]; // Объявление массиваstring NameFibo[9]; // Объявление массиваint TimeFrame[9];
string Num[9];
int Frame;
//string New_N;//+------------------------------------------------------------------+intOnInit()
{
//______________________________Массив новых имён с индексацией номеров очерёдности________________________________
NameFiboUp[1]="FiboUp1 ";
NameFiboDown[1]="FiboDown1 ";
NameFiboUp[2]="FiboUp2 ";
NameFiboDown[2]="FiboDown2";
NameFiboUp[3]="FiboUp3";
NameFiboDown[3]="FiboDown3 ";
NameFiboUp[4]="FiboUp4 ";
NameFiboDown[4]="FiboDown4 ";
NameFiboUp[5]="FiboUp5";
NameFiboDown[5]="FiboDown5 ";
NameFiboUp[6]="FiboUp6 ";
NameFiboDown[6]="FiboDown6 ";
NameFiboUp[7]="FiboUp7 ";
NameFiboDown[7]="FiboDown7 ";
NameFiboUp[8]="FiboUp8 ";
NameFiboDown[8]="FiboDown8 ";
NameFiboUp[9]="FiboUp9 ";
NameFiboDown[9]="FiboDown9 ";
NameFiboUp[10]="FiboUp10 ";
NameFiboDown[10]="FiboDown10";
NameFiboUp[11]="FiboUp11 ";
NameFiboDown[11]="FiboDown11 ";
NameFiboUp[12]="FiboUp12 ";
NameFiboDown[12]="FiboDown12 ";
NameFiboUp[13]="FiboUp13 ";
NameFiboDown[13]="FiboDown13";
NameFiboUp[14]="FiboUp14 ";
NameFiboDown[14]= "FiboDown14";
//____________________string Массив таймфреймов______________________________
NameFibo[1]="M1";
NameFibo[2]="M5";
NameFibo[3]="M15";
NameFibo[4]="H1";
NameFibo[5]="H4";
NameFibo[6]="Da";
NameFibo[7]="We";
NameFibo[8]="Mo";
//___________________int Массив таймфреймов__________________________________________
TimeFrame[1]=1;
TimeFrame[2]=5;
TimeFrame[3]=15;
TimeFrame[4]=60;
TimeFrame[5]=240;
TimeFrame[6]=1440;
TimeFrame[7]=10080;
TimeFrame[8]=43200;
//_____________________________________________________________________________
Num[1]="1";
Num[2]="2";
Num[3]="3";
Num[4]="4";
Num[5]="5";
Num[6]="6";
Num[7]="7";
Num[8]="8";
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
int G=0;
int UP=1; //Счётчик очерёдности типов фибоint Down=1; //Счётчик очерёдности типов фибоstring nameUP = "FiboUp";
string nameDown = "FiboDown";
double FiboDown[4][10],FiboUp[4][10]; // 2x мерный массив// Alert("ArraySize(FiboDown)= ", ArraySize(FiboDown));int Fibo_Koll = ObjectsTotal(0,0,OBJ_FIBO); //Запрос колличества объектов Fibo//_________________________________________________________if(Fibo_Koll==0) //Если нет не одного фибо выход //return; ////_________________________________________________________//// int Koll[]; //Индексация и запись в массив по порядку появления фибо в окне инструментов// int Tip[]; //Запись типа Fibo в массив по порядку появления фибо в окне инструментов//ArrayResize(Koll,Fibo_Koll); // Устанавливает новый размер в первом измерении массива Koll []//ArrayResize(Tip,Fibo_Koll); // Устанавливает новый размер в первом измерении массива Tip []// ObjectName(0,0,0,OBJ_FIBO); //Вытаскивает имя найденого фибоfor(int i=0; i < Fibo_Koll; i++)
{
G++; // Нумератор объектов из списка объектовstring n =ObjectName(0,i,0,OBJ_FIBO); //Имя для обрезки до 2х первых знаков для получения тайм-фреймаstring Name_Static =ObjectName(0,i,0,OBJ_FIBO);
//--------------------------------------------------------//----------------------------------------------------------------------------------------double Fibo_Level_0= ObjectGetDouble(
0, // идентификатор графика
n, // имя объектаOBJPROP_PRICE, // идентификатор свойства0// модификатор свойства
);
double Fibo_Level_1= ObjectGetDouble(
0, // идентификатор графика
n, // имя объектаOBJPROP_PRICE, // идентификатор свойства1// модификатор свойства
);
//------------------------------------------------------------------------------------------------------if(Fibo_Level_0>Fibo_Level_1)
{
//вызов функции расчёта уровня 78.6double Fibo_78_Up = Function_Up(Fibo_Level_0, Fibo_Level_1);
//Изменение имени объектаbool l = StringSetLength( //Устанавливает для строки указанную длину в символах 2
n, // строка2// новая длина строки
);
//-----------------------------------------------------------int N = 1;
string q;
for(int e = 1; N != 0; e++) // пока N не == 0, гоняем функцию StringCompare. сравнивая обрезанную переменную(StringSetLength) с массивом NameFibo[]
{
N= StringCompare(
n, // первая сравниваемая строка
NameFibo[e], // вторая сравниваемая строкаtrue// режим учета регистра букв при сравнении
);
q= NameFibo[e];
Frame= TimeFrame[e];
}
string New_N =Num[G];
string r= New_N+q+NameFiboUp[UP];
//--------------------------------------------------------------------
FiboUp[UP][1]=1; // Тип обектов 1 == FiboUp
FiboUp[UP][2]=UP; // Нумерация обектов FiboUp по типу
FiboUp[UP][3]=Fibo_78_Up; // 78.6%
FiboUp[UP][4]=Frame; // Тайм фрейм
FiboUp[UP][5]=0; // 50%//----------------------------------------------------------------------------------------------------------bool F =ObjectSetString(0,Name_Static,OBJPROP_NAME,r);
UP++;
}
//----------------------------------------------------------------------------------else
{
//вызов функции расчёта уровня 78.6double Fibo_78_Down = Function_Down(Fibo_Level_0, Fibo_Level_1);
//Изменение имени объектаbool l = StringSetLength( //Устанавливает для строки указанную длину в символах 2
n, // строка2// новая длина строки
);
//-----------------------------------------------------------int N = 1;
string q;
for(int e = 1; N != 0; e++) // пока N не == 0, гоняем функцию StringCompare. сравнивая обрезанную переменную(StringSetLength) с массивом NameFibo[]
{
N= StringCompare(
n, // первая сравниваемая строка
NameFibo[e], // вторая сравниваемая строкаtrue// режим учета регистра букв при сравнении
);
q= NameFibo[e];
Frame= TimeFrame[e];
}
string New_N =Num[G];
string r= New_N+q+NameFiboDown[Down];
//-------------------------------------------------------------------
FiboDown[Down][1]=2; // // Тип обектов 2 == FiboDown
FiboDown[Down][2]=Down; // Нумерация обектов по типу
FiboDown[Down][3]=Fibo_78_Down; // 78.6%
FiboDown[Down][4]=Frame; // Тайм фрейм
FiboDown[Down][5]=0; // 50%//------------------------------------------------------------------//Изменение имени объектаbool F =ObjectSetString(0,Name_Static,OBJPROP_NAME,r);
Down++;
}
}
//+------------------------------------------------------------------+ArrayPrint(
FiboUp, // выводимый массив6, // количество десятичных знаков после запятойNULL, // разделитель между значениями полей структуры0, // индекс первого выводимого элементаWHOLE_ARRAY, // количество выводимых элементовARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
ArrayPrint(
FiboDown, // выводимый массив6, // количество десятичных знаков после запятойNULL, // разделитель между значениями полей структуры0, // индекс первого выводимого элементаWHOLE_ARRAY, // количество выводимых элементовARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
}
// for(int i=0; i<ArraySize(Koll); i++)// printf("Koll[%d] = %d",i,Koll[i]);//------------------------------------------------------------------------------------------------------//+------------------------------------------------------------------+//+------------------------------------------------------------------+double Function_Up(double a, double b) // имя функции и список параметров
{
double Sum_100 = a - b; //Вычисляем 100% В пунктах от точек построения фибоdouble Sum_78 = Sum_100 * 78.6 / 100; //Вычисляем 78.6% В пунктахreturn (Sum_78 + b); // Вычисляем 78.6% в цене инструмента
}
//+------------------------------------------------------------------+double Function_Down(double a, double b) // имя функции и список параметров
{
double Sum_100 = b - a ; //Вычисляем 100% В пунктах от точек построения фибоdouble Sum_78 = Sum_100 * 21.4 / 100; //Вычисляем 78.6% В пунктахreturn (Sum_78 + a); // Вычисляем 78.6% в цене инструмента
}
//+------------------------------------------------------------------+
Wir gehen die Objekte in der Reihenfolge ihrer Erstellung durch, wobei wir ihre Namen ändern, um die Reihenfolge der Erstellung in der Liste beizubehalten, und schreiben die Merkmale und Ebenen der Objekte in Arrays in der Reihenfolge ihrer Erstellung wie in der Liste. Der erste Durchlauf des Codes, der die Reihenfolge der Erstellung von Objekten in der Liste beibehält, ändert die Namen, ergänzt mit Merkmalen zur Orientierung bei der Erstellung von Kriterien und behält die Reihenfolge in der Liste der Objekte für eine korrekte weitere Auswahl bei, indem er die Reihenfolge im Falle einer Änderung der Objektkoordinaten durchgeht, und das korrekte Überschreiben von Arrays in der Reihenfolge der ersten Befüllung.
Bislang wird die Logik beim ersten Durchgang gespeichert)))
Der Punkt ist, dass ich möchte, dass alles, was ich auf dem Chart zeichne, im Namen von Objekten geschrieben wird, einschließlich der Nummerierung von Objekten in der Liste, in der Reihenfolge der Erstellung, des Zeitrahmens, des Typs des Fibo-Levels und der Seriennummer des Fibo-Level-Typs, parallel dazu schreiben wir Arrays mit den Daten dieser Levels in der Reihenfolge der Objekte in der Liste der grafischen Objekte. Dann werden wir Kriterien für Handelsaktionen mit diesen Namen und Daten in Arrays entsprechend der Reihenfolge der Erstellung dieser Objekte erstellen.
Bisher habe ich die folgende Methode gefunden: Wir erstellen 4 Fibo-Objekte in der Liste in der Reihenfolge ihrer Erstellung, nummerieren sie für die Verarbeitung entsprechend der Reihenfolge der Erstellung Führen Sie den Expert Advisor
Der erste Durchlauf des Codes, der die Reihenfolge der Objekte in der Liste beibehält, ändert die Namen der Objekte, um die Reihenfolge ihrer Erstellung beizubehalten, und zeichnet Merkmale und Ebenen in Arrays in der Reihenfolge der Erstellung dieser Objekte wie in der Liste auf.
Während des ersten Durchlaufs wird die Logik gespeichert)))
Alles wäre viel einfacher, wenn den Objekten in der Objektliste implizit eine Nummer zugewiesen würde, die der Reihenfolge entspricht, in der sie erstellt wurden.
Nikolay Kositsin: Leute, die sich dessen bewusst sind, haben das Skizzieren mit der CCanvas-Klasse aufgenommen. Und ich habe ein völlig unbekanntes Problem entdeckt. Gefüllte Hintergrundrechtecke und Kreise werden gut gezeichnet, aber alle meine Versuche, einen Kreis zu zeichnen, endeten in einem kompletten Fehlschlag. Es gibt drei Varianten von Kreisen im Code und kein Ergebnis beim Zeichnen dieser Kreise im Diagramm. Funktioniert dieser Code für Kreise, oder fehlt da etwas?
Nikolai Semko: Es hat immer funktioniert.
Sie machen etwas falsch.
Ja, alles funktioniert. Versuchen Sie dieses Skript. Es zeichnet in drei Algorithmen Circle, CircleAA und CircleWu Kreise mit beliebigem Radius, Farbe und Transparenz
CircleAA sollte besser nicht verwendet werden - es ist ein sehr langsamer Algorithmus.
Es wäre viel einfacher, wenn den Objekten in der Liste der Objekte stillschweigend eine Nummer zugewiesen würde, die der Reihenfolge entspricht, in der sie erstellt wurden.
Ist der Zeitpunkt der Objekterstellung (verwenden Sie OBJPROP_CREATETIME als ulong-Typ) nicht ein Identifikator für die Reihenfolge der Objekterstellung?
Der Punkt ist, dass ich möchte, dass alles, was ich auf dem Chart zeichne, im Namen von Objekten geschrieben wird, einschließlich der Nummerierung von Objekten in der Liste, in der Reihenfolge der Erstellung, des Zeitrahmens, des Typs des Fibo-Levels und der Seriennummer des Fibo-Level-Typs, parallel dazu schreiben wir Arrays mit den Daten dieser Levels in der Reihenfolge der Objekte in der Liste der grafischen Objekte. Dann werden wir Kriterien für Handelsaktionen mit diesen Namen und Daten in Arrays entsprechend der Reihenfolge der Erstellung dieser Objekte erstellen.
Bisher habe ich die folgende Methode gefunden: Wir erstellen 4 Fibo-Objekte in der Liste in der Reihenfolge ihrer Erstellung, nummerieren sie für die Verarbeitung entsprechend der Reihenfolge der Erstellung Führen Sie den Expert Advisor
Der erste Durchlauf des Codes, der die Reihenfolge der Objekte in der Liste beibehält, ändert die Namen der Objekte, um die Reihenfolge ihrer Erstellung beizubehalten, und zeichnet Merkmale und Ebenen in Arrays in der Reihenfolge der Erstellung dieser Objekte wie in der Liste auf.
Beim ersten Durchgang bleibt die Logik erhalten)))
Ihre Frage ist auf "einmal" gelöst. Es reicht aus, die Umbenennung der erstellten Objekte zu schreiben.
/***********************OnChartEvent function************************/voidOnChartEvent(constint id, // идентификатор событияconstlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
if(id == CHARTEVENT_OBJECT_CREATE)
{
string result[]; // массив для получения строкStringSplit(sparam, ' ', result); // получим из имени созданного объекта подстрокиulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); // получим время создания объектаstring newName = result[0]+" "+result[1]+" "+string(timeCreate); // сформируем новое имя объектаObjectSetString(0, sparam, OBJPROP_NAME, newName); // переименуем объект
}
}/******************************************************************/
Jedes Mal, wenn Sie nun ein grafisches Objekt auf dem Chart mit einem installierten Expert Advisor erstellen, werden die Objektnamen die Zeit der Erstellung anstelle einer zufälligen Zahl im Namen tragen und streng in der Reihenfolge der Erstellung sortiert sein.
Können Sie einem ungebildeten "Programmierer" raten, was er zum Code des Indikators in mql4 hinzufügen muss, um das Histogramm an einer bestimmten Stelle auf dem Chart eines Instruments einzublenden? Es ist auch wünschenswert, dass das Histogramm halbtransparent ist, so dass es das Diagramm nicht verdeckt. In der angehängten Datei (ich weiß nicht, wie ich sie als Bild an die Nachricht anhängen kann) habe ich Ihnen ungefähr gezeigt, wie es aussehen sollte.
Ihre Frage ist im Handumdrehen gelöst. Es genügt, die Umbenennung der erstellten Objekte zu schreiben.
Jedes Mal, wenn Sie nun ein grafisches Objekt auf dem Chart erstellen, auf dem der Expert Advisor installiert ist, wird der Name des Objekts anstelle einer Zufallszahl den Zeitpunkt der Erstellung enthalten und streng in der Reihenfolge der Erstellung sortiert sein.
Vielen Dank!!! Nicht vollständig gelesen über diese Event-Handling-Funktionen, vereinfachen das Leben eines proger)
Artyom Trishkin: Ist die Objekterstellungszeit (Verwendung als ulong-Typ) OBJPROP_CREATETIME nicht ein Identifikator für den Auftrag zur Objekterstellung?
Da die Namen identisch sind, wird die kleinste erste Ziffer der Zahl ausgewählt, die das vierte Objekt ist, und da die ersten beiden Objekte eine vierte Ziffer haben, wird die kleinste Ziffer nach der vierten der ersten beiden Objekte ausgewählt.
Ja, nur die umgekehrte Umwandlung kann nicht durchgeführt werden. Die Zuweisung von Zufallszahlen an Objekte ist so, als würde man die Sprache MQL831 statt MQL5 nennen.
Um die Objekte in der Reihenfolge ihrer Erstellung manuell zu verarbeiten, müssen Sie meiner Meinung nach entweder die Namen nach allen oder während des Prozesses der Erstellung jedes einzelnen Objekts nummerieren und dann den Roboter laufen lassen, um das Array zu verarbeiten und zu schreiben, wobei die Nummerierung der Erstellung in den Namen beibehalten wird.
Meiner Meinung nach müssen wir, um Objekte in der Reihenfolge ihrer Erstellung manuell zu bearbeiten, entweder die Namen nummerieren, nachdem alle Objekte erstellt wurden, oder bei der Erstellung jedes Objekts und dann den Roboter einschalten, damit er ein Array verarbeitet und schreibt, das die Nummerierung der Erstellung in den Namen beibehält. In Zukunft wird dies ermöglichen, Objekte aus der Liste richtig auszuwählen, sowohl durch die ObjectName-Funktion als auch durch andere ähnliche Funktionen, in der Reihenfolgeder manuellerstellten Objekte.
Warum nicht ObjectGetInteger() mit der Eigenschaftskennung OBJPROP_CREATETIME verwenden?
Was hindert mich daran, ObjectGetInteger() mit der Eigenschafts-ID OBJPROP_CREATETIME zu verwenden?
Die Idee ist, dass ich möchte, dass alles, was ich auf dem Chart zeichne, im Namen von Objekten geschrieben wird, einschließlich der Nummerierung der Objekterstellung in der Liste, in der Reihenfolge der Erstellung, des Zeitrahmens, des Fibo-Level-Typs und der Seriennummer des Fibo-Level-Typs, gleichzeitig schreiben wir Arrays mit diesen Level-Daten in der Reihenfolge, in der sie aufgelistet sind. Dann werden wir Kriterien für Handelsaktionen durch diese Namen und Daten in Arrays entsprechend der Reihenfolge der Erstellung dieser Objekte erstellen.
Bisher habe ich diesen Weg gefunden: Wir erstellen 4 Fibo-Objekte
In der Liste wird die Reihenfolge der Erstellung gespeichert, nummerieren Sie sie für die Verarbeitung entsprechend der Reihenfolge der Erstellung
Führen Sie den Expert Advisor
Wir gehen die Objekte in der Reihenfolge ihrer Erstellung durch, wobei wir ihre Namen ändern, um die Reihenfolge der Erstellung in der Liste beizubehalten,
und schreiben die Merkmale und Ebenen der Objekte in Arrays in der Reihenfolge ihrer Erstellung wie in der Liste.
Der erste Durchlauf des Codes, der die Reihenfolge der Erstellung von Objekten in der Liste beibehält, ändert die Namen, ergänzt mit Merkmalen zur Orientierung bei der Erstellung von Kriterien und behält die Reihenfolge in der Liste der Objekte für eine korrekte weitere Auswahl bei, indem er die Reihenfolge im Falle einer Änderung der Objektkoordinaten durchgeht, und das korrekte Überschreiben von Arrays in der Reihenfolge der ersten Befüllung.
Bislang wird die Logik beim ersten Durchgang gespeichert)))
Der Punkt ist, dass ich möchte, dass alles, was ich auf dem Chart zeichne, im Namen von Objekten geschrieben wird, einschließlich der Nummerierung von Objekten in der Liste, in der Reihenfolge der Erstellung, des Zeitrahmens, des Typs des Fibo-Levels und der Seriennummer des Fibo-Level-Typs, parallel dazu schreiben wir Arrays mit den Daten dieser Levels in der Reihenfolge der Objekte in der Liste der grafischen Objekte. Dann werden wir Kriterien für Handelsaktionen mit diesen Namen und Daten in Arrays entsprechend der Reihenfolge der Erstellung dieser Objekte erstellen.
Bisher habe ich die folgende Methode gefunden: Wir erstellen 4 Fibo-Objekte in der Liste in der Reihenfolge ihrer Erstellung, nummerieren sie für die Verarbeitung entsprechend der Reihenfolge der Erstellung Führen Sie den Expert Advisor
Der erste Durchlauf des Codes, der die Reihenfolge der Objekte in der Liste beibehält, ändert die Namen der Objekte, um die Reihenfolge ihrer Erstellung beizubehalten, und zeichnet Merkmale und Ebenen in Arrays in der Reihenfolge der Erstellung dieser Objekte wie in der Liste auf.
Während des ersten Durchlaufs wird die Logik gespeichert)))
Alles wäre viel einfacher, wenn den Objekten in der Objektliste implizit eine Nummer zugewiesen würde, die der Reihenfolge entspricht, in der sie erstellt wurden.
Leute, die sich dessen bewusst sind, haben das Skizzieren mit der CCanvas-Klasse aufgenommen. Und ich habe ein völlig unbekanntes Problem entdeckt. Gefüllte Hintergrundrechtecke und Kreise werden gut gezeichnet, aber alle meine Versuche, einen Kreis zu zeichnen, endeten in einem kompletten Fehlschlag. Es gibt drei Varianten von Kreisen im Code und kein Ergebnis beim Zeichnen dieser Kreise im Diagramm. Funktioniert dieser Code für Kreise, oder fehlt da etwas?
Es hat immer funktioniert.
Ja, alles funktioniert.
Versuchen Sie dieses Skript. Es zeichnet in drei Algorithmen Circle, CircleAA und CircleWu Kreise mit beliebigem Radius, Farbe und Transparenz
CircleAA sollte besser nicht verwendet werden - es ist ein sehr langsamer Algorithmus.
Es wäre viel einfacher, wenn den Objekten in der Liste der Objekte stillschweigend eine Nummer zugewiesen würde, die der Reihenfolge entspricht, in der sie erstellt wurden.
Der Punkt ist, dass ich möchte, dass alles, was ich auf dem Chart zeichne, im Namen von Objekten geschrieben wird, einschließlich der Nummerierung von Objekten in der Liste, in der Reihenfolge der Erstellung, des Zeitrahmens, des Typs des Fibo-Levels und der Seriennummer des Fibo-Level-Typs, parallel dazu schreiben wir Arrays mit den Daten dieser Levels in der Reihenfolge der Objekte in der Liste der grafischen Objekte. Dann werden wir Kriterien für Handelsaktionen mit diesen Namen und Daten in Arrays entsprechend der Reihenfolge der Erstellung dieser Objekte erstellen.
Bisher habe ich die folgende Methode gefunden: Wir erstellen 4 Fibo-Objekte in der Liste in der Reihenfolge ihrer Erstellung, nummerieren sie für die Verarbeitung entsprechend der Reihenfolge der Erstellung Führen Sie den Expert Advisor
Der erste Durchlauf des Codes, der die Reihenfolge der Objekte in der Liste beibehält, ändert die Namen der Objekte, um die Reihenfolge ihrer Erstellung beizubehalten, und zeichnet Merkmale und Ebenen in Arrays in der Reihenfolge der Erstellung dieser Objekte wie in der Liste auf.
Beim ersten Durchgang bleibt die Logik erhalten)))
Ihre Frage ist auf "einmal" gelöst. Es reicht aus, die Umbenennung der erstellten Objekte zu schreiben.
Jedes Mal, wenn Sie nun ein grafisches Objekt auf dem Chart mit einem installierten Expert Advisor erstellen, werden die Objektnamen die Zeit der Erstellung anstelle einer zufälligen Zahl im Namen tragen und streng in der Reihenfolge der Erstellung sortiert sein.
Ihre Frage ist im Handumdrehen gelöst. Es genügt, die Umbenennung der erstellten Objekte zu schreiben.
Jedes Mal, wenn Sie nun ein grafisches Objekt auf dem Chart erstellen, auf dem der Expert Advisor installiert ist, wird der Name des Objekts anstelle einer Zufallszahl den Zeitpunkt der Erstellung enthalten und streng in der Reihenfolge der Erstellung sortiert sein.
Vielen Dank!!! Nicht vollständig gelesen über diese Event-Handling-Funktionen, vereinfachen das Leben eines proger)
Ist die Objekterstellungszeit (Verwendung als ulong-Typ) OBJPROP_CREATETIME nicht ein Identifikator für den Auftrag zur Objekterstellung?
Ja! Danke!!!