Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так я с этого и начал
Меня-то зачем лечить?
Здравствуйте.
Я правильно понимаю. Я увижу ошибку и после этого будет понятно что исправлять?
Выложите сюда функцию SetTakeProfit и мы ее поправим
Я правильно понял? Вот нашёл раздел где обозначается сеттейкпрофит:
//----------------------------------------------------------------------------
void SetTakeProfit(int orderType, int orderMagic)
{
double avgPrice = 0;
double sumLots = 0;
for (int order=OrdersTotal()-1; order >= 0; order--)
{
returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==orderMagic)
{
avgPrice += OrderOpenPrice()*OrderLots();
sumLots += OrderLots();
}
}
double newTakeProfit=avgPrice/sumLots;
if (orderType==OP_BUY)
newTakeProfit=newTakeProfit+TakeProfit*Point;
else
newTakeProfit=newTakeProfit-TakeProfit*Point;
newTakeProfit=NormalizeDouble(newTakeProfit,Digits);
for (order=OrdersTotal()-1; order>=0; order--)
{
returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==orderMagic)
{
returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow);
}
}
}
//----------------------------------------------------------------------------
Я правильно понял? Вот нашёл раздел где обозначается сеттейкпрофит:
Да, Вы правильно поняли. Для удобства код на форуме вставляйте через кнопку
Я правильно понял? Вот нашёл раздел где обозначается сеттейкпрофит:
//----------------------------------------------------------------------------
void SetTakeProfit(int orderType, int orderMagic)
{
double avgPrice = 0;
double sumLots = 0;
for (int order=OrdersTotal()-1; order >= 0; order--)
{
returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==orderMagic)
{
avgPrice += OrderOpenPrice()*OrderLots();
sumLots += OrderLots();
}
}
double newTakeProfit=avgPrice/sumLots;
if (orderType==OP_BUY)
newTakeProfit=newTakeProfit+TakeProfit*Point;
else
newTakeProfit=newTakeProfit-TakeProfit*Point;
newTakeProfit=NormalizeDouble(newTakeProfit,Digits);
for (order=OrdersTotal()-1; order>=0; order--)
{
returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==orderMagic)
{
returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow);
}
}
}
//----------------------------------------------------------------------------
ещё учесть что OrderSelect часто бывает false и есть много чего помимо OP_BUY (в вашем примере - нельзя просто тупо ставить else и аккуратнее надо считать среднюю цену)
и ещё тьма нюансов, но чтобы на раз-два запустить можно их потом
Я правильно понял? Вот нашёл раздел где обозначается сеттейкпрофит:
а в коде исправьте это
если будут пропуски в установке ТП - смотрите журнал на наличие ошибок
Все что выделено исправьте в этой функции
а в коде исправьте это
если будут пропуски в установке ТП - смотрите журнал на наличие ошибок
Все что выделено исправьте в этой функции
а в коде исправьте это
если будут пропуски в установке ТП - смотрите журнал на наличие ошибок
Все что выделено исправьте в этой функции
а в коде исправьте это
если будут пропуски в установке ТП - смотрите журнал на наличие ошибок
Ростислав, при более внимательном просмотре кода я вдруг обнаружил, что и мой совет и все остальные совсем не подходят. Тут сделано так, что при каждом открытии очередного ордера пересчитывается общий ТП и всем ордерам ставится новый ТП.
Тут надо разобраться в причине пропуска. Надо смотреть распечатку, но клиент, видимо, этого не умеет.
А к этому вашему коду есть такой вопрос:
Если ордер выбирается по тикету, то зачем всё это заворачивать в цикл¿¿¿