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

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

#226

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

Донджиан_+.mq418 скач.
azzx_donchian_1_0.mq422 скач.

#227

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

Отложники.mq419 скач.

#228


Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 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

Изменено 4 августа, 2013 пользователем Vorchunozavr

#229



Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 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. Можете ли вы сделать так, что бы СЛ и ТП были равны границе канала.
И еще при каждом баре у меня модифицируется отложка и цена никак не может её захватить. плюс верхние отложки не ставятся... пожалуйста, исправьте!

Донджиан_+.mq416 скач.

#230
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... (я же написал, ту цифру, что мы получили, нужно прибавлять, или отнимать от цены открытия ордера)
Чтобы исправить, нужно знать подробные условия стратегии (в частности - нужно таскать отложку за границей канала, или нет).
#231


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... (я же написал, ту цифру, что мы получили, нужно прибавлять, или отнимать от цены открытия ордера)
Чтобы исправить, нужно знать подробные условия стратегии (в частности - нужно таскать отложку за границей канала, или нет).


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

Донджиан_001.mq428 скач.

#233


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


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

Изменено 4 августа, 2013 пользователем Cerebellum

#234


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

Отложники_001.mq417 скач.

#235




Кто-то вообще смотрит уроки?
Нужны они кому-то?


Конечно, очень нужны!!! Большое Вам спасибо!!! =d>
#236

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

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

#237


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

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



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

Quik-Option.jpg
Quik.jpg
123.jpg

#238

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

#239

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

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

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

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

Отложки_001.mq415 скач.
Реверс_001.mq418 скач.

#240

Парни, помогите исправить советника!! Задумка такая, он в 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);
}
//+------------------------------------------------------------------+



#241


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


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

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


И почему, сначала считаются Buy_Stop и Sell_Stop, а потом high и low?
#242

\M/

Изменено 26 августа, 2013 пользователем Ubique

#243


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



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

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

Всё это по второму уроку.

Изменено 26 августа, 2013 пользователем RaM

#244
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) - иногда полезна, иногда нет...
#245

Добрый день!
Подскажите как исправить ошибку 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);

#246

'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);

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



#247

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

Изменено 27 августа, 2013 пользователем Enter

#248
RaM
/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421

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

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


Спасибо!!! Вроде дошло. Я как то не подумал!!!
#250

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

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

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