Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 196
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну что-ж, попробую ещё вставить свою лепту в твоё образование.
На вы буду обращаться когда буду посылать. У меня есть снимок указателя...
Скажи пожалуйста, не кажется-ли неправильным вызывать одну функцию 5 раз на одном тике? Но это ещё пол-беды. Эта функция перебирает все ордера. И всё это 5 раз за один тик... А таких функций, я насчитал 4. Это не напрягая мозги как-бы в один цикл пристроить ещё 3 функции с циклом перебора всех ордеров.
Вот две из них.
Это
на трейлинг не похоже даже близко.Чтобы это понять надо чётко понять определение что такое трейлинг. Дословно не помню, а примерно так "Перемещение уровня StopLoss вслед за ценой с целью уменьшения возможного убытка, или увеличения "гарантированной" прибыли."
А вот это
как выглядит при запуске советника? Наверное четыре строки... они нужны?
И последнее на сегодня: Библиотеку в голове иметь не надо. Достаточно иметь документацию и уметь ей пользоваться. Я до сих пор не могу на память записать все параметры iMA(_Symbol, _Period, ,,,,,) и дальше пишу только посмотрев документацию. И так почти все функции. Но к счастью не так давно сделали всплывающие подсказки которые не сильно спасают. Я не пытаюсь запомнить как пишутся те или иные энумы. Так-что в документацию приходится лезть каждый раз.
Алексей, спасибо за информацию. Да, я признаю что код не оптимальный, просто я не программист и не знаю ещё тонкостей о которых вы рассказали. Мне такие ньюансы просто непонятны - непонятно как это всё оптимизировать - может когда -то попозже допетрю, если дальше продвигаться буду. Сейчас точно знаю что если начну оптимизировать, то только сломаю всё. Ну вот такие издержки для МТ4 для от кодеров-новичков, хотя я видел тут на сайте коды других советников - там вообще столько всего! - хотя конечно если профи кодил может его код меньше загружает терминал чем мой, да наверняка, но пока не могу ваши замечания учесть ибо решительно не понимаю этих тонкостей оптимизации программирования. А если убрать часть обращений в коде к функциям - там наверняка у советника хаос начнётся и начнёт открывать ордера когда не надо. Я же там кодил, тестировал - ничего не шло или шло но не так, исправлял, в итоге оконечный код вот таким получился, мне уже не до оптимизации было как вы понимаете с моим то багажом знаний.
Про трейлинг - самое главное что профиты трейлит, на данном этапе развития меня это устраивает))) И ведь старый и новый код трейлинга трейлят одинаково и количество сделок одинаковое - естественно я сделал вывод что трейлинг получился, а как его правильно делать в том окружении в котором трейлинг должен работать всё равно никто не говорит, а у меня мыслей тоже нет на этот счёт - весь мой код это конструктор ЛЕГО - то есть я скомпонавал его из материалов видеоуроков. Ну конечно есть немного моего - это собственно сам алгоритм советника, а весь код и функции это не моё изобретение, а из видеоуроков с TradeLikeaPro, причём я код "редактировал" именно по аналогии и под свои нужды - под свой алгоритм. В итоге получилось что получилось.
Посмотрел на график депозита - заинтересовался и скачал первый вариант. Скопировал в MetaEdit. Два предупреждения. Первое устранил заменой int timeprev=0; на datetime timeprev=0; Ведь в этой переменной дата. Второе указывает на
Удалил последние три строки. Транслируется чисто. Пошли далее...
переделал (для пояснения прикрепил скрипт - запустите, он объяснит) так
Вот результатЭту функцию удалил - вызовы ее отсутствуют да и тело ее пустое
Попытался запустить и увидел:
Было
за счет внесения изменений - ну просто комментарии добавил и удалил extern у Magic - меняем его лишь при запуске советника на двух графиках с одним и тем же инструментом и Slippage - этот параметр менять зачем? Потом подумал, и увеличил параметры в 10 раз. А функцию OnInit удалил. Ведь пользуюсь лишь пятизнаком. Почему? да на четырехзнаке спред 3 пункта, это получается 30. А на пятизнаке всего 12
так стало понятнее
Урезал вверху шапку. Вот что оставил:
вот эту строчку
перенес пониже к месту востребования. Получилось так
op=CalculateProfit(); if (op>=tp) { CloseAll(); }
Потом выбросил в самом начале описание переменной op и заменил вот так
if (CalculateProfit()>=tp) CloseAll();
В начале функции OnTick стоит пара строчек. Это для того, чтобы обработка велась лишь 1 раз на каждый бар, вместо того, чтоб каждый тик
Далее вычисляется МА. Тут надо изучить подробнее. Для этого составил скрипт и вывел результат
Видно, что четвертый параметр MaShift и последний параметры суммируются, т.е. номер бара = их сумме. Берется МА от бара 2, третьего от конца.
Буду смотреть дальше. Интересует?
...
Буду смотреть дальше. Интересует?
Вы тему постоянно поднимаете?
Хватит уже - люди следят за темой кому интересно, а её поднимают впустую.
Если хотите, чтобы вам человек ответил, вызовите его в тему. Вот так: @STARIJ. Но тему не нужно постоянно поднимать редактированием своего последнего поста.
Значит кому-то не повезло. Еще раз. Это скрипт, а не советник или индикатор
Разобрался - видимо терминалу не хватало памяти - закрыл пару чартов и заработало.
Спасибо - действительно, вычисления происходят.
А если переменные не int типа, а bool , то как быть?
Здравствуйте, подскажите пожалуйста:
1 - регистрация производится только как физ лицу или можно как юр лицо тоже и есть ли какие-то ограничения и условия
2 - есть ли какая-то синхронизация с соц сетями, чтобы иметь один аккаунт (логин и пароль)
3 - ещё увидел функцию "поставь виджет на свою страницу, поделись сигналом" - речь идёт о сайте или о чём-то другом
Посмотрел на график депозита - заинтересовался и скачал первый вариант. Скопировал в MetaEdit. Два предупреждения. Первое устранил заменой int timeprev=0; на datetime timeprev=0; Ведь в этой переменной дата. Второе указывает на
*
Ответ
Возможно это связано с тем что в видеоуроке тейкпрофит был типа int а я его переиначил в double поэтому прежнее написание кода int timeprev осталось как есть. Хорошо, это я исправлю, а вообще как это влияет на работу советника? На самом деле эти бары и время актуальны были для функции TrailingStop из видеоурока, но поскольку я эту функцию заменил своей - это просто осталось как реликт исходного кода и в действительности на время бара трейлинг мой не опирается.
Удалил последние три строки. Транслируется чисто. Пошли далее...
переделал (для пояснения прикрепил скрипт - запустите, он объяснит) так
Вот результат
*Ответ
А куда же там делся вот этот кусочек кода?
return(INIT_SUCCEEDED); }
Может вот так всё-таки должно быть?
void OnInit()
{
if(Digits == 3 || Digits == 5)
{
Step *= 10;
TrailingStep *= 10;
TrailingStop *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
Только почему вы TakeProfit сделали типом int это значит профит будет в пунктах, а функция CalculateProfit() типа double, поэтому я и TakeProfit таким же типом сделал чтобы они согласованы были.
Эту функцию удалил - вызовы ее отсутствуют да и тело ее пустое
*
Ответ
Там в коде есть такая функция void CloseAll() Я думал что она связана как-то с этой функцией
*
Ответ
Ну хорошо, удалим.
Попытался запустить и увидел:
Было
за счет внесения изменений - ну просто комментарии добавил и удалил extern у Magic
*
Ответ
Да, может extern лишнее так как я его вообще никогда не изменял как и Slippage - это всё с исходного кода видеоурока было
- меняем его лишь при запуске советника на двух графиках с одним и тем же инструментом и Slippage - этот параметр менять зачем? Потом подумал, и увеличил параметры в 10 раз. А функцию OnInit удалил. Ведь пользуюсь лишь пятизнаком. Почему? да на четырехзнаке спред 3 пункта, это получается 30. А на пятизнаке всего 12
*
Ответ
Так по умолчанию считалось что советник на всех валютах чтобы работал. Я Oninit () оставлю у себя.
так стало понятнее
Урезал вверху шапку. Вот что оставил:
*
Ответ
Эта шапка редактором по умолчанию сделана. У себя её оставлю как было, а то вдруг там что-нибудь не проскочит у брокера или в терминале из-за отсутствия этих строчек.
вот эту строчку
перенес пониже к месту востребования. Получилось так
Потом выбросил в самом начале описание переменной op и заменил вот так
*
Ответ
Впринципе логично.
В начале функции OnTick стоит пара строчек. Это для того, чтобы обработка велась лишь 1 раз на каждый бар, вместо того, чтоб каждый тик
Далее вычисляется МА. Тут надо изучить подробнее. Для этого составил скрипт и вывел результат
Видно, что четвертый параметр MaShift и последний параметры суммируются, т.е. номер бара = их сумме. Берется МА от бара 2, третьего от конца.
*
Ответ
В связи с тем что у меня трейлинг изменён - дататайм Moving Average думаю не актуальна. Это реликт исходного кода, я раньше пытался тралить по последнему из 3 (трёх) открытых ордеров. Дело в том что у меня советник открывает ордер, потом если рынок пошёл не в том направлении на величину STep - советник открывает контр ордер, затем если рынок продолжает идти в контр направлении добавляется третий ордер с типом ордера второй позиции, или наоборот если цена вернула направление тогда третий ордер будет открыт с типом первого ордера (buy или sell) Там трейлинг идёт по трём ордерам, через функцию CalculateProfit() правда если первый ордер открылся успешно и цена движется как надо то в такой ситуации трейлить по бару через datetime было бы так как и делали на видеоуроке - у меня же повторю даже по 1 ордеру тралим по функции calculateprofit()
Буду смотреть дальше. Интересует?
*
Ответ
Да, вот у меня с тралом вопросы. Вроде тралит но что-то вникать неохота никому в то что я там накрутил с ним. Трал в отрыве от баров и datetime работает - это функций Trailing()
Там про период МА - вы его 200 указали, но суть в том что это настраиваемое значение у меня. И кажется упущен ключевой параметр Value - там смысл в описании файла README я разъяснял.
Спасибо что заморочились этим всем. Советник на самом деле так себе - механический я бы сказал. Но в принципе если настроить и контролировать изредка его работу может и вполне ничего. Время покажет. Наверное заработать он что-то может, но и сольётся глазом не моргнёт и даже смску не отправит - не стал я этим заморачиваться - хотя в идеи было смс отправка если просадка больше на 30% от депозита случилась - это значит что уже открыто 3 ордера и пошло контр движение рынка, в такой ситуации дело пахнет керосином. Все остальные советник разруливает, если он настроен на историю поведения графика инструмента торговли.
Я внёс рекомендованные ( но не все) изменения в код пока в Блокноте. Посмотрите пожалуйста, правильно я скорректировал код?
Я за оптимизацию, ну только моменты не учитывал когда вы oninit удалили - мне она нужна чтобы на всех валютах можно было тестить и работать)))
Здравствуйте. Mql4 начал изучать совсем недавно. Если я обратился не туда с вопросом, то направьте пожалуйста в нужную тему. А вопрос такой, подскажите как работать с индикаторами, которые строят различные зоны, прямоугольники и т.д. С iCustom немного знаком могу запрограммировать пересечение линий или цена выше ниже, допустим МА ) Индикатор я внизу прикрепил, буфера всего четыре, а разновидностей зон восемь. И вот я собственно вообще не могу сообразить, как вообще закодить, отбой или пробой этих зон.
наберите в Яндексе скачать торрент видеоуроки программирование mql4 там на рутрекере уроки от TradeLikeApro. Без общих примеров программирования сложно понять что к чему - я как раз видеоуроки прошёл но как был балбесом так и остался в этом деле))) Может у вас прогресс будет.
geratdc:
...
Да, вот у меня с тралом вопросы. Вроде тралит но что-то вникать неохота никому в то что я там накрутил с ним.
...
наберите в Яндексе скачать торрент видеоуроки программирование mql4 там на рутрекере уроки от TradeLikeApro. Без общих примеров программирования сложно понять что к чему - я как раз видеоуроки прошёл но как был балбесом так и остался в этом деле))) Может у вас прогресс будет.
Посмотрел видео по работе с внешним индикатором, написал небольшой код посмотреть значения буферов в тестере:
void OnTick()
{
double Buf1=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",0,1);
double Buf2=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",1,1);
double Buf3=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",2,1);
double Buf4=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",3,1);
Comment("Buf1=",Buf1,"\n", "Buf2=",Buf2,"\n","Buf3=",Buf3,"\n","Buf4=",Buf4);
}
Зоны в режиме визуализации появляются и исчезают. А значение буферов все равно, всегда ноль. Неужели никак нельзя формализовать эти зоны в коде?
Может есть какая-то функция , кроме iCustom, которая подходит для таких индикаторов? Может кто-то сам писал сов с подобными индикаторами?