Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 342
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот файл .cpp проекта, порассматривам его и сходив пару раз в гугл и яндекс, я не обнаружил чего-то вовсе мозголомного, в целом понятно. Вроде даже просто.
А как же это работает?? Я не совсем понял, как обращаться в эту ddl - из кода советника? Как? Во-первых, вроде так #include <GetIntValue> Нет как то не так..
2. При вызове dll ведь не обязательно держать включенную студию, так? как же она выполняется?
Покажите пожалуста наипростейший пример обращения к этой самой dll из кода mql.
ничего не пойму тут..
надо чтобы размер лота увеличивался в геометрической прогрессии ( с множителем 2), если открывается второй однонаправленный ордер.
получится вот такой результат
тогда вот так
получится вот такой результат
тогда вот так
спасибо, ход мыслей понял.. разобрался вернее.
для чего эта строчка?
datetime o;
Еще вот такой вопрос. у меня есть трейлинг. Когда открыт 1 однонаправленный ордер, все работает замечательно, если больше, то он почему-то не работает. Почему?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Вот файл .cpp проекта, порассматривам его и сходив пару раз в гугл и яндекс, я не обнаружил чего-то вовсе мозголомного, в целом понятно. Вроде даже просто.
А как же это работает?? Я не совсем понял, как обращаться в эту ddl - из кода советника? Как? Во-первых, вроде так #include <GetIntValue> Нет как то не так..
Примерно вот таким образом. Чтоб заработало, надо ДЛЛ откомпилировать и положить в папку experts/libraries (читайте справку и учебник, там все подробно расписано).
2. При вызове dll ведь не обязательно держать включенную студию, так? как же она выполняется?
Еще вот такой вопрос. у меня есть трейлинг. Когда открыт 1 однонаправленный ордер, все работает замечательно, если больше, то он почему-то не работает. Почему?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
потому что в функцию необходимо передать параметры пробуйте так
bool IfProfTrail=false; // Использовать только дял профитных позиций - режим безубытка
int TrailingStop=0; // Дистанция трейлинга = 0 - минимально допустимый
int TrailingStep=1; // Шаг дистанции
Спасибо огромное!
Теперь стало понятно в чем проблемма.
Для покупки использовал:
На сколько знаю покупка идет по ask, а iClose(Symbol(),Period(),0) берет цены из bid. Вследствии чего наверное и происходит ошибка.
Но, тут же возникает вопрос так как, советник не пипсовый, цена находилась в зоне покупки долгое время и обновлялась при каждом тике.Теперь использую следующюю комбинацию:
Почему не открывается сделка? Получается советник зависает на ошибке и не видит дальнейшее изменение цены?
Заготовку для советника взял отсюда https://c.mql5.com/mql4/book/mq4/experts/tradingexpert.mq4
На Ваш взгляд стоит в данном советнике добавить в функию обработки ошибок, проверку на 129 и 138 ошибку?
Если да, то как примерно это сделать?
Как минимум у вас должна быть своя функция для открытия позиций/установки ордеров, обрабатывающая все ошибки. Именно в ней нужно получать последние цены.
Не смотрел никаких заготовок. Но скажу: в советнике нужно обрабатывать все ошибки, возвращаемые сервером. И этого ещё мало. Он должен уметь без потерь функциональности и без сбоя своего алгоритма подхватывать свои позиции после любой непредвиденной ситуации, и продолжить свою работу так, как будто ничего экстраординарного не произошло.
Как минимум у вас должна быть своя функция для открытия позиций/установки ордеров, обрабатывающая все ошибки. Именно в ней нужно получать последние цены.
Не смотрел никаких заготовок. Но скажу: в советнике нужно обрабатывать все ошибки, возвращаемые сервером. И этого ещё мало. Он должен уметь без потерь функциональности и без сбоя своего алгоритма подхватывать свои позиции после любой непредвиденной ситуации, и продолжить свою работу так, как будто ничего экстраординарного не произошло.
Шаблон взял из учебника. Не особо сейчас силен в функциях по обработке ошибок.
На открытии ордеров там есть RefreshRates(); (биды и аски заменил через маркет инфо, как сказали)
И функция обработки ошибок:
Хотел спросить. Можно в нее следующую строку внести от 129 ошибки к примеру так?