Господа Товарищи! Прочитал статью! Сделал все как в ней написано, ну думаю сейчас попаду в рай. Ан нет - Мастер МКЛ 5 моего файла с сигналами не увидел. Я еще раз все проверил, все заново сделал, еще раз проверил, но сигнала в мастере создания советников не видно. Прикладываю свой файл который я создал в соответствии с рекомендациями в статье. Помогите разобраться что я сделал не так или наоборот автор статьи чего-то важное не дописал, из-за чего и не срастается никак. Короче помогите чем можете.
Описатель класса - важная часть исходного текста.
В Вашем описателе две явные ошибки. Одна из них не даёт обнаружить сигнал, т.к. указан несуществующий ENUM. Вторая создаст проблемы при компиляции (неверно указано имя параметра).
Ещё одна тонкость. Перед ключевым словом, в каждой строке описателя должен быть только один пробел. (я думаю в будущем это ограничение будет снято, а пока так)
// wizard description start
//+---------------------------------------------------------------------------+
//| Description of the class |
//| Title=Сигнал пересечению ценой скользящей средней |
//| Type=Signal |
//| Name=Sample |
//| Class=CSampleSignal |
//| Page= |
//| Parameter=PeriodMA,int,12 |
//| Parameter=ShiftMA,int,0 | было SniftMA
//| Parameter=MethodMA,ENUM_MA_METHOD,MODE_EMA |
//| Parameter=AppliedMA,ENUM_APPLIED_PRICE,PRICE_CLOSE | было ENUM_MA_APLLIED_PRICE
//| Parameter=Limit,double,0.0 |
//| Parameter=StopLoss,double,50.0 |
//| Parameter=TakeProfit,double,50.0 |
//| Parameter=Expiration,int,10 |
//+---------------------------------------------------------------------------+
// wizard description end
Далее по тексту.
Отсутствие конструктора - это плохо. Вы должны инициализировать члены-данные значениями по-умолчанию. Ведь в общем случае, метод установки какого-либо параметра может и не вызываться.
И последнее, неверно описаны методы
void LimitMA (int value) {m_limit=value;}
void StopLoss (int value) {m_stop_loss=value;}
void TakeProfit (int value) {m_take_profit=value;}
нужно
void LimitMA (double value) {m_limit=value;}
void StopLoss (double value) {m_stop_loss=value;}
void TakeProfit (double value) {m_take_profit=value;}
Конечно большое спасибо за ответ. Все исправил все получилось.
Но при компиляции уже самого эксперта он мне выдал ошибку, которую я бы сам не нашел нашел её компилятор. Вы кстати когда мне отвечали видимо сами для себя незаметно её исправили, но в первоначальном тексте статьи она есть.
в статье
void Limit(double value) { m_limit=value; }
в ответе на мою просьбу о помощи
void LimitМА(double value) { m_limit=value;}
отсутствие МА в файле сигнала при компиляции уже самого эксперта после его удачной генерации выдает следующую ошибку
1 error(s), 0 warning(s) 2 1
следуя в моем по крайней мере случае в строку 77 видим
signal.Limit(Inp_Signal_Sample_Limit);
вставляем МА после слова Limit
ошибка в тексте эксперта исчезает.
Если я не прав то извините. Я не профессионал.
И еще: вот эту ошибку выдает несмотря ни на что:
'--' - l-value required 1234.mq5 31 57
'--' - l-value required 1234.mq5 31 59'--' - l-value required 1234.mq5 31 61
'--' - l-value required 1234.mq5 31 63
'--' - l-value required 1234.mq5 31 65
'--' - l-value required 1234.mq5 31 67
'--' - l-value required 1234.mq5 31 69
'--' - l-value required 1234.mq5 31 71
'--' - l-value required 1234.mq5 31 73
'--' - l-value required 1234.mq5 31 75
'--' - l-value required 1234.mq5 31 77
'--' - l-value required 1234.mq5 31 79
'--' - l-value required 1234.mq5 31 81
'--' - l-value required 1234.mq5 31 83
'--' - l-value required 1234.mq5 31 85
'--' - l-value required 1234.mq5 31 87
'--' - l-value required 1234.mq5 31 89
'--' - l-value required 1234.mq5 31 91
'--' - l-value required 1234.mq5 31 93
'--' - l-value required 1234.mq5 31 95
'--' - l-value required 1234.mq5 31 97
'--' - l-value required 1234.mq5 31 99
'--' - l-value required 1234.mq5 31 101
'--' - l-value required 1234.mq5 31 103
'--' - l-value required 1234.mq5 31 105
'--' - l-value required 1234.mq5 31 107
'--' - l-value required 1234.mq5 31 109
'--' - l-value required 1234.mq5 31 111
'--' - l-value required 1234.mq5 31 113
'--' - l-value required 1234.mq5 31 115
'-' - operand expected 1234.mq5 31 117
'Inp_Signal_Sample_Expiration' - undeclared identifier 1234.mq5 77 22
32 error(s), 0 warning(s) 33 1
заходим в 31 строку советника видим следующее
input double Inp_Signal_Sample_StopLoss =50.0;
input double Inp_Signal_Sample_TakeProfit=50.0;
input int Inp_Signal_Sample_Expiration=10-------------------------------------------------------------;
//--- inputs for money
input double Inp_Money_FixLot_Percent =10.0;
input double Inp_Money_FixLot_Lots =0.1;
Убираем хвост в виде пунктирной линии идущей от 10 и все ошибки исчезают.
эксперт готов к работе и оптимизации.
- www.mql5.com
Да и соответственно в описателе тоже должно стоять не Limit, а LimitМА
Да, LimitМА я просмотрел.
Вообще, на будущее... При создании описателя класса, активнее пользуйтесь копипастом, т.к. компилятор не проверяет коментарии (из которых состоит описатель), а совпадение имён методов и имён параметров описателя важно. Это "вылезает" только при компиляции эксперта и вызывает отрицательные эмоции. Хотя, как видите, тоже ни чего смертельного.
И еще: вот эту ошибку выдает несмотря ни на что:
'--' - l-value required 1234.mq5 31 57
- www.mql5.com
Доброго времени суток!
- В прикрепленном к статье файле опечатка, если я ничего не путаю! В описании функции CheckOpenLong в строках для рассчета переменных sl и tp нужно поменять знаки на противоположные.
- Изменил фунцкию CheckOpenLong следующим образом:
bool CSampleSignal::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { Print("Close(0)=",DoubleToString(Close(0),5)," Close(1)=",DoubleToString(Close(1),5)); Print("Open(0)=",DoubleToString(Open(0),5)," Open(1)=",DoubleToString(Open(1),5)); Print("MA(0)=",DoubleToString(MA(0),5)," MA(1)=",DoubleToString(MA(1),5)); return(false); }
т.е. она должна просто выводить в журнал значиния Close, Open и MA за последний и предыдущий бар. Так вот если значние советника EveryTick равно false, то всё работает как надо, если же true - вместо значений выводятся нули! Подскажите в чем дело? Что я делаю не так???
Спасибо!
Доброго времени суток!
- В прикрепленном к статье файле опечатка, если я ничего не путаю! В описании функции CheckOpenLong в строках для рассчета переменных sl и tp нужно поменять знаки на противоположные.
- Изменил фунцкию CheckOpenLong следующим образом:т.е. она должна просто выводить в журнал значиния Close, Open и MA за последний и предыдущий бар. Так вот если значние советника EveryTick равно false, то всё работает как надо, если же true - вместо значений выводятся нули! Подскажите в чем дело? Что я делаю не так???
Спасибо!
По п.1, спасибо за найденную ошибку. Будет исправлено.
По п.2, была небольшая несогласованность с MQL5, исправлено. Должно появиться в ближайшей сборке.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Как написать модуль торговых сигналов для Мастера MQL5:
Генератор торговых стратегий Мастера MQL5 значительно упрощает проверку торговых идей. В статье рассказывается о том, как написать и подключить в Мастер MQL5 свой собственный класс торговых сигналов с реализацией сигналов по пересечению ценой скользящей средней, рассматривается структура и формат описания созданного класса для Мастера MQL5.
Автор: MetaQuotes