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

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


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

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

В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.

Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...

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

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

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

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

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

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

Перейти

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

Перейти

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

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


В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.

Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...



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

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


В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.

Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...



не прокатило(( первый советник работает.

Sleep
Функция задерживает выполнение ТЕКУЩЕГО эксперта или скрипта на определенный интервал.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Kiman спасибо. Вы сделали через эксперт или скрипт? Просто скрипт выполняется в другом потоке и на эксперт влиять не будет...
Кстати можно попробовать выключать, а потом снова включать разрешение на автоторговлю.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Kiman спасибо. Вы сделали через эксперт или скрипт? Просто скрипт выполняется в другом потоке и на эксперт влиять не будет...



Через эксперт.


Кстати можно попробовать выключать, а потом снова включать разрешение на автоторговлю.



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

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

Сейчас глянул - отключить можно, а включить проблема - надо внешнюю библиотеку делать.

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

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


Сейчас глянул - отключить можно, а включить проблема - надо внешнюю библиотеку делать.



Короче проще этот советник самому написать, не особо то и сложный. Открывает сетку ордеров отложенных.
Был бы еще опыт в этом деле)
Может у кого есть такой с открытым кодом? Изменено пользователем Kiman
Ссылка на сообщение
Поделиться на другие сайты

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


отложки стоповые или лимитные?



Стоповые.

У меня тут другая проблема :d Sleep на истории не работает. Нужно для тестирования какой-то другой механизм придумать. Как можно еще таймер организовать?
Ссылка на сообщение
Поделиться на другие сайты

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

Слип и таймеры на истории не работают - не зачем. просто тестер пропускает котировки и всё.

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

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

Доброго времени суток.
Написал свой первый советник: открытие ордеров по полосам Боллинджера, при цене выше средней на покупку, при цене ниже средней на продажу. Профит ставлю на удвоенном расстоянии от средней линии индикатора до верхней или нижней. Стопы соответственно на верхней или нижней линиях.
Но есть несколько вопросов, подскажите пожалуйста:
1. Как ограничить советник на открытие ордеров после закрытия по профиту. А так получается, что например: ордер на покупку закрылся по профиту, цена еще выше средней и сразу отрывается еще один ордер на покупку.
2. При тестере стратегии, ордера на продажу открывается два одновременно. При этом ограничение в советнике стоит только на один ордер. А вот ордера на покупку открываются правильно, по-одному. Разницы в написании подсчета количества ордеров нет.

Вот скрипт советника:

Спойлер


void OnTick()
{
PriceMiddle = iCustom (Symbol(), 0, "Bands", InpBandsPeriod, InpBandsShift, InpBandsDeviations, 0, 0);
PriceHigh = iCustom (Symbol(), 0, "Bands", InpBandsPeriod, InpBandsShift, InpBandsDeviations, 1, 0);
PriceLow = iCustom (Symbol(), 0, "Bands", InpBandsPeriod, InpBandsShift, InpBandsDeviations, 2, 0);

if(Bid {
SL = PriceHigh;
TP = PriceLow - (PriceMiddle - PriceLow);
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)
{
if(OrderModify(ticket,OrderOpenPrice(),SL,TP,0) == true)
Print("Ордер успешно изменился");
if(OrderClose(ticket, OrderLots(),TP, Slippage, Black) == true)
Print("Ордер успешно закрылся");
if(OrderClose(ticket, OrderLots(),SL, Slippage, Black) == true)
Print("Ордер отрицательно закрылся");
}
}
}

if(Ask > PriceMiddle && CountBuy() == 0)
{
SL = PriceLow;
TP = PriceHigh + (PriceHigh - PriceMiddle);
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,comment,Magic,0,Blue);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
{
if(OrderModify(ticket,OrderOpenPrice(),SL,TP,0) == true)
Print("Ордер успешно изменился");
if(OrderClose(ticket, OrderLots(),TP, Slippage, Black) == true)
Print("Ордер успешно закрылся");
if(OrderClose(ticket, OrderLots(),SL, Slippage, Black) == true)
Print("Ордер отрицательно закрылся");
}
}
}

}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int i = OrdersTotal()-1;i>=1;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
count++;
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int i = OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
count++;
}
return(count);
}
//+------------------------------------------------------------------+
Изменено пользователем Pavel888
Ссылка на сообщение
Поделиться на другие сайты

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

С разрешения опытных коллег я отвечу. Htp87, по вопросу #1 можно проверять по последнему ордеру в истории - по его профиту, а если у тебя больше нет никаких условий и ордера просто по пересечению боллинджера, то можно и по типу ордера - если был бай, больше в бай не открывать. Вопрос #2, я удивлён вообще, о каком тестировании ты говоришь, кинь советника на реальный график, увидишь кучу ерроров. Я своим неопытным взглядом вижу - неправильно используешь функцию ордер клозе - это выглядит, как будто ты сам пытаешься закрыть свой ордер по тейк профиту, а затем по стоп-лоссу. Плюс I-custom лучше бери по 1-му бару а не нулевому, так как он не сформирован до конца и цена будет прыгать вокруг линии боллинджера, тем самым давая повод каждый раз открывать сделки

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
htp87 в условиях открытия НЕ выше/ниже средней, а пересечение средней сверху-вниз и наоборот. пример:
if ( Close[2] PriceMiddle[1] ) // пересечение снизу-вверх: покупаем

По открытию ордеров. Похоже у Вас каша в голове - сам через такое проходил...
Вы открываете ордер. Потом Выделение и модификация СЛ и ТП - здесь всё правильно, но зачем-же сразу закрывать? два раза? Уберите эти строчки с закрытием. У Вас есть СЛ и ТП - вот пусть и отрабатывают.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
htp87, а вот это уже лучше сам...
Включайте воображение: с операторами языка ознакомиться мало - и они дают ответ только на вопрос "как сделать".
А "что" сделать "как" - это уже вам самому придумывать надо.

Вот вам и первый вопрос:
Цитата

А как тогда прописать: по типу ордера - если был бай, больше в бай не открывать?


Как запомнить, что последний ордер был бай?
И как потом это обработать?
:)
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Чёрд, никак не найду в инете пример программы с вызовом ZigZag. Может кто-нибудь кинуть ссылку на такой пример, где бы, например, рассчитывалось значение ZigZag для ряда свечей?

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

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


Чёрд, никак не найду в инете пример программы с вызовом ZigZag. Может кто-нибудь кинуть ссылку на такой пример, где бы, например, рассчитывалось значение ZigZag для ряда свечей?




ну вот как-то так. код о том, о чем тебе выше писали.

int shift = 100; // кол-во баров для анализа

for (int i=0;i{
double zig = iCustom(Symbol() , Period(), "ZigZag", 12, 5, 3, 0, i );
if (zig>0)
{
Alert("последняя найденная вершина: ",zig);
break;
}
} Изменено пользователем Pavel888
  • Лайк 4
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте! Друзья, помогите советом: ситуация в том, что при перезагрузке сервера обнуляются две переменные, которым присволись значения в процессе работы советника из-за этого при повторном запуске терминала советник, если есть открытые ордера, работает не по алгоритму... Как при перезагрузке сервера сохранить значения переменных, если есть открытые ранее ордера?

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

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


Может кто-нибудь кинуть ссылку на такой пример, где бы, например, рассчитывалось значение ZigZag для ряда свечей?

Зиг-заг не рассчитывается (у него нет формулы), он ищет в цикле вершины. Как пользоваться индюком (0-буфером) показал dermitay.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Sany2912 тут много подходов - выбирай на вкус:
- в ОнИнит пересчитывать все необходимые для продолжения торговли значения (имхо лучший)
- писать в переменную уровня терминала, они сохраняются (сам не проверял)
- писать значения во внешний файл, а в ОнИнит - читать.
Ссылка на сообщение
Поделиться на другие сайты

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


Sany2912 тут много подходов - выбирай на вкус:
- в ОнИнит пересчитывать все необходимые для продолжения торговли значения (имхо лучший)
- писать в переменную уровня терминала, они сохраняются (сам не проверял)
- писать значения во внешний файл, а в ОнИнит - читать.



Спасибо за совет! Только как это написать - в ОнИнит пересчитывать все необходимые для продолжения торговли значения? Есть возможность, хотя бы, какой-нибудь образец кода, для примера показать...? Поделитесь частью кода, пожалуйста...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Sany2912 я-ж не знаю что Вы используете и как это рассчитывается у Вас в сове.
например для восстановления параметров открытых ордеров из ОнИнит запускается ф-ция пересчета, которая ищет свои ордера и восстанавливает внутренние значения СЛ/ТП/БУ, если сетка, то сортирует ордера, восстанавливает лотность, цену открытия последнего колена и т.д.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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