Это не работает потому что не различается ОrдеrType()
for(int i=0; i<at; i++)
{
OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES);
to++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
{
OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES);
to++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
А у вас в советнике может быть открыто только ордера на покупку или только на продажу? Или оба сразу?
liza:
for(int i=0; i<at; i++)
{
OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES);
to++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
for(int i=0; i<at; i++)
{
OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES);
to++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
Лиза, попробуй для начала проверить какие значения сравниваются в условиях.
Потому как загвоздка может стоять в какой-нибудь переменной, например sp. В пунктах она задается или нет
Лучше так.
for(int i=at; i>=0; i--){
if(!OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES))continue;
if(OrderType()==OP_BUY){
if( Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
if(OrderType()==OP_SELL){
if(Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}
Что-то вставка кода у меня не работает.
for(int i=at; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POSВВо,MODE_TRADES)) continue; if(OrderType()==OP_BUY) if( Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if(OrderType()==OP_SELL) if(Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); }
Попробовала. Не работает. Ордера выставляются и срабатывают только по tp и sl. Очень странно, вроде все правильно...
Проверьте значения переменных sp и Pip
Убрала sp – работает, но тогда не понятно почему не работает это –
double sp=MarketInfo(Symbol(), MODE_SPREAD);
double sp=MarketInfo(Symbol(), MODE_SPREAD);
liza:
Убрала sp – работает, но тогда не понятно почему не работает это –
double sp=MarketInfo(Symbol(), MODE_SPREAD);
Убрала sp – работает, но тогда не понятно почему не работает это –
double sp=MarketInfo(Symbol(), MODE_SPREAD);
Возвращает спрэд в пунктах.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Почему это не работает?
if(buys > 0 && Bid > OrderOpenPrice() + sp + Pip*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(sells > 0 && Ask < OrderOpenPrice() - sp - Pip*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);