Посмотрел исправленный код, небо и земля. Есть чему поучится. Спасибо.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Посмотрел исправленный код, небо и земля. Есть чему поучится. Спасибо.
я ничего не менял...
DoubleToStr Вот этого не было.
DoubleToStr Вот этого не было.
Да это просто посмотреть в журнале, какие цены сравниваются. На работу никак не влияет...
Ну нет в MQL другого дебагера >:d
У меня появился вопрос общего характера. Вот я к примеру пишу любой код.
extern int Slippage=3;
extern int MaPeriod=21;
extern int MaShift =3;
extern int TrailingStop= 30;
И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.
по-идее ошибку компиляция покажет.. может, зарезервированное слово?
У меня появился вопрос общего характера. Вот я к примеру пишу любой код.
extern int Slippage=3;
extern int MaPeriod=21;
extern int MaShift =3;
extern int TrailingStop= 30;
И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.
Да в том и дело, что при компиляции ошибка выйдет и даже не одна. А такая фигня может быть в любом месте когда прописываю параметры,а самое главное, это может быть любое слово (Magic, StopLoss и т.д.).
Да в том и дело, что при компиляции ошибка выйдет и даже не одна. А такая фигня может быть в любом месте когда прописываю параметры,а самое главное, это может быть любое слово (Magic, StopLoss и т.д.).
Так при компиляции пишет, какая ошибка... Еще MQL чувствителен к регистру знаков. Может, объявляете одну и ту же переменную в разных местах....
Смотреть надо в конкретном случае-что..
Только зачем это?
Спасибо, задача состоит в том чтобы робот отслеживал сигнал каждый новый день, и если ордер открыт он его контролирует только в день открытия, на след. день он ищет вход для нового ордера и тд
БУ = Сумма ( Цена_ордера * лот_ордера ) / Сумма ( лот_ордера ). Суммы вычисляются в цикле по всем ордерам сетки - там, где Вы считаете количество ордеров добавляется 2 строчки:
SumLotPrice += OrderLots() * OrderOpenPrice();
SumLot += OrderLots();
После цикла вычисляем БУ сетки:
gridBUprc = SumLotPrice / SumLot;
Данный расчёт нужно делать при изменении количества открытых ордеров (на каждом тике делать не надо). Расчёт будет учитывать даже ордера открытые или закрытые вручную (если с магиком).
Добрый день.
Возник вопрос с iCustom?
Есть индикатор FL11, как правильно записать параметры iCustom, чтобы красное/синее "солнышко", можно было использовать как фильтр для входа?
uptr = iCustom(NULL, 0, "FL11", 4, 0);
dntr = iCustom(NULL, 0, "FL11", 5, 0);
потом
bool UP_Trend()
{
if(uptr > 0 && uptr != 2147483647.0) return(true);
return(false);
}
bool DN_Trend()
{
if(dntr > 0 && dntr != 2147483647.0) return(true);
return(false);
}
потом условие
if( DN_Trend()==true)
........................
ПС: Этот индикатор может перерисовывать (изменять свои значения), так что аккуратнее с ним.
Спасибо уяснил \M/
Запутался еще в одном деле, закрытие частично ордера по профиту:
if ( CountSell()>0)
{
for(int i = OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Price = NormalizeDouble(OrderOpenPrice(),Digits);
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL && NormalizeDouble(Ask+Profit*Point,Digits) if(!OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black))
Print("Ошибка");
}
}
}
где ордер открыт Lots=0,3
closeLots=0.1
Закрывает весь ордер?
Добавлено: 13-07-2017 10:30:25
Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть
Изменено 13 июля, 2017 пользователем d1w4m3
После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает...Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть
0ll спасибо за подсказки. Буду мучить компилятор - не боги ж горшки обжигают? Не солидно как-то.
После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает...Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть
Извиняюсь, но нельзя ли мне как тугодуму объяснить, где тут покопать, а где тут просверлить ^:)^)))а то что то совсем заплутал
У меня появился вопрос общего характера. Вот я к примеру пишу любой код.
extern int Slippage=3;
extern int MaPeriod=21;
extern int MaShift =3;
extern int TrailingStop= 30;
И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.
Конкретно в этом куске ошибок нет. Возможно, в последующем, когда Вы используете эти объявленные переменные в коде и путаете тип данных (объявлен как int, а используете как double), то редактор может не подсвечивать такие переменные. Ну или банальная опечатка.
В вашем коде есть условие выбора ордера:
Извиняюсь, но нельзя ли мне как тугодуму объяснить, где тут покопать, а где тут просверлить ^:)^)))а то что то совсем заплутал
После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает...Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL && NormalizeDouble(Ask+Profit*Point,Digits)в условии есть дистанция Profit. За первый проход цикла все ордера частично закрываются, но на следующем проходе цикла словие срабатывает снова и за 3 приёма закрывает всё. Чтоб работало корректно, после первого прохода надо увеличивать ожидаемый профит у оставшейся части ордеров - либо Profit, либо пересчитать Price.
Viktor M. почитайте эту тему
Спасибо, но это я понимаю, вопрос в том?
Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?
Тикет меняется, а зачем искать получившийся ордер?
Спасибо, но это я понимаю, вопрос в том?
Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?
Вы в цикле частично закрываете все ордера по выбранному направлению, после цикла меняете цель профита и всё.
Тикет меняется, а зачем искать получившийся ордер?
Спасибо, но это я понимаю, вопрос в том?
Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?
Вы в цикле частично закрываете все ордера по выбранному направлению, после цикла меняете цель профита и всё.
if ( CountSell()>0 && NormalizeDouble(Ask+Profit*Point,Digits) {
for(int i = OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL )
if(OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black))
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+SL, OrderOpenPrice()-TP1, 0))
Print("Ошибка ");
}
}
}
}
Что то я упускаю походу((
Там где OrderModify меняйте условие выбора ордеров, т.е. переменные Profit или Price!!! - эти переменные отвечают за отработку условия частичного закрытия, я не знаю как они вычисляются, но их надо менять!Что то я упускаю походу((
ПС: задавайте новый ТП и СЛ от текущей цены! а то приведёт к ошибке!
if ( CountSell()>0 && NormalizeDouble(Ask+Profit*Point,Digits) {
for(int i = OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL )
if(OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black))
Price = NormalizeDouble(OrderOpenPrice(),Digits)-NormalizeDouble(Ask+Profit*Point,Digits);
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Price-TP, 0))
Print("Ошибка ");
}
}
}
}
Спасибо :d
Уважаемые Гуру MQL! Помогите пожалуйста вшить в советник работу в определенный день недели!. Например: понедельник -1, вторник-2, среда-3 и т.д. Благодарю за помощь!
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем