Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 130 и 4107. Прикрепляю сову и индикатор, по которому написана сова. Донжиан + - это сова. azzx_donchian_1_0 - индюк.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Привет всем,ребята поможете с этим делом,опять чего то напутал,пишет не сбалансированная скобка,а какая я найти не могу ?
Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 130 и 4107. Прикрепляю сову и индикатор, по которому написана сова. Донжиан + - это сова. azzx_donchian_1_0 - индюк.
Здесь посчитана величина TP и SL:
На Point не надо множить. Имеем, например, 0,0050. Теперь, это нужно прибавить или отнять от цены открытия ордера.ЦитатаTp = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);
Sl = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);
Здесь лишние скобки.Цитата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
Программисты, помогите исправить ошибки в тестере. Я где то накосячил с СЛ и способом открытием сделки. Компилируется без проблем, но в тестере ошибки 130 и 4107. Прикрепляю сову и индикатор, по которому написана сова. Донжиан + - это сова. azzx_donchian_1_0 - индюк.
Здесь посчитана величина TP и SL:На Point не надо множить. Имеем, например, 0,0050. Теперь, это нужно прибавить или отнять от цены открытия ордера.ЦитатаTp = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);
Sl = NormalizeDouble((UP_CANAL - DOWN_CANAL)*Point, Digits);Здесь лишние скобки.Цитата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. Можете ли вы сделать так, что бы СЛ и ТП были равны границе канала.
И еще при каждом баре у меня модифицируется отложка и цена никак не может её захватить. плюс верхние отложки не ставятся... пожалуйста, исправьте!
В смысле, на покупку: БайСтоп на верхней границе, СЛ на нижней, ТП = СЛ, только вверх (СеллСтоп, всё наоборот)?ЦитатаСЛ и ТП были равны границе канала
Т. е. Пробойная стрратегия?.
ЦитатаИ еще при каждом баре у меня модифицируется отложка и цена никак не может её захватить.
А зачем тогда это написано: if(MathAbs(OrderOpenPrice() - UP_CANAL) > 0.0001*Point) OrderModify(OrderTicket(), openBuyStop, 0, Tp, 0)? (и 0.0001*Point - это меньше чем было, почему не 1*Point?)
Последнее значение iCustom - shift, лучше вынести во внешние переменные и экспериментировать (для начала поставить 1, а не 0).
Цитатаплюс верхние отложки не ставятся... пожалуйста, исправьте!
Верхние отложки не ставяться, из-за неправильного TP... (я же написал, ту цифру, что мы получили, нужно прибавлять, или отнимать от цены открытия ордера)
Чтобы исправить, нужно знать подробные условия стратегии (в частности - нужно таскать отложку за границей канала, или нет).
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... (я же написал, ту цифру, что мы получили, нужно прибавлять, или отнимать от цены открытия ордера)
Чтобы исправить, нужно знать подробные условия стратегии (в частности - нужно таскать отложку за границей канала, или нет).
Да, стратегия пробойная. Смысл стратегии такой: есть индикатор канал Донжиана. На верхний и нижний границе канала (плюс Индент - отступ) ставятся отложка бай стоп и селл стоп. ТП и СЛ равно диапазону канала в время, когда зацепилась сделка. При каждом новом баре отложка ставиться по новому, то есть, модифицируется. Помогите пожалуйста, как правильно написать, что бы все работало или исправьте сову.
Привет всем,ребята поможете с этим делом,опять чего то напутал,пишет не сбалансированная скобка,а какая я найти не могу ?
Ты скобки то расставь по отступам, а то черт ногу сломит - все скобки на одном уровне.
Изменено 4 августа, 2013 пользователем Cerebellum
Привет всем,ребята поможете с этим делом,опять чего то напутал,пишет не сбалансированная скобка,а какая я найти не могу ?
Кто-то вообще смотрит уроки?
Нужны они кому-то?
Конечно, очень нужны!!! Большое Вам спасибо!!! =d>
Подскажите как запилить в советник 2 кнопки Buy и Sell и 1 поле для ввода цены. Чтобы это все было на графике в окне терминала. Значение поля ввода нужно присвоить переменной Open_Price к примеру, а при нажатии Buy вызывать функцию Open_Buy(); при нажатии Sell соответственно Open_Sell();
Такое вообще возможно средствами MQL4?
Либо как вариант просто сделать одну кнопку и при ее нажатии вызывать нужную функцию.
Подскажите как запилить в советник 2 кнопки Buy и Sell и 1 поле для ввода цены. Чтобы это все было на графике в окне терминала. Значение поля ввода нужно присвоить переменной Open_Price к примеру, а при нажатии Buy вызывать функцию Open_Buy(); при нажатии Sell соответственно Open_Sell();
Такое вообще возможно средствами MQL4?
Либо как вариант просто сделать одну кнопку и при ее нажатии вызывать нужную функцию.
Самый простой способ это использование mt4gui, на скринах примеры моих реализаций...
Добрый день!
Спасибо большое за видео, для новичка программировании под MT очень хороший материал. Поправил некоторые ошибки в своих трейлинг-стопах, которые писал сам. Просьба - интересует работа с осцилляторами, такими как стохастик или MACD. Можно ли записать материал по настройке советника на данные индикаторы - какая-нибудь простейшая стратегия работы по пересечениям?
Всем привет!
xbms, спасибо за очередной урок!
Что-то тихо. Наверное, все ошибку ищут :-?
Часто скальпирую, так что скриптами активно пользуюсь. Удобно устанавливать "горячие клавиши" - купить одним лотом, продать другим, выставить один ТП-СЛ, поменять на другой... а потом закрыть всё сразу и пойти вагоны разгружать :-b
Написал первое задание для всех пар.
Второе, только для инструмента, на котором запускается скрипт. Подключил WinUser32.mqh (предпочитаю, чтобы скрипт спрашивал разрешение, прежде чем закрывать что-то).
Третье. Ничего не нашёл, кроме того, что Digits считает по символу на котором запущен скрипт и если запустить, например на металлах, то ТП, СЛ и проскальзывание останутся мелкими (для пятизнака). Решить можно, сделав как во второй части урока, или убрать из кода проверку на Digits (для меня иногда и профит в 35 достаточен, ну и slippage 5 (на пятизнаке), так что я за второй вариант).
Парни, помогите исправить советника!! Задумка такая, он в 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);
}
//+------------------------------------------------------------------+
советник для нефти, потому я не знаю, как там правильно на знаки проверить
А зачем там знаки проверять?
Главная ошибка - не посчитаны SL и TP. И считать их надо, после условия и отдельно для каждого ордера.
ЦитатаЗдесь важно понять, для чего нужна Point (размер пункта текущего инструмента в валюте котировки). Умножая наш SL в 50 пунктов на Point, получаем (4-х знаке) 0,0050 (теперь его можно вычитать из цены, или прибавлять).
И почему, сначала считаются Buy_Stop и Sell_Stop, а потом high и low?
и тишина в ветке...
либо всё понятно и погнали дальше, либо тема нафиг не нужна и желание научиться чему-то было сиюминутным?
У меня вопрос по этой теме: После создания циклов вычисления цен(как по видео),произвожу компиляцию(как по видео).В ответ инструментарий выдаёт ошибки : Функциям GetMinPrice и GetMaxPrice не определён DLL,а так же переменные i и dPrice уже определены.В чём соль?
Добавлено: 26-08-2013 03:02:58
Всё это по второму уроку.
Изменено 26 августа, 2013 пользователем 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) - иногда полезна, иногда нет...
Добрый день!
Подскажите как исправить ошибку 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);
'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);
Вот вся инфа по этим ошибкам.
Извиняюсь,не понял как спойлеры лепить.
Сова усредняет свои ордера если пошел в минус, а когда выставляет долив то он считает его своим (по магику) и пробует его усреднить по отношению к уже взятому ордеру. Но взятый ранее ведь в плюсе и по этому идет ошибка, Я просто как бы начинающий и не знаю как его научить что бы он новый ордер не усреднял по отношению к уже взятому, Ну как бы считал правдой или неправдой. Все работает отлично Но как доходит до долива - ошибка, Когда цена откатывает ошибка исчезает и он все нормально усредняет тралит и тд.
Изменено 27 августа, 2013 пользователем Enter
/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421
Enter
130 - неправильные стопы.
Если нужно работать с каждым ордером отдельно, можно попробовать использовать тикет...
ЦитатаEnter
130 - неправильные стопы.
Если нужно работать с каждым ордером отдельно, можно попробовать использовать тикет...
Спасибо!!! Вроде дошло. Я как то не подумал!!!
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
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем