
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это всё-равно что чесать правое ухо левой ногой... Всё что тут написано умещается в одно условие.
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if((ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE) == ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
{
Print("Hedging only!");
return(INIT_FAILED);
}
}
Чего ради городить огород из лего??? Видимо такое поколение... ЕГЭ и лего.
Несколько лет назад -- на 4-ом форуме -- был один, у него советник был настолько детализирован на функции -- буквально как и у Карпутова, строчка-функция.
Как по мне, когда делаются подобные проверки, то изначально априори предполагается, что пользователь советника неадекват. Т.е. ему надо при каждом запуске напоминать, что советник не работает на netting-счетах.
Причём пользователь должен быть "хитрый неадекват" -- если советник почему-то не ставится при любой попытке -- он должен ещё понять, что нужно посмотреть во вкладку "Эксперты" -- т.к. для вывода такой важной информации используется Print().
Как-то решил выпендрится и поставил для заказчика в индикаторе такой выход как return(INIT_FAILED)
Помню как около часа не мог понять, почему индикатор не ставится на график.
Представляю пользователя -- он ставит советник/индикатор -- а он не ставится.
Шаг 11: Работаем только на hedge-счетах.
Остался последний нюанс - нужно безжалостно отсечь попытки запускать советник на netting торговых счетах. Для этого введём переменную "m_margin_mode" с типом ENUM_ACCOUNT_MARGIN_MODE:
double ExtSizeOfBar=0.0; //
bool TradeIsAllowed=true; //
ENUM_ACCOUNT_MARGIN_MODE m_margin_mode;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
и две функции: установка значения нашей переменной "m_margin_mode"
//| |
//+------------------------------------------------------------------+
void SetMarginMode(void)
{
m_margin_mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
}
и проверка типа торгового счёта:
//| |
//+------------------------------------------------------------------+
bool IsHedging(void)
{
return(m_margin_mode==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);
}
Функции "SetMarginMode" и "IsHedging" скопируйте в самый конец советника.
Теперь пропишем вызовы этих двух функций:
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SetMarginMode();
if(!IsHedging())
{
Print("Hedging only!");
return(INIT_FAILED);
}
//---
m_trade.SetExpertMagicNumber(InpMagic); // sets magic number
Теперь советник при попытке запуска на netting счетах будет выгружаться с сообщением об ошибке:
Сохраним версию 1.10 в Хранилище.
Но так как показано в примере -- делать, конечно же, нельзя -- выделил зелёным моменты:
-- объявление глобальной переменной
-- инициализация этой глобальной переменной в какой-то функции
-- использование этой переменной в какой-то другой функции
А ты сходи в ветку, где я людям объясняю и рассказываю. А ты полистай "Любые вопросы новичков, профи, не проходите мимо, без вас - никуда" на mql4 и удивись сколько я сделал до того как ты вообще появился на ресурсе
Артем, на мой взгляд, у тебя просто несколько другой подход, по мне - так объяснения Владимира очень даже нормальны. И использование объектов из СБ - тоже очень даже к месту.
Другое дело, что код СБ - слабо переносим. Тот же класс позиции - мне пришлось его полностью писать самому, чтобы он совершенно одинаково работал на МТ4, МТ5-Net и MT5-Hedge, поскольку класс из СБ - на такое неспособен.
Но сами принципы написания Владимир, по-моему, выкладывает очень даже толково.
... И использование объектов из СБ - тоже очень даже к месту. ...
Стандартная библиотека (СБ) -- это язык в языке. То что Карпутов поясняет -- он поясняет для новичков, для других его пояснения ни к чему. Т.е. Карпутов новичкам предлагает вместо изучения mql5 изучать СБ.
Но так как показано в примере -- делать, конечно же, нельзя -- выделил зелёным моменты:
-- объявление глобальной переменной
-- инициализация этой глобальной переменной в какой-то функции
-- использование этой переменной в какой-то другой функции
так нельзя делать ещё и по многим другим причинам..
но не мучай себя, просто Владимир пользуясь положением модератора попутал общий форум с личным блогом и зная сверх-критичное отношение к нему троллит.
Не знаю, может ему какие бонусы за флейм полагаются, а может просто новогоднее похмелье :-)Стандартная библиотека (СБ) -- это язык в языке. То что Карпутов поясняет -- он поясняет для новичков, для других его пояснения ни к чему. Т.е. Карпутов новичкам предлагает вместо изучения mql5 изучать СБ.
Не согласен. Лично я именно так начинал измучать С++ - изучая библиотеку MFC, и считаю этот опыт очень полезным. Как раз СБ дает очень даже хорошее представление о работе с классами, то есть, одновременно мы получаем не только представление о работе готовых классов СБ (а большая часть этих классов - вполне себе хорошо написаны), но и об общих принципах ООП, использующихся в MQL5
так нельзя делать ещё и по многим другим причинам..
но не мучай себя, просто Владимир пользуясь положением модератора попутал общий форум с личным блогом и зная сверх-критичное отношение к нему троллит.
Не знаю, может ему какие бонусы за флейм полагаются, а может просто новогоднее похмелье :-)А для новичка, для полного понимания происходящего, нужно как раз изучать работу методов, а не приёмы их использования.
Да, с этим согласен, это полезнее.
Но, справедливости ради, все же отмечу, что работа методов должна изучаться и на примере использования. Согласен, что Владимир увлечен "внешней стороной", классы используются как "черные ящики". Но, для новичков, по-моему, вполне можно начинать именно с такого подхода.
Я очень хорошо помню, насколько мне класс CFile понравился больше, чем набор файловых функций (типа fopen(), или уже не помню, какие там они). Хотя, сперва использовал этот класс именно как "черный ящик", и лишь позже стал заглядывать внутрь него, разбираясь, как и что там написано.
так нельзя делать ещё и по многим другим причинам..
но не мучай себя, просто Владимир пользуясь положением модератора попутал общий форум с личным блогом и зная сверх-критичное отношение к нему троллит.
Не знаю, может ему какие бонусы за флейм полагаются, а может просто новогоднее похмелье :-)Человек, который на каждом углу вещает два тезиса:
-- вы работаете с МТ4 потому что вы ленивые
-- вам не нравится СБ, потому что вы боитесь ООП
Такой человек должен быть безукоризнен в своих советах и пояснениях.
Но его советы и его кода далеки не просто от идеала, но и порой с сомнительной корректностью.
Если бы то что делает Карпутов делал бы кто-то другой без статуса модератора и без права банить и удалять посты -- то его бы деятельность протекала бы ровно и вообще без нареканий (даже ни для кого не заметно).
... Так-что я отсюда удаляюсь.
Аналогично.