Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пропускает отложенные ордера,
а затем удаляет ордер с наименьши profit'ом.
Пропускает отложенные ордера,
а затем удаляет ордер с наименьши profit'ом.
Можно сделать примерно так
А что значит OrderClosePrice()?
Если работать не будет, то подставите нужную цену.
На самом деле недокументированная возможность, пока работает, но в любой момент может прекратить.
То что Вы предлагаете закрывает один
ордер. Мре надо чтобы закрылись все
открытые ордера после достижения
общенй суммарной, положительной
прибыли. Вот что я сделала еще.
allprofit() -- возвращает суммарную
прибыль.
lpt() -- возвращает ticket ордера с
наиеньшей прибылью.
cbd() не работает.
взгляните пожалуйста!
double allprofit()
{
double s = 0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol()!=Symbol() || OrderType() == OP_BUY ||
OrderType() == OP_SELL)
{
s += OrderProfit();
}
}
}
return(s);
}
int lpt()
{
int pr;
double oct = EMPTY_VALUE;
int j=-1;
for(int i=OrdersTotal()-1;i>=0;i--){
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol())continue;
{
if(OrderType() == OP_SELL || OrderType() == OP_BUY)
{
if (oct > OrderProfit()) { oct=OrderProfit(); j=i;}
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
{
pr = OrderTicket();
}}}}
return(pr);
}
int cbd()
{
double oct = EMPTY_VALUE, a = allprofit()*10;
int j=-1, t = lpt();
for(int i=OrdersTotal()-1;i>=0;i--){
if(a > profit*lot*10) {
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol())continue;
{
if (OrderTicket() == t)
{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
else if (OrderType() == OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}}}}}
return(0);
}
про cbd()
вот тут
if(a > profit*lot*10) {
не ясно что есть profit и lot
и не ясно зачем этот if(a > profit*lot*10) {
вставлять в цикл for и каждый раз его проверять ?
и следующая строка
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
не на своем месте, она должна быть после
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
и далее
if (OrderTicket() == t)
никогда не сработает, потому что lpt() всегда будет возвращать 0
почему ?
вот,
oct = EMPTY_VALUE;
поэтому
if (oct > OrderProfit()) { oct=OrderProfit(); j=i;}
никогда (почти никогда) не сработает, т.к. EMPTY_VALUE=2147483647
а отсюда следует, что j так и останется -1, и как следствие pr так и останется 0Переделала
int oct = 10000000;
lpt() -- возвращает ticket .
profit -- количество пунктов
больше которого дожно быь
сумарное количество всех пунктов
во всех ордерах по данному символу
что выдает функция allprofit().