Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это чисто тестовый класс или реально собираетесь его использовать?
второе, я все равно под МТ4 пишу, даже для себя - он не работает в тестере на нескольких символах, если что то полезного увижу в МТ4, тогда с помощью MT4Orders перейду на МТ5 - проверенно мои "творчества" без проблем с этой библиотекой работают
первое, хочу посмотреть саму идею правильного ООП - поэтому и тестирую, чтобы увидеть что получится, пока довольно геморойно все идет.... посмотрим, временем располагаю, вот зарядку себе решил сделать ))))
я знаю, что несамый лучший способ инициализировать до момента запуска основного кода, вернее ранее так считал,но сколько не проверял, сколько новых билдов было, - в MQL всегда все доступно даже на глобальном уровне видимости, видел исходники люди непарятся берут в самом верху кода и пишут прямо так:
и работают такие неправильные инициализации много лет из билда в билд, в общем разбаловали разработчики по самое - самое народ ))))
ЗЫ: тут в общем как всегда при использовании ООП - главное задачу правильно разбить на составные элементы и не наследоваться от всего что под рукой, сейчас не знаю куда текстовый вывод ошибок "присунуть" - это нужно везде, в любом классе и в любом месте программы, скорее всего придется создавать базовый класс как @Vladimir Simakov выше показал свой код
пп 1-3 все решаемо, НО.. ОК, вот со статиками помогли, пусть так ибо есть справка, хоть чем то свое решение можно обосновать, теперь код такой:
создал 3 экземпляра Cdeal, получил в логе:
...
пока все работает как и задумано!
Но всё ж лучше был ваш первоначальный вариант. Не стоит жертвовать надёжностью ради экономии строчки кода )
какой именно? - тут пол топика в моих вариантах )))
а так - да, Вы правы на все сто!
ЗЫ:
в самом простом случае и он же самый надежный - создали экземпляр класса через new в OnInit() - и сразу скопировали все переменные окружения терминала, но это не самый лучший вариант - если я планирую в этом примере при запуске конструктора сразу открывать ордер, затем возможно этот экземпляр класса будет удален, затем возможно повторно будет создан - тут уже набегает из за повторных вызовов не эффективность - начинаю повторно окружение терминала загружать, опять память расходую.... в общем это не разрешимо этим способом
ЗЫЗЫ: возможно еще день поэкспериментирую, и в итоге пример @Vladimir Simakov возьму за основу - там все предельно ясно
вот набросал свой класс, который должен один раз инициализировать поля константными значениями, кажется все работает как задумано:
не нравятся мне 2 момента:
1. повторяю вызов SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP) - ибо не оговорен порядок инициализации, т.е. не факт, что у меня будет сначала инициализирована VolumeSTEP , а лишь затем уже будет вызван GetDigitsInVolumeStep()
2. хотелось бы избавиться от использования статического метода static int GetDigitsInVolumeStep() - насмотрелся видео на ютубе, что в чистом ООП не гоже использовать статические методы, вот борюсь с ветряными мельницами
ссылки на видео, он одинаковы по сути https://youtu.be/lfdAwl3-X_c и https://youtu.be/zME4SOCHT0I
как бы вот эти 2 момента, которые мне не нравятся по другому переписать ?
1. Ничего страшного в двойном вызове этой функции нет.
2. А Вас не смущает, что те кто против использования статических функций не приводят ни малейших аргументов?
Лучше не смотрите видео от кого попало, а читайте книги.
2. А Вас не смущает, что те кто против использования статических функций не приводят ни малейших аргументов?
а Вы первый кто поддержал меня, что видео не соответствует ничему из практики, я писал в другом топике свое мнение про видео - докладчик даже на вопросы студентов не смог ответить
а Вы первый кто поддержал меня, что видео не соответствует ничему из практики, я писал в другом топике свое мнение про видео - докладчик даже на вопросы студентов не смог ответить
Не думаю, что ООП - есть урезание собственных возможностей ради слепого следования необоснованным постулатам неких интернет-глашатаев, где каждый метёт по-своему.
Не думаю, что ООП - есть урезание собственных возможностей ради слепого следования необоснованным постулатам неких интернет-глашатаев, где каждый метёт по-своему.
если видео смотрел, то должен понимать, что цель .... ну в общем ты тоже ничего не понимаешь и не дорос еще - по крайней мере мне так объяснил А100
ЗЫ: чуть позже с интерфейсами немного поэкспериментирую, может некая "сущность-красотища" появится ))))
Посмотрел по поводу статиков его видео, всё ради того, чтобы писать так:
Ну обёртку написать над статиком разве проблема?
class Stateless_with_state { Stateless q; Data d; call() {q::call(d);} };
И через шаблоны явно эффективнее. Понравился вопрос из зала https://www.youtube.com/watch?v=75U9eefFYoU#t=33m25s
ЗЫ: чуть позже с интерфейсами немного поэкспериментирую, может некая "сущность-красотища" появится ))))
проверил будет ли работать "Паттерн ООП - Паттерны поведения -Стратегия (Strategy) "
2019.08.31 21:04:40.441 tst (EURUSD,H1) Strategy_1::Strategy_1
2019.08.31 21:04:40.442 tst (EURUSD,H1) Context::Context
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_2::Strategy_2
2019.08.31 21:04:40.442 tst (EURUSD,H1) Context::Context
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_2::Algorithm
по моему работает без проблем
проверил будет ли работать "Паттерн ООП - Паттерны поведения -Стратегия (Strategy) "
2019.08.31 21:04:40.441 tst (EURUSD,H1) Strategy_1::Strategy_1
2019.08.31 21:04:40.442 tst (EURUSD,H1) Context::Context
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_2::Strategy_2
2019.08.31 21:04:40.442 tst (EURUSD,H1) Context::Context
2019.08.31 21:04:40.442 tst (EURUSD,H1) Strategy_2::Algorithm
по моему работает без проблем
1. Оператор new возвращает указатель, разрабы конечно намудрили с неявными разыменовываниями, поэтому твой вариант и работает, но лучше уж на недокументированные вещи не завязываться.
2. У нас конечно не С++, но очень похоже, поэтому списки инициализации (не знаю насчет эффективности) это кошерно.