Возможно, операции закрытия позиции следует поставить внутрь функции выбора(перебора), т.е. внутрь
for(int i=0;i< actTotal;i++)
{
... ...
// вот сюда.
} //for(int i=0;i< actTotal;i++)
//-------------------------
Возможно есть и др. ошибки.
цену попробуй нормализовать
=============
Примерно так:
if(TotalOrders > 0) {//если есть ордера for(int i=0;i< actTotal;i++) {//перебираем их if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){//выбираем открытые позиции if( OrderSymbol()==Symbol()) {//если символ соотв-ет текущему графику double profit = ProfitDef(); if(OrderType()==OP_BUY && Bid > OrderOpenPrice() + sl/3*Point && Bid < iClose(Symbol(),tf,1)) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);//закрываем бай-позицию if(OrderType()==OP_SELL && Ask < OrderOpenPrice() - sl/3*Point && Ask > iClose(Symbol(),tf,1)) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);//закрываем селл-позиция }}}}
Большое спасибо!
Работает
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Почему не работает OrderClose() в данной ситуации?
for(int i=0;i< actTotal;i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol()==Symbol())
{
TotalOrders++;
}
}}
if(TotalOrders > 0)
{
if(OrderType()==OP_BUY && OrderStopLoss()==0){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - sl*Point,NULL,0,CLR_NONE);
}
if(OrderType()==OP_SELL && OrderStopLoss() == 0){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + sl*Point,NULL,0,CLR_NONE);
}
}
double profit = ProfitDef();
if(OrderType()==OP_BUY && Bid > OrderOpenPrice() + sl/3*Point && Bid < iClose(Symbol(),tf,1))
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(OrderType()==OP_SELL && Ask < OrderOpenPrice() - sl/3*Point && Ask > iClose(Symbol(),tf,1))
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);