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

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


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

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

Сигнал №1 (пересечение средних) не может действовать полгода? у него должен быть срок действия, например 15 мин.
Вводим переменную datetime dtvalid1 = 0;
if ( cross_ma() ) dtvalid1 = TimeCurrent() + 15*60; - В итоге в dtvalid1 записано время окончания действия 1 сигнала.
Следующая проверка в течении действия 1 сигнала ищем сигнал 2 и если нашли - открываем сделку:
if ( TimeCurrent() {
if ( find_signal2() ) { if ( open_order() ) dtvalid1 = 0; } - если ордер открыли переменную обнулили.
}
else dtvalid1 = 0; - окончание действия 1 сигнала - обнуляем переменную валидности.
можно сделать и большее кол-во сигналов по аналогичной схеме

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

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

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

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

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

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

Перейти

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

Перейти

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

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


Здравствуйте, появилась необходимость использование SMMA (smoothed moving average) на нестандартном таймфрейме т.е. сделать то же что делает iMA только для ценового ряда из моего массива цен. Все мои попытки разобраться с тем ка считается SMMA используя материалы опубликованные на сервере Metaquotes и исходник Custom Moving average.mq4 к положительному результату не привели. Подскажите как рассчитать значение SMMA (к примеру 5, close) в ручную или любой способ расчета для ценового ряда из моего массива



Здравствуйте! Думаю вот здесь то, что Вам нужно.
Ссылка на сообщение
Поделиться на другие сайты

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

Извините а как сигнал может действовать полгода, если после пересечения средних сразу сработает Buy или
Sell и откроется ордер ? И не будет ни какого ожидания.

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

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

Извините а как сигнал может действовать полгода, если после пересечения средних сразу сработает Buy или
Sell и откроется ордер ? И не будет ни какого ожидания.


Вы же сами пишете:
Цитата

...но советник открывает сделку не сразу



Поэтому и нужно как-то определиться что есть "не сразу". Oll поэтому и предложил установить срок годности (15 минут в его примере) такого сигнала. Хотите чтобы сразу открывалась сделка - не устанавливайте такой срок, а просто идентифицируйте пересечение как сигнал на отправку ордера: if ( cross_ma() ) OrderSend(....);
Ссылка на сообщение
Поделиться на другие сайты

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

Можно ввести переменную типа bool (signal1, signal2, signal3....), если пересечение произошло, то signal1 = true, потом цена опустилась ниже signal2 = true, а дальше, когда все устраивает, то входите (if (sig2==true && sig1==true)...... ). Как-то так.

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

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

Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо.

Bheurekso_pattern.mq4
Безымянный.png

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

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


Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо.



на историй хорошо отрабатывается, даже удивил.А что значит буфера работали, что он еще должен делать? И может советник кто то накидает, посмотрели бы что он на самом деле из себя представляет!
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите, в чём ошибка:
Вот скрипт (часть):

0 main(){
1 var OpenTime,MA;
2 MA=Point("MA",0);

Вот ошибки:

not a variable in line 2MA=Point
syntax error in line 2MA=Point

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

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

Здравствуйте.Просмотрел урок Сергея по модификации ордеров,но при написании советника столкнулся с проблемой - при создании обертки для OrderModify в виде OrderModifyX компилятор выдает ошибку,хотя у автора на видео все нормально.Кто-нибудь подскажет в чем проблема?


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

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

Здравствуйте.Просмотрел урок Сергея по модификации ордеров,но при написании советника столкнулся с проблемой - при создании обертки для OrderModify в виде OrderModifyX компилятор выдает ошибку,хотя у автора на видео все нормально.Кто-нибудь подскажет в чем проблема?



Удали в названии функции "OrderModifyX" - буковку: "Х".
Ссылка на сообщение
Поделиться на другие сайты

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

а как быть тогда с "

bool  OrderModifyX (int       ticket,      // номер ордера 
double price, // цена открытия
double stoploss, // stop loss
double takeprofit, // take profit
datetime expiration, // время истечения ордера
color arrow_color) // цвет
{
if (IsStopped())
{
Print("Ошибка: советник остановлен, IsStopped() == true");
return(false);
}

int cnt = 0; ..... и т .д.

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

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

а как быть тогда с "



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

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

Видимо это вопрос к самому Сергею,или хотя бы к тем,кто видел его видеоуроки:

Спойлер

 if(OrderSelect(ticket,SELECT_BY_TICKET))
if(!OrderModifyX(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка модификации ордера на покупку!");
} else Print("Ошибка открытия ордера на покупку!");
}

}
//+------------------------------------------------------------------+
bool OrderModifyX (int ticket, // номер ордера
double price, // цена открытия
double stoploss, // stop loss
double takeprofit, // take profit
datetime expiration, // время истечения ордера
color arrow_color) // цвет
{
if (IsStopped())
{
Print("Ошибка: советник остановлен, IsStopped() == true");
return(false);
}

int cnt = 0;

while(!IsTradeAllowed() && cnt {
Sleep(500);
cnt++;
}

if (!IsTradeAllowed())
{
Print("Ошибка:операция недопустима - IsTradeAllowed() == false");
return(false);
}

if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
string sym = OrderSymbol();
int digits = int(MarketInfo(sym, MODE_DIGITS));

if (digits > 0)
{
price = NormalizeDouble(price, digits);
stoploss = NormalizeDouble(stoploss, digits);
takeprofit = NormalizeDouble(takeprofit, digits);
}
}

int err = GetLastError();
err = 0;

bool exit_loop = false;
bool result = false;

while(!exit_loop)
{
result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError();

if (result == true)
return(true);

switch(err)
{
case ERR_NO_ERROR:
case ERR_NO_RESULT:
exit_loop = true;
break;

case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_BROKER_BUSY:
case ERR_OFF_QUOTES:
case ERR_TRADE_CONTEXT_BUSY:
case ERR_TRADE_TIMEOUT:
cnt++;
break;

case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates();
continue;

default:
exit_loop = true;
break;

} // switch(err)
if (cnt > TryCount)
exit_loop = true;

if (!exit_loop)
{
Print("Ошибка! Попыток: " + IntegerToString(cnt) + "/" + IntegerToString(TryCount));
Sleep(500);
RefreshRates();
}

if (exit_loop)
{
if (err != ERR_NO_ERROR && err != ERR_NO_RESULT)
{
Print("Ошибка: " + IntegerToString(err));
}
}

} // while(!exit_loop)

if (err == ERR_NO_RESULT)
{
return(true);
}

Print("Ошибка модификации после" + IntegerToString(cnt) + " попыток");
return(false);
}
Ссылка на сообщение
Поделиться на другие сайты

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

Доброго времени суток! Нужна Ваша помощь в написании простенького советника или индикатора, для упрощения ручной торговли.

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

Настройки, которые хотелось бы в нем видеть:

1. Минимальный размер свечи в пунктах, которые будут учитываться
2. Настройки чередования свечей. Например, выбираем последовательность (медвежья, бычья, бычья, медвежья) подается алерт. Длинна цепочки позволяет учитывать длинную комбинацию.
3. Алерт: звук, окно, телефон и почта
4. Время работы советника или индикатора
5. Возможность отслеживать в одном окне много валютных пар

Заранее благодарен!

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

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


Ты не передаешь параметр по цвету при вызове функции, самый последний в перечне.



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

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

Вот скрипт (часть):


это скрипт (часть) не для МТ. Поэтому компилятор ругается на чужой код.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Уважаемые программисты. Как сделать счётчик паттернов Прайс Экшн (допустим "Рельсы"). По типу "CountTrade" у меня не получается. Подскажите, пожалуйста. Заранее, спасибо.

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

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


Уважаемые программисты. Как сделать счётчик паттернов Прайс Экшн (допустим "Рельсы"). По типу "CountTrade" у меня не получается. Подскажите, пожалуйста. Заранее, спасибо.



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

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

"Можно ли написать код Мартингейла в Советник - не трогая код самого советника (что-то типа автономного следящего модуля)"

Добрый день! Помогите с кодом.


Можно ли написать мартингейл для уже существующего советника + к его коду, не меняя сам советник, чтобы код мартина следил на действиями советника по мэджику - высчитывал от уже существующей ставки удаление и применял логику мартина: через определенное количество пунктов (или суммы минус в маджэку) ставить противоположные ставки на расстоянии Х с множителем Y



Для мт4

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

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


Да


Ну тогда вкратце примерно так:
-объявляйте глобальную переменную, например, int PtCount=0;
-как появился новый паттерн, складывайте в нее -> PtCount++;

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


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

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

Извините, но я ничего не понял. Мой уровень не позволяет так быстро схватывать. Если можно, то поподробнее. Паттерн "Рельсы" у меня описан вот так.
int Reils()
{
double Close1 = iClose(Symbol(), 0, 1);
double Open1 = iOpen(Symbol(), 0, 1);
double Close2 = iClose(Symbol(), 0, 2);
double Open2 = iOpen(Symbol(), 0, 2);
if (Close1 Open2) return(-1);
if (Close1 > Open1 && Close2 return(0);
}
И как мне его привязать к счётчику.

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

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

http://tlap.com/forum/laboratoriya-profitfx/24/open-source-sovetnik-forex-setka-trader-mod-i-ea-setka/2738/?do=findComment&comment=344260

3-м и 4-м параметрами запрещаете нашему боту открывать первые ордера сеток - это будет делать ваш бот.
А наш бот будет сопровождать ваши входы/ордера как вам угодно изощренными способами.

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

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

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


И как мне его привязать к счётчику.



Мне кажется паттерн "рельсы" должен не так выглядеть. Но вопрос сейчас не в этом. Вот у Вас функция Reils() возвращает 0,1 или -1. Допустим, у нас задача посчитать сколько раз эта функция вернет единицу. Делаем так:

Спойлер

int PtCount=0;//Сюда считаем количество появившихся паттернов
datetime LastPattern;//сюда запоминаем время бара, на котором последний раз появился паттерн

void OnTick()
{
if(LastPattern!=Time[0])
{
if(Reils()==1)
{
PtCount++;//считаем появление единицы в переменную PtCount
LastPattern=Time[0];//запоминаем время последнего бара
}
}
Comment("Счетчик = ",PtCount);
}

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

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

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

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

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

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

Войти

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

Войти

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


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

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