Создался один объект, затем ВТОРОЙ (оказалось пересоздания нет - создаётся новый), позиций BUY открывается с magic "0" - то есть её открыл второй объект "trade".
Затем видно, что уничтожаются два объекта в обратном порядке: сначала второй (с magic "0"), а затем первый (с magic "123").
области видимости как у обычной переменной, и даже более при выходе из void OnTick() будет вызван деструктор CTrade , а при следующем OnTick() будет опять вызван конструктор CTrade
области видимости как у обычной переменной, и даже более при выходе из void OnTick() будет вызван деструктор CTrade , а при следующем OnTick() будет опять вызван конструктор CTrade
#include <Trade\Trade.mqh>
CTrade trade;// Объект trade в глобальной области программыintOnInit()
{
trade.SetExpertMagicNumber(123);
}
voidOnTick()
{
CTrade *trade_ptr=GetPointer(trade);// Указатель на объект trade
trade_ptr.Buy(0.1);
}
На мой взгляд, в mql очень узок набор задач которые надо решать посредством ООП. Сам язык, мне кажется, ничто иное как ООП на С++ или ещё чего-то. И в это ООП предлагается ООП в виде стандартной библиотеки. А к этому ООП от ООП предлагается впендюрить, иначе не скажешь, ещё ООП. А потом ещё одну ступень... Правильно сказал Колдун, хоть и злой, но доброжелательный, для моих задач ООП как собаке поворотка. И какой прок от постановки задачи и последующей реализации её посредством ООП если эту задачу без проблем можно решить в процедурном стиле.
Вот к примеру взять .mqh от fxsaber`a для написания кодов для МТ5 так-же как для МТ4. Может кому-то это и надо, но посмотрите кому... Тому кто не хочет или абсолютно не может освоить mql5. Или взять iCanvas у Николая ..., забыл фамилию, ну вы поняли. Вроде-бы полезная библиотека, но в ней разобраться не просто, а никакой документации, хотя-бы маломальского описания нет. Это не претензия, извини Николай, это факт. Так-что когда я решил попробовать написание графической метки, мне оказалось проще написать не обращаясь ни к стандартной библиотеке, ни к библиотеке Николая.
На самом деле, Алексей, информации про iCanvas можно достаточно почерпнуть на странице описания в КБ. https://www.mql5.com/ru/code/22164. Нужно внимательно изучить комментарии в коде. Смысл всех функций интуитивно понятен из их имен.
double X(double bar); // The X coordinate by the bar number. The bar number must be of type double, otherwise, the bar will be interpreted as time.double X(datetime Time); // The X coordinate by the time.double Y(double Price); // The Y coordinate by the price.double Price(int y); // Price by the Y coordinatedouble Bar(int x); // bar number by coordinate X datetime TimePos(int x); // time by coordinate X double Close(int x);
double Open(int x);
double High(int x);
double Low(int x);
void Comm(string text); // Print commentvoid TextPosition(int x,int y); // Setting the XY position for comment output in pixelsvoid TextPosition(double x,double y); // Setting the XY position for outputting comments as a percentage of the width and height of the windowvoid CurentFont(string FontName="Courier New",int size=18,int LineStep=20,color clr=clrDarkOrchid,double transp=1.0); // Set font options for comment. LineStep - step between lines. transp - transparency from 0 to 1void LineD(double x1,double y1,double x2,double y2,constuint clr); // тоже самое что и Line в CCanvas, только без глюков и с double координатамиint TextPosX; // Position X for comment textint TextPosY; // Position Y for comment textint StepTextLine; // line spacing for commentuint TextColor; // Font color for comment
Но, возможно, ты и прав. Надо записать видео с написанием какого-нибудь простого, но полезного индикатора с использованием iCanvas и объяснить наглядно некоторые особенности данного класса. Нюансы все же есть.
Правда, если честно, то, как написан iCanvas, мне сейчас самому жутко не нравиться. Хочется его скомкать, выкинуть в корзину и написать заново более правильным стилем.
70% кода в этой библиотеке - это ускорение некоторых штатных функций, которые нужны для работы с координатами и доступом к данным.
Поэтому, если применять этот класс, то графика будет быстрее, чем если это делать "в лоб" с CCanvas. В этом его главная фишка и преимущество. Ну и, конечно, реально проще с ним формировать графики, фигуры, комментарии.
Хочется еще добавить, Алексей, что цель публикаций многих в CodeBase, в том числе fxsaber и моих публикаций - это бескорыстное "просто поделиться - кому нужно, тот разберется". Поэтому часто тратить время на подробные инструкции просто влом.
Тем более на форуме я много публиковал кототкие и наглядные примеры с применением iCanvas. Вот, например: https://www.mql5.com/ru/code/25929
Данная библиотека и класс iCanvas упростит написание программ с применением Canvas. Вот пример простого индикатора с применением данной библиотеки и его демонстрация. Обратите внимание, что в данном примере в теле индикатора отсутствует функция обработки событий OnChartEvent. Но она также может и присутствовать. Особенности данной библиотеки...
На самом деле, Алексей, информации про iCanvas можно достаточно почерпнуть на странице описания в КБ. https://www.mql5.com/ru/code/22164. Нужно внимательно изучить комментарии в коде. Смысл всех функций интуитивно понятен из их имен.
Николай, не обращай на мои слова никакого внимания. Таких как я среди изучающих программирование, если я не один, то их так мало, что вообще не сто́ит на них обращать внимание.
Для меня чтобы изучить комментарии в коде, надо сначала изучить аглицкий язык.)))
Была-бы острая необходимость, можно было-бы потратить время и перевести все комментарии, постараться понять машинный перевод и подправить. Но ведь нет такой необходимости.
Вот к примеру взять .mqh от fxsaber`a для написания кодов для МТ5 так-же как для МТ4. Может кому-то это и надо, но посмотрите кому... Тому кто не хочет или абсолютно не может освоить mql5.
Наверное, неплохо знаю MQL5, но есть потребность в торговой библиотеке. Речь не про MT4-style, а про торговую библиотеку для MT5, с которой будет удобно и быстро работать. И в которой нет багов на реальных торгах.
Поскольку такой библиотеки не было (и есть ли - не знаю) в паблике, пришлось ваять свою. Для этого нужно было определиться, какой велосипед в виде набора торговых функций изобретать. Позаимствовал MT4-набор, как довольно неплохой. Что бонусом дало возможность не писать документацию к библиотеке и изучать ее. Ну и другие плюшки.
Так что знание MQL5 иногда на высоком уровне у пользователей.
#ifndef TEST_H_
#define TEST_H_
namespace TEST
{
//----------------------------------------template < typename T >
class CBase
{
public:
typedefvector<T> TypeVector;
typedefvector<T> TypeMatrix;
};
//----------------------------------------template < typename T >
class CTest : public CBase<T>
{
public:
//using TypeVector = typename CBase<T>::TypeVector;//using TypeMatrix = typename CBase<T>::TypeMatrix;
};
}//namespace TEST#endif
Подскажите, в mql5 как-то надо переопределять пользовательские типы в дочернем классе? Наподобие как указано в закомментированных строках С++ нотации. Но ключевого слова using нет в mql5.
Или пользовательские типы базового класса, автоматом должны наследоваться во все дочерние классы? Если наследоваться не должны, то как правильно тогда переопределить?
Подскажите, в mql5 как-то надо переопределять пользовательские типы в дочернем классе? Наподобие как указано в закомментированных строках С++ нотации. Но ключевого слова using нет в mql5.
Или пользовательские типы базового класса, автоматом должны наследоваться во все дочерние классы? Если наследоваться не должны, то как правильно тогда переопределить?
Да? А разве не создаёт новый, независимый объект?
Сейчас проверим - вставлю такие строки:
а также
и проверочный скрипт:
Результат:
Создался один объект, затем ВТОРОЙ (оказалось пересоздания нет - создаётся новый), позиций BUY открывается с magic "0" - то есть её открыл второй объект "trade".
Затем видно, что уничтожаются два объекта в обратном порядке: сначала второй (с magic "0"), а затем первый (с magic "123").
Да? А разве не создаёт новый, независимый объект?
да, будет новый экземпляр класса CTrade
области видимости как у обычной переменной, и даже более при выходе из void OnTick() будет вызван деструктор CTrade , а при следующем OnTick() будет опять вызван конструктор CTrade
да, будет новый экземпляр класса CTrade
области видимости как у обычной переменной, и даже более при выходе из void OnTick() будет вызван деструктор CTrade , а при следующем OnTick() будет опять вызван конструктор CTrade
Да я понял это сразу после ответа Артёма.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
ООП для школьников.
Artyom Trishkin, 2019.10.08 20:23
Всё точно так же, как и с переменными.
И фокус:
На мой взгляд, в mql очень узок набор задач которые надо решать посредством ООП. Сам язык, мне кажется, ничто иное как ООП на С++ или ещё чего-то. И в это ООП предлагается ООП в виде стандартной библиотеки. А к этому ООП от ООП предлагается впендюрить, иначе не скажешь, ещё ООП. А потом ещё одну ступень... Правильно сказал Колдун, хоть и злой, но доброжелательный, для моих задач ООП как собаке поворотка. И какой прок от постановки задачи и последующей реализации её посредством ООП если эту задачу без проблем можно решить в процедурном стиле.
Вот к примеру взять .mqh от fxsaber`a для написания кодов для МТ5 так-же как для МТ4. Может кому-то это и надо, но посмотрите кому... Тому кто не хочет или абсолютно не может освоить mql5. Или взять iCanvas у Николая ..., забыл фамилию, ну вы поняли. Вроде-бы полезная библиотека, но в ней разобраться не просто, а никакой документации, хотя-бы маломальского описания нет. Это не претензия, извини Николай, это факт. Так-что когда я решил попробовать написание графической метки, мне оказалось проще написать не обращаясь ни к стандартной библиотеке, ни к библиотеке Николая.
На самом деле, Алексей, информации про iCanvas можно достаточно почерпнуть на странице описания в КБ. https://www.mql5.com/ru/code/22164. Нужно внимательно изучить комментарии в коде. Смысл всех функций интуитивно понятен из их имен.
Но, возможно, ты и прав. Надо записать видео с написанием какого-нибудь простого, но полезного индикатора с использованием iCanvas и объяснить наглядно некоторые особенности данного класса. Нюансы все же есть.
Правда, если честно, то, как написан iCanvas, мне сейчас самому жутко не нравиться. Хочется его скомкать, выкинуть в корзину и написать заново более правильным стилем.
70% кода в этой библиотеке - это ускорение некоторых штатных функций, которые нужны для работы с координатами и доступом к данным.
Поэтому, если применять этот класс, то графика будет быстрее, чем если это делать "в лоб" с CCanvas. В этом его главная фишка и преимущество. Ну и, конечно, реально проще с ним формировать графики, фигуры, комментарии.
Хочется еще добавить, Алексей, что цель публикаций многих в CodeBase, в том числе fxsaber и моих публикаций - это бескорыстное "просто поделиться - кому нужно, тот разберется". Поэтому часто тратить время на подробные инструкции просто влом.
Тем более на форуме я много публиковал кототкие и наглядные примеры с применением iCanvas.
Вот, например:
https://www.mql5.com/ru/code/25929
https://www.mql5.com/ru/code/25113
https://www.mql5.com/ru/code/25414
https://www.mql5.com/en/code/24798
https://www.mql5.com/ru/forum/227736/page41#comment_13259627
https://www.mql5.com/ru/forum/227736/page24#comment_12836622
https://www.mql5.com/en/forum/323629#comment_13442470
https://www.mql5.com/ru/forum/321704#comment_13131995
https://www.mql5.com/ru/forum/317257/page3#comment_12341593
https://www.mql5.com/en/forum/229521/page2#comment_10258148
На самом деле, Алексей, информации про iCanvas можно достаточно почерпнуть на странице описания в КБ. https://www.mql5.com/ru/code/22164. Нужно внимательно изучить комментарии в коде. Смысл всех функций интуитивно понятен из их имен.
Николай, не обращай на мои слова никакого внимания. Таких как я среди изучающих программирование, если я не один, то их так мало, что вообще не сто́ит на них обращать внимание.
Для меня чтобы изучить комментарии в коде, надо сначала изучить аглицкий язык.)))
Была-бы острая необходимость, можно было-бы потратить время и перевести все комментарии, постараться понять машинный перевод и подправить. Но ведь нет такой необходимости.
Вот к примеру взять .mqh от fxsaber`a для написания кодов для МТ5 так-же как для МТ4. Может кому-то это и надо, но посмотрите кому... Тому кто не хочет или абсолютно не может освоить mql5.
Наверное, неплохо знаю MQL5, но есть потребность в торговой библиотеке. Речь не про MT4-style, а про торговую библиотеку для MT5, с которой будет удобно и быстро работать. И в которой нет багов на реальных торгах.
Поскольку такой библиотеки не было (и есть ли - не знаю) в паблике, пришлось ваять свою. Для этого нужно было определиться, какой велосипед в виде набора торговых функций изобретать. Позаимствовал MT4-набор, как довольно неплохой. Что бонусом дало возможность не писать документацию к библиотеке и изучать ее. Ну и другие плюшки.
Так что знание MQL5 иногда на высоком уровне у пользователей.
Подскажите, в mql5 как-то надо переопределять пользовательские типы в дочернем классе?
Наподобие как указано в закомментированных строках С++ нотации.
Но ключевого слова using нет в mql5.
Или пользовательские типы базового класса, автоматом должны наследоваться во все дочерние классы?
Если наследоваться не должны, то как правильно тогда переопределить?
Подскажите, в mql5 как-то надо переопределять пользовательские типы в дочернем классе?
Наподобие как указано в закомментированных строках С++ нотации.
Но ключевого слова using нет в mql5.
Или пользовательские типы базового класса, автоматом должны наследоваться во все дочерние классы?
Если наследоваться не должны, то как правильно тогда переопределить?
В MQL это не работает.
В Вашем примере и typedef и using просто вводят псевдонимы для существующих типов.