Перейти к содержанию

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


Рекомендуемые сообщения

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

Здравствуйте всем! Решил скопировать с видеоурока советника с трейлингом, при компиляции выскакивают 3 предупреждения и советник не торгует, все перепроверил, не могу понять что не так. Заниматься начал не давно, помогите подсказкой, за ранее большое спасибо.

Test_Trailing.rar

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано


Здравствуйте всем! Решил скопировать с видеоурока советника с трейлингом, при компиляции выскакивают 3 предупреждения и советник не торгует, все перепроверил, не могу понять что не так. Заниматься начал не давно, помогите подсказкой, за ранее большое спасибо.


Не было открытия, потому что было OnTick.
Ошибки это предупреждения о том, что не объявлена переменная для открытия ордера и модификации. По хорошему ее нужно объявить и если ошибка - выдавать принт, либо дальнейшие действия

Test__Tralling.mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Уважаемые комрады, а как свое изображение(картинку) создавать на графике, че то потыкал,потыкал, однако не хочет показываться, стесняется наверно)
r)

Ссылка на сообщение
Поделиться на другие сайты

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

подскажите пожалуйста ссылку на работу со стрелочными индикаторами.
интересует как правильно вставлять буфера iCustom в условие. например, известно что всего два буфера, стрелка вырисовываться на первом баре и не перерисовываться. по идее ожидал следующий вид:
if(Open[1] && Price_Down > 0)...

в общем на форуме наверное есть уже разбор это полета.

Ссылка на сообщение
Поделиться на другие сайты

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

а как свое изображение(картинку) создавать на графике

Смотри описание и пример здесь


Подскажите, как закрыть часть сделки

OrderClose и там указываете, кол-во лотов которые надо закрыть, если их меньше чем лотов в ордере, то оставшаяся часть останется в рынке ( при этом тикет ордера изменится )


как правильно вставлять буфера iCustom в условие

примерно так:
double buf1 = iCustom(... );
if ( Close[1] buf1 ) ... Изменено пользователем 0ll
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

"примерно так:
double buf1 = iCustom(... );
if ( Close[1] buf1 ) ..."



спасибо oll.
но в случае повторной стрелки: сделка закрывается(причем по нулевому бару). открывается новая сделка в противоположном направление и снова через бар(уже по первому) перекрываться в верном направление.

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

пробовал твой вариант вариант с стр: http://tlap.com/forum/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034/1710.
0ll_e_Check_Indi_1.mq4

и пробовал так: if(Close[1] bufSell && last_type != OP_SELL)
{
last_type = OP_SELL; ...
пока не получилось.

0ll_e_Check_Indi_1.mq4

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

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

но в случае повторной стрелки: сделка закрывается(причем по нулевому бару). открывается новая сделка в противоположном направление и снова через бар(уже по первому) перекрываться в верном направление.

Если "правильная" стрелка открывается только на 1-баре, зачем Вы контролируете стрелки на 0-баре? - просто не делайте этого.
Ссылка на сообщение
Поделиться на другие сайты

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

Если "правильная" стрелка открывается только на 1-баре, зачем Вы контролируете стрелки на 0-баре? - просто не делайте этого.



нет. проблема в том. что иногда идет повторная "правильная" стрелка. и так происходит(переоткрытие ?): как на приложенном рисунке.

2.png

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

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

нет. проблема в том. что иногда идет повторная "правильная" стрелка. и так происходит(переоткрытие ?)

Проблема в закрытии - почему закрылась бай сделка и открылась селл? - вот там скорее всего и был "неправильный" сигнал селл. посмотрите это место в визуальном режиме или пишите в лог основания для открытия сделки, чтоб потом почитать последовательность.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

там скорее всего и был "неправильный" сигнал селл


все верно. дело в логике индикатора. "неправильный" сигнал ли? или неотрисовка "правильного"?
Ссылка на сообщение
Поделиться на другие сайты

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

Вы писали:

сделка закрывается(причем по нулевому бару). открывается новая сделка в противоположном направление и снова через бар(уже по первому) перекрываться в верном направление.

Я так понял, что сигнал на 0-баре неустойчив, но на 1-баре уже не рисует, и вот теперь оказывается Вы сомневаетесь и в 1-баре...
Если индюк может "передумать" и на 1-баре, то нужно торговать на 2, иначе решения нет...
Можно попробовать ставить короткий СЛ с переворотом, но только до закрытия "входного" бара.
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите, имеется стрелочный индикатор, вот таким образом я обрабатываю сигнал с него

double buyarrow = iCustom(Symbol(), 0, "30_PD_Alert", SignalGap, EnableSoundAlert, EableMailAlert, 1, 1);
double sellarrow = iCustom(Symbol(), 0, "30_PD_Alert", SignalGap, EnableSoundAlert, EableMailAlert, 0, 1);
bool BuySignal=(buyarrow!=EMPTY_VALUE);
bool SellSignal=(sellarrow!=EMPTY_VALUE);
проблема в том, что по окончании следующего бара после стрелки значения BuySignal и SellSignal обнуляются т.к. нет сигнала, а мне необходимо знать какая стрелка была последней, как это сделать?

Ссылка на сообщение
Поделиться на другие сайты

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

мне необходимо знать какая стрелка была последней, как это сделать?

Нужна ещё одна переменная, например:
int LastSig = -1; // -1 - сигнала не было
if ( BuySignal ) { LastSig = OP_BUY; .... } //наверняка у Вас есть этот блок - вставьте туда
if ( SellSignal ) { LastSig = OP_SELL; ... }
Ссылка на сообщение
Поделиться на другие сайты

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


мне необходимо знать какая стрелка была последней, как это сделать?

Нужна ещё одна переменная, например:
int LastSig = -1; // -1 - сигнала не было
if ( BuySignal ) { LastSig = OP_BUY; .... } //наверняка у Вас есть этот блок - вставьте туда
if ( SellSignal ) { LastSig = OP_SELL; ... }


Не совсем понимаю что делать дальше с переменной LastSig
Ссылка на сообщение
Поделиться на другие сайты

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

Не совсем понимаю что делать дальше с переменной LastSig

Вы задали вопрос, я предложил решение, а что делать дальше мне не ведомо... это-ж Ваша стратегия торговли. Можно, например, не входить повторно в Бай, если предыдущий сигнал был Бай.
Ссылка на сообщение
Поделиться на другие сайты

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


Не совсем понимаю что делать дальше с переменной LastSig

Вы задали вопрос, я предложил решение, а что делать дальше мне не ведомо... это-ж Ваша стратегия торговли. Можно, например, не входить повторно в Бай, если предыдущий сигнал был Бай.

я просто не понимаю как работает Ваше предложение, если можно разжуйте пожалуйста

Вот кусок кода

Спойлер

if ( isNewBar() )
{
double buyarrow = iCustom(Symbol(), 0, "30_PD_Alert", SignalGap, EnableSoundAlert, EableMailAlert, 1, 1);
double sellarrow = iCustom(Symbol(), 0, "30_PD_Alert", SignalGap, EnableSoundAlert, EableMailAlert, 0, 1);
bool BuySignal=(buyarrow!=EMPTY_VALUE);
bool SellSignal=(sellarrow!=EMPTY_VALUE);




Comment(BuySignal, "\n", buyarrow, "\n", SellSignal, "\n", sellarrow, "\n", Signal);


if (CountSell() == 0)
{

if (SellSignal > 0 && fTimeInZone3s())
{
CloseBuy();


SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket >0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}
}



логика простая если последняя стрелка sellarrow и время соответствующее, то открываем в sell, если buyarrow то в buy Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

логика простая если последняя стрелка sellarrow и время соответствующее, то открываем в sell, если buyarrow то в buy

Т.е. получаем новый сигнал, но время не то, сигнал запоминаем, дожидаемся нужного времени и только тогда входим по последнему сигналу?
Вот так можно:

Спойлер


static int LastSig = -1;
if ( isNewBar() )
{
double buyarrow = iCustom(Symbol(), 0, "30_PD_Alert", SignalGap, EnableSoundAlert, EableMailAlert, 1, 1);
double sellarrow = iCustom(Symbol(), 0, "30_PD_Alert", SignalGap, EnableSoundAlert, EableMailAlert, 0, 1);

if (buyarrow!=EMPTY_VALUE) LastSig = OP_BUY;
if (sellarrow!=EMPTY_VALUE) LastSig = OP_SELL;


Comment(BuySignal, "\n", buyarrow, "\n", SellSignal, "\n", sellarrow, "\n", Signal);



if (LastSig == OP_SELL && CountSell() == 0 && fTimeInZone3s() )
{
CloseBuy();

SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket >0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}

Ссылка на сообщение
Поделиться на другие сайты

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

При тестирований очень медленно все это дело, скажите это зависит от мощности пк или это тестер такой тормознутый? Приходится по тест проводить...
trlolo

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
vitek01 понятно, что зависит от мощности/памяти, но большую роль играет качество кода, когда программист понимает, как например организуется цикл в процессоре, как происходит присвоение значения переменной или сравнение двух величин - поневоле начинаешь придумывать наименее затратный алгоритм.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

бОльшая часть советников работает по индикаторам, либо по свечному анализу. Советников, использующих в логике конкретно тики - единицы...
Отсюда следует, что основная причина тормознутости ботов- это ненужная обработка информации на каждом тике... Кстати, к таковой относится реализация инфопанелей в составе советника, которая показывает в т.ч. спред...
Я не много написал советников, но единственный случай, когда бот реально работал на всех тиках- это закрытие по профиту, либо трал, да и тот, который считает расстояние на каждом тике...
п.с. возможно пропустил еще какую то жизненную ситуацию, где нужно обрабатывать каждый тик.
п.п.с. все написанное не относится к скальперам.

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

Даже там можно пропускать тики, если дистанция от пред. анализа менее 5 пипс (например).
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


бОльшая часть советников работает по индикаторам, либо по свечному анализу. Советников, использующих в логике конкретно тики - единицы...
Отсюда следует, что основная причина тормознутости ботов- это ненужная обработка информации на каждом тике... Кстати, к таковой относится реализация инфопанелей в составе советника, которая показывает в т.ч. спред...
Я не много написал советников, но единственный случай, когда бот реально работал на всех тиках- это закрытие по профиту, либо трал, да и тот, который считает расстояние на каждом тике...
п.с. возможно пропустил еще какую то жизненную ситуацию, где нужно обрабатывать каждый тик.
п.п.с. все написанное не относится к скальперам.


В простеньких роботах да. Но если писать нормальную торговую систему, то надо учитывать, что трейдер может переставить отложку, стопы, закрыть/отменить ордер и это может произойти в любой момент. Поэтому я каждый ордер оборачиваю в класс и на каждом тике контролирую его состояние (есть ли он физически и не поменялись ли его параметры). При этом контролируется только ордера с которыми работает советник. Основная ошибка начинающих в работе с ордерами - это тупо каждый раз искать его среди открытых по Magic, OrderSelect достаточно "дорогая" функция, а если ордеров много, а ваш в конце списка, то вот вам и сотня миллисекунд только на поиск.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Основная ошибка начинающих в работе с ордерами - это тупо каждый раз искать его среди открытых по Magic, OrderSelect достаточно "дорогая" функция

Вам встречалось частичное закрытие? Сейчас модно закрыть часть ордера, а другая часть может висеть в рынке с другим тикетом, имхо здесь без цикла с OrderSelect не обойтись. Новичков лучше не сбивать - пусть по старинке через цикл ордера контролируют, тем более 90% не слышали о классах вообще ничего.
Ссылка на сообщение
Поделиться на другие сайты

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...