Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#3051


Если еще планируется выпуск новых уроков, было бы очень интересно узнать как написать, советник, который будет входить в положительный замок, например, после того как первый ордер достиг определенного уровня прибыли.


После того, как первый ордер достиг определенного уровня прибыли - открываете встречный ордер такого же лота.

Думаете, для этого нужен специальный урок?

Во-первых, надо думать.
Прежде чем пытаться что-то кодировать, сначала надо понять что вам надо.
Когда поймете "что" вам надо, "как" сделать "что" вам надо обычно становится понятно самому.

Во-вторых, в инете море программ в открытом коде.
Изучайте их до буквы, пытайтесь сделать лучше - и вы начнете расти ударными темпами.


А вот "кина" лучше не надо.
Программирование интеллектуальная деятельность: надо читать - думать - и писать.
"Кина" не оставляет время на думать.
Удивляюсь, млять, почему ещё мультики по программированию снимать не начали...
#3052

Подскажите, как привязать Lable строго к середине экрана?
Если с привязкой текста по датам еще можно что то придумать, то как быть с Лейблом, у которого есть только настройки Угла, X и Y? )

#3053


Подскажите, как привязать Lable строго к середине экрана?
Если с привязкой текста по датам еще можно что то придумать, то как быть с Лейблом, у которого есть только настройки Угла, X и Y? )

Я не большой знаток графических функций, но спрошу: а разве размер окна в пикс узнать нельзя? - чтоб половину вычислить?
#3054


Я не большой знаток графических функций, но спрошу: а разве размер окна в пикс узнать нельзя? - чтоб половину вычислить?


Вот я и не нашел этой функции. Как узнать самую крайнюю цену по углам экрана - есть. Пикселей нету (
#3055



Я не большой знаток графических функций, но спрошу: а разве размер окна в пикс узнать нельзя? - чтоб половину вычислить?


Вот я и не нашел этой функции. Как узнать самую крайнюю цену по углам экрана - есть. Пикселей нету (
Посмотри эти функции:
ChartGetInteger() CHART_WIDTH_IN_PIXELS
#3056


Посмотри эти функции:
ChartGetInteger() CHART_WIDTH_IN_PIXELS


И куда я смотрел. Теперь все идеально ровно, спасибо! Только нужно не забыть изменить привязку этого объекта с левого угла на вверх
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_UPPER);
#3057


Думаете, для этого нужен специальный урок?


Да, думаю нужен. В уроках рассматривались темы и по-проще. Здесь есть несколько подводных камней.
Например, я не до конца понимаю, как рассчитать точку выставления тейка для этого замка, если лоты будут разного объема.
#3058



Думаете, для этого нужен специальный урок?


Да, думаю нужен. В уроках рассматривались темы и по-проще. Здесь есть несколько подводных камней.
Например, я не до конца понимаю, как рассчитать точку выставления тейка для этого замка, если лоты будут разного объема.


твой вопрос из разряда поиска линии БУ кучи ордеров с различными лотами и "смотрящих" в разные стороны.
скажем так - я убил неделю чтобы самому понять и вычислить формулу сего действа. и, думаю, "для новичка" подача такого материала будет сложна для понимания.

ну а "не новичок" и сам разберется, если ему это действительно нужно.
и опять же, я не понимаю, неужели вы не испытываете кайф от самого процесса решения задачи и того когда решил эту задачу САМ, своим потом и мозгами?
тебе же наоборот хорошо делают - рассказывают не ВСЕ чтобы ты в будущем сам через всё прошёл :d :))

ЗЫ: если суммарно лотность на бай не равно суммарной лотности на селл - то это уже не "замок".
#3060

Как всегда подача материала на высоте! Просьба, могли бы исходник из урока выложить сюда? Заранее спасибо!

#3061

наткнулся на ограничения iCustom. в официальной документации ничего про это не написано.
вобщем нюанс заключается в количестве передаваемых input'ов.
если не передавать ни один параметр - будут использоваться настройки по умолчанию, но если мне нужно изменить хотя бы один параметр, то мне надо передать все в требуемом порядке и с требуемым типом и изменить значение нужного(реальный пример - крайний выложенный индикатор от Silentspec, в нем играюсь периодом RSI, передаваемых в индюк параметров у него - 95).
вопрос знатокам - кто-нибудь знает до каких цифр метаквотовцы ограничивают количество передаваемых в iCustom параметров? при компиляции ошибка выдается просто wrong parametres count.

ЗЫ: с iCustom работать умею и мной написан уже не один и не два сова по работе с различными внешними индюками. просто впервые наткнулся на такой вот прикол.

#3062


наткнулся на ограничения iCustom. в официальной документации ничего про это не написано.
вобщем нюанс заключается в количестве передаваемых input'ов.
если не передавать ни один параметр - будут использоваться настройки по умолчанию, но если мне нужно изменить хотя бы один параметр, то мне надо передать все в требуемом порядке и с требуемым типом и изменить значение нужного(реальный пример - крайний выложенный индикатор от Silentspec, в нем играюсь периодом RSI, передаваемых в индюк параметров у него - 95).
вопрос знатокам - кто-нибудь знает до каких цифр метаквотовцы ограничивают количество передаваемых в iCustom параметров? при компиляции ошибка выдается просто wrong parametres count.

ЗЫ: с iCustom работать умею и мной написан уже не один и не два сова по работе с различными внешними индюками. просто впервые наткнулся на такой вот прикол.



До 50 параметров точно проходит.
#3063


До 50 параметров точно проходит.



угу. выправил индюк(я ж оригинальный код Silentspec не трогаю - правлю индюк с другим именем и к нему обращаюсь), сократил количество инпутов(ну например нахрена мне в iCustom передавтаь цвета линий или стринговые "Настройки индикатора"), и вуаля - код iCustom с сокращенным списком переменных откомпилился \M/ >0

Изменено 26 января, 2016 пользователем dermitay

#3064

Доброго времени суток всем!

Искал простой сов сопровождения с частичным закрытием и моментальным тралом (чтобы не ждал профита, а уменьшал лосс вслед за ценой идущей к ТП). Протрейдер избыточен, ест ресурсы ВПСа и не рулит всеми парами (как я понял). Накопал пару простых сов, в первом не хватает частичного закрытия, во втором параметра вида: Profit Trailing = false.
Не поможете дописать или поделиться если такой есть?!

Заранее спасибо! ;) ;) ;)

TrailingStop.ex46 скач.
Sleep_Tight.ex47 скач.

#3066

Спасибо!!! \M/
Кстати узнал его по автору (Стив Хопвуд), брал с FF под другим именем.
Напрягло большое количество настроек jumping loss, instant loss и ещё куча всего.
Ну ничего, будем развиваться...

#3067

ну его использовал DENYA в своих старых сборках по соло Scalp.inc, я единственное что могу добавить:
1. сова мультивалютная
2. трал/частичное закрытие настраиваются как пипсам так и по АТР(не путать с АДР)
3. версия которую я выложил не особо глючная, как говорят все последующие сборки от автора после этой содержат глюки и баги.

так что по сути тебе надо разобраться с настройками АТР. я в нем не особо шарю.
но можешь юзать чисто пипсы.

#3068

всё-таки решил заморочиться над переносом полной логики индикатора Silentspec в сову. Это вам не iMA в коде вызывать и не шубу в трусы заправлять.
После долгих попыток воткнуть таки получилось, тысяча чертей!!! v:) :)) Теперь я постиг еще уровень просветления o:-)

Подумал, что материал, который я нарыл, будет полезен другим

Вот ссылки в порядке прочтения M/

1. https://www.mql5.com/ru/articles/1456
2. https://www.mql5.com/ru/articles/1457
3. https://www.mql5.com/ru/articles/1463


Добавлено: 30-01-2016 20:09:45

товарищи, коллеги по разуму.
вопрос у меня всё о том же - об эмуляции работы индикатора в сове.
вобщем. как я ни крутил-вертел код, один фиг только полная эмуляция буферов индикатора в 90% случаев копирует работу самого индикатора.
для примера, вот сигналы оригинального индикатора
original
Спойлер



тоже самое уже в сове, но через iCustom()
Спойлер



а вот это через код с полной эмуляцией буферов
Спойлер



как видите, третий вариант наиболее точно всё рисует, в отличие от варианта с iCustom. почему наиболее точно - потомучто есть еще и сигнал 6го типа, который индюк просто не рисует почему-то, ну это не особо важно, мне этот сигнал не нужен.
вопрос прост - какого фига так оно как-то все криво работает?

вкратце как я реализовал косячный вариант 2: все правила кода(ну там банально типа если машка одна больше другой в индикаторе считается через буферы), то я просто тупо обращаюсь к этим буферам и их сраниваю, правила вобще по сути неизменны. но практика показывает обратное, iCustom по сути ничего не знает о предыдущих барах, я верно рассуждаю?

вкратце как я реализовал вариант 3: полная "эмуляция буферов", то есть вместо индикаторных буферов созданы массивы- таймсерии, в которых запоминаются все расчеты/значения полностью копируя алгоритм индикатора.
самая главная проблема, на мой взгляд, это то что я хочу все это крутить-вертеть на 28 парах в одном коде. расчет прост. пар 28, буферов 14, итого мне нужно "держать в уме" 392 массива. реализовал это тоже очень просто, создана структура, в которую запихнуто все 14 динамических буферов + стринговая переменная для опознавания символа(пары).
далее при инициализации кода идет подсчет пар, по которым трейдер собирается торговать и создается по сути динамический массив вышеописанных структур размером = количество пар. то есть элементом такого массива есть вышеописанная структура, внутри которой 14 других массивов + перменная. :-b
код будет гоняться один единственный раз - при появлении новой свечи(так же по сути должен работать и индикатор, по крайней мере так задумано).

у меня вопрос простой - я прав в своих рассуждениях или нет насчет iCustom()?? насколько эффективна моя реализация или может есть более простой вариант? есть какие-то подводные камни?

Изменено 30 января, 2016 пользователем dermitay

#3069

Может кому пригодится:

Т.к. OnChartEvent() не работает в тестере стратегий, простую обработку нажатия кнопок можно сделать следующим образом:

1. в OnTick() добавляем строчку вида:

if (IsTesting()) CheckButtons();

2. Ну и примерный текст CheckButtons():

void CheckButtons()
{
long stateBuy = ObjectGetInteger(0,BtnBuy.name,OBJPROP_STATE);
long stateSell = ObjectGetInteger(0,BtnSell.name,OBJPROP_STATE);

if (stateBuy == 1) // 0 - кнопка отжата, 1 - нажата
{
Print("Нажата кнопка BUY!!"); // Тут можно вставить OrderSend(Symbol(),OP_BUY...
ObjectSetInteger(0,BtnBuy.name,OBJPROP_STATE,0); // Отжимаем кнопку
}

if (stateSell == 1)
{
Print("Нажата кнопка SELL!!");
ObjectSetInteger(0,BtnSell.name,OBJPROP_STATE,0);
}
}

#3070

Приветствую всех!
Смотрел урок по написанию советника. Очень понравилось. Повторил за автором. Мое творение тоже заработало, но на мой взгляд не корректно. Ордера закрываются и сразу открываются в противоположную сторону. При пробое линии сопротивления/поддержки это катастрофично. Как написать код который будет говорить; если (if) цена открытия свечи выше (>) цены закрытия и (&&) Спасибо.

#3071


Приветствую всех!
Смотрел урок по написанию советника. Очень понравилось. Повторил за автором. Мое творение тоже заработало, но на мой взгляд не корректно. Ордера закрываются и сразу открываются в противоположную сторону. При пробое линии сопротивления/поддержки это катастрофично. Как написать код который будет говорить; если (if) цена открытия свечи выше (>) цены закрытия и (&&) Спасибо.


очень просто
Close[#номер бара#] - цена закрытия #номер бара#
Open[#номер бара#] - цена открытия #номер бара#

клоуз нулевого бара(текущего) конечно же будет равна NULL

а вобще вот
https://docs.mql4.com/ru/predefined/close
https://docs.mql4.com/ru/predefined/open
#3072

Вроде бы проблем быть не должно. Всё, казалось бы, просто.

double ID;
ID = ChartOpen(Symbol(), Period());
ChartApplyTemplate(ID, "template1.tpl");
Но не работает. Чарт открывает, шаблон не применяет. Шаблон есть в "templates", вручную применяется. В чём проблема?

#3073

Не пойму зачем Вы открываете текущий чарт? - ID = ChartOpen(Symbol(), Period());
Пробуйте сразу ChartApplyTemplate( 0 , "template1.tpl");
Может быть ещё заморочка с расположением файла - читай справку по функции ChartApplyTemplate()

#3074

Ок, не совсем так:
double ID;
ID = ChartOpen(Sym, Per);
ChartApplyTemplate(ID, "template1.tpl");
Символ и период задаю - такой график и открывает. С местом шаблона уже голову сломал, куда я его только не совал x(

#3075

ты все перепробовал что вот здесь описано?
https://docs.mql4.com/ru/chart_operations/chartapplytemplate

какой код ошибки, и т.д. и т.п. без этой инфы это гадание на кофейной гуще.

это раз, а во-вторых ID должен быть ЛОНГОВЫМ(long) значением а не double

Изменено 2 февраля, 2016 пользователем dermitay

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025