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

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


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

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

Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 130 и 4107. Прикрепляю сову и индикатор, по которому написана сова. Донжиан + - это сова. azzx_donchian_1_0 - индюк.

Донджиан_+.mq4
azzx_donchian_1_0.mq4

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Привет всем,ребята поможете с этим делом,опять чего то напутал,пишет не сбалансированная скобка,а какая я найти не могу ?

Отложники.mq4

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

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


Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 130 и 4107. Прикрепляю сову и индикатор, по которому написана сова. Донжиан + - это сова. azzx_donchian_1_0 - индюк.


Здесь посчитана величина TP и SL:
Цитата

Tp = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);
Sl = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);

На Point не надо множить. Имеем, например, 0,0050. Теперь, это нужно прибавить или отнять от цены открытия ордера.
Цитата

openBuyStop = NormalizeDouble((UP_CANAL + Indent)*Point, Digits);
openSellStop = NormalizeDouble((DOWN_CANAL - Indent)*Point, Digits);

Здесь лишние скобки.
Цитата

openBuyStop = NormalizeDouble(UP_CANAL + Indent*Point, Digits);
openSellStop = NormalizeDouble(DOWN_CANAL - Indent*Point, Digits);

Это лишнее:
Цитата

Tp *= 10;
Sl *= 10;

Цитата

if(MathAbs(OrderOpenPrice() - UP_CANAL) > 0.1*Point)


0,1*Point - не мало?
Для четырёхзнака 0,1*0,0001=0,00001 Изменено пользователем Vorchunozavr
Ссылка на сообщение
Поделиться на другие сайты

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



Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 130 и 4107. Прикрепляю сову и индикатор, по которому написана сова. Донжиан + - это сова. azzx_donchian_1_0 - индюк.


Здесь посчитана величина TP и SL:
Цитата

Tp = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);
Sl = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);

На Point не надо множить. Имеем, например, 0,0050. Теперь, это нужно прибавить или отнять от цены открытия ордера.
Цитата

openBuyStop = NormalizeDouble((UP_CANAL + Indent)*Point, Digits);
openSellStop = NormalizeDouble((DOWN_CANAL - Indent)*Point, Digits);

Здесь лишние скобки.
Цитата

openBuyStop = NormalizeDouble(UP_CANAL + Indent*Point, Digits);
openSellStop = NormalizeDouble(DOWN_CANAL - Indent*Point, Digits);

Это лишнее:
Цитата

Tp *= 10;
Sl *= 10;

Цитата

if(MathAbs(OrderOpenPrice() - UP_CANAL) > 0.1*Point)


0,1*Point - не мало?
Для четырёхзнака 0,1*0,0001=0,00001

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

Донджиан_+.mq4

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

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

СЛ и ТП были равны границе канала

В смысле, на покупку: БайСтоп на верхней границе, СЛ на нижней, ТП = СЛ, только вверх (СеллСтоп, всё наоборот)?
Т. е. Пробойная стрратегия?.
Цитата

И еще при каждом баре у меня модифицируется отложка и цена никак не может её захватить.


А зачем тогда это написано: if(MathAbs(OrderOpenPrice() - UP_CANAL) > 0.0001*Point) OrderModify(OrderTicket(), openBuyStop, 0, Tp, 0)? (и 0.0001*Point - это меньше чем было, почему не 1*Point?)
Последнее значение iCustom - shift, лучше вынести во внешние переменные и экспериментировать (для начала поставить 1, а не 0).
Цитата

плюс верхние отложки не ставятся... пожалуйста, исправьте!


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

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


samuliak

Цитата

СЛ и ТП были равны границе канала

В смысле, на покупку: БайСтоп на верхней границе, СЛ на нижней, ТП = СЛ, только вверх (СеллСтоп, всё наоборот)?
Т. е. Пробойная стрратегия?.
Цитата

И еще при каждом баре у меня модифицируется отложка и цена никак не может её захватить.


А зачем тогда это написано: if(MathAbs(OrderOpenPrice() - UP_CANAL) > 0.0001*Point) OrderModify(OrderTicket(), openBuyStop, 0, Tp, 0)? (и 0.0001*Point - это меньше чем было, почему не 1*Point?)
Последнее значение iCustom - shift, лучше вынести во внешние переменные и экспериментировать (для начала поставить 1, а не 0).
Цитата

плюс верхние отложки не ставятся... пожалуйста, исправьте!


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


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

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


Привет всем,ребята поможете с этим делом,опять чего то напутал,пишет не сбалансированная скобка,а какая я найти не могу ?


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

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


Привет всем,ребята поможете с этим делом,опять чего то напутал,пишет не сбалансированная скобка,а какая я найти не могу ?

Отложники_001.mq4

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

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

Подскажите как запилить в советник 2 кнопки Buy и Sell и 1 поле для ввода цены. Чтобы это все было на графике в окне терминала. Значение поля ввода нужно присвоить переменной Open_Price к примеру, а при нажатии Buy вызывать функцию Open_Buy(); при нажатии Sell соответственно Open_Sell();
Такое вообще возможно средствами MQL4?

Либо как вариант просто сделать одну кнопку и при ее нажатии вызывать нужную функцию.

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

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


Подскажите как запилить в советник 2 кнопки Buy и Sell и 1 поле для ввода цены. Чтобы это все было на графике в окне терминала. Значение поля ввода нужно присвоить переменной Open_Price к примеру, а при нажатии Buy вызывать функцию Open_Buy(); при нажатии Sell соответственно Open_Sell();
Такое вообще возможно средствами MQL4?

Либо как вариант просто сделать одну кнопку и при ее нажатии вызывать нужную функцию.



Самый простой способ это использование mt4gui, на скринах примеры моих реализаций...

Quik-Option.jpg
Quik.jpg
123.jpg

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

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

Добрый день!
Спасибо большое за видео, для новичка программировании под MT очень хороший материал. Поправил некоторые ошибки в своих трейлинг-стопах, которые писал сам. Просьба - интересует работа с осцилляторами, такими как стохастик или MACD. Можно ли записать материал по настройке советника на данные индикаторы - какая-нибудь простейшая стратегия работы по пересечениям?

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

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

Всем привет!
xbms, спасибо за очередной урок!
Что-то тихо. Наверное, все ошибку ищут :-?

Часто скальпирую, так что скриптами активно пользуюсь. Удобно устанавливать "горячие клавиши" - купить одним лотом, продать другим, выставить один ТП-СЛ, поменять на другой... а потом закрыть всё сразу и пойти вагоны разгружать :-b

Написал первое задание для всех пар.
Второе, только для инструмента, на котором запускается скрипт. Подключил WinUser32.mqh (предпочитаю, чтобы скрипт спрашивал разрешение, прежде чем закрывать что-то).

Третье. Ничего не нашёл, кроме того, что Digits считает по символу на котором запущен скрипт и если запустить, например на металлах, то ТП, СЛ и проскальзывание останутся мелкими (для пятизнака). Решить можно, сделав как во второй части урока, или убрать из кода проверку на Digits (для меня иногда и профит в 35 достаточен, ну и slippage 5 (на пятизнаке), так что я за второй вариант).

Отложки_001.mq4
Реверс_001.mq4

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

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

Парни, помогите исправить советника!! Задумка такая, он в 18 часов выставляет отложенные ордера на экстремумах за 12 свечей. Я вроде все сделал, но вылезает ошибка 130 и 4107. Можете исправить ? советник для нефти, потому я не знаю, как там правильно на знаки проверить. Код совы:

Цитата

//+------------------------------------------------------------------+
//| Нефть.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"



extern double Lot = 0.1;
extern int TakeProfit = 70;
extern int StopLoss = 250;
extern int Indent = 5;
extern int Slippage = 5;
extern int Magic = 47786245;
extern double Cur_Hour = 18.00;

double high, low, SL, TP;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{


return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double Buy_Stop, Sell_Stop;

Buy_Stop = NormalizeDouble(high, Digits);
Sell_Stop = NormalizeDouble(low, Digits);

SL = NormalizeDouble(StopLoss, Digits);
TP = NormalizeDouble(TakeProfit, Digits);


high = NormalizeDouble(iHighest(Symbol(), 0, MODE_HIGH, 12, 1), Digits);
low = NormalizeDouble(iLowest(Symbol(), 0, MODE_LOW, 12, 1), Digits);

if(TimeHour(TimeCurrent()) == Cur_Hour && OrdersTotal() == 0)
{
OrderSend(Symbol(), OP_BUYSTOP, Lot, Buy_Stop, Slippage, SL, TP, "", Magic, 21, Blue);
OrderSend(Symbol(), OP_SELLSTOP, Lot, Sell_Stop, Slippage, SL, TP, "", Magic, 21, Blue);

}

return(0);
}
//+------------------------------------------------------------------+



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

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


советник для нефти, потому я не знаю, как там правильно на знаки проверить


А зачем там знаки проверять?
Главная ошибка - не посчитаны SL и TP. И считать их надо, после условия и отдельно для каждого ордера.
Цитата

Здесь важно понять, для чего нужна Point (размер пункта текущего инструмента в валюте котировки). Умножая наш SL в 50 пунктов на Point, получаем (4-х знаке) 0,0050 (теперь его можно вычитать из цены, или прибавлять).


И почему, сначала считаются Buy_Stop и Sell_Stop, а потом high и low?
Ссылка на сообщение
Поделиться на другие сайты

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


и тишина в ветке...
либо всё понятно и погнали дальше, либо тема нафиг не нужна и желание научиться чему-то было сиюминутным?



У меня вопрос по этой теме: После создания циклов вычисления цен(как по видео),произвожу компиляцию(как по видео).В ответ инструментарий выдаёт ошибки : Функциям GetMinPrice и GetMaxPrice не определён DLL,а так же переменные i и dPrice уже определены.В чём соль?

Добавлено: 26-08-2013 03:02:58

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

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

Код бы посмотреть... (под спойлером)

Ubique
Попробовал увеличить shift (последний параметр iMA), вроде отрабатывает все пересечения.
Спойлер

   
double r = iMA(Symbol(), 0, 9, 0, MODE_SMA, PRICE_CLOSE, 1); //red line
double pr = iMA(Symbol(), 0, 9, 0, MODE_SMA, PRICE_CLOSE, 2); //previous red line
double b = iMA(Symbol(), 0, 18, 0, MODE_SMA, PRICE_CLOSE, 1); //blue line
double pb = iMA(Symbol(), 0, 18, 0, MODE_SMA, PRICE_CLOSE, 2); //previous blue line

(r-b>mindiff*Point) - иногда полезна, иногда нет...
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день!
Подскажите как исправить ошибку 130? И можно ли вообще её исправить?
Сова доливает ордера. Например Открывается первый ордер с магиком-1 в обе стороны. Когда цена прошла в любую сторону например 20 пунктов, сова открывает новый ордер с магиком-2 по тренду. Модифицирует его все нормально, но когда через следующие 20 пунктов доливает еще один ордер, то идет ошибка 130, потому как магик следующего тоже магик-2 И по этому идет ошибка, я это понимаю, Но можно ли как то прописать в модификации эту ситуацию.

Первые ордера по магику обслуживаются отдельно, По магику -2 тоже отдельно

if(tip==0 && tp1!=tp && mn1==Magic && ko1>OrderPlus)
OrderModify(ticket1,price1,OrderStopLoss(),tp1,0);

if(tip==1 && tp2!=tp && mn1==Magic && ko2>OrderPlus)
OrderModify(ticket1,price1,OrderStopLoss(),tp2,0);

//---- Долив ордеров

if(tip==0 && tp3!=tp && mn1==Magic2 && ko3>1)
OrderModify(ticket1,price1,OrderStopLoss(),tp3,0);

if(tip==1 && tp4!=tp && mn1==Magic2 && ko4>1)
OrderModify(ticket1,price1,OrderStopLoss(),tp4,0);

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

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

'GetMinPrice' - no dll defined for the imported function C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (37, 11);
'GetMaxPrice' - no dll defined for the imported function C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (55, 11);
'dPrice' - variable already defined C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (59, 13);
'i' - variable already defined C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (60, 13);

Вот вся инфа по этим ошибкам.
Извиняюсь,не понял как спойлеры лепить.



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

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

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

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
RaM
http://tlap.com/forum/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421

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

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

Enter
130 - неправильные стопы.
Если нужно работать с каждым ордером отдельно, можно попробовать использовать тикет...


Спасибо!!! Вроде дошло. Я как то не подумал!!!
Ссылка на сообщение
Поделиться на другие сайты

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

Vorchunozavr,спасибо вроди понял.Вот сейчас и попробуем. :)

Спойлер

'i' - variable already defined C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (60, 13)

Спойлер

'dPrice' - variable already defined C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (59, 13)

Спойлер

'GetMaxPrice' - no dll defined for the imported function C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (55, 11)

Спойлер

'GetMinPrice' - no dll defined for the imported function C:\Program Files (x86)\Alpari Limited MT4\experts\Test2.mq4 (37, 11)



Добавлено: 27-08-2013 20:40:49

:d
Получилось,один в другой закинул! >:d
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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