Не закрывается позиция, помогите

 

Подскажите пожалуйста, по какой причине ордер может не закрываться, если я использую код:


for (int k=0; k<=OrdersTotal(); k++) //проверка наличия открытых ордеров
{

OrderSelect(k,SELECT_BY_POS);//выбор ордера по списку
if (OrderSymbol()==Symbol())
{
//M1 - для графика с минутным периодом
if(iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,0)<iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,1) && OrderType()==OP_BUY && OrderMagicNumber()==21 && OrderProfit()>0)
{
while(true)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
if(result!=TRUE) error=GetLastError();
if(error==135) RefreshRates(); else break;
}

}

}

}


Проверял, все условия по графику были соблюдены, тип ордера верный, график и его период тоже смотрел верно, но по какой-то причине ордер не закрывается.

По какой-то причине не выполняет ся условие if(iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,0)<iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,1) && OrderType()==OP_BUY && OrderMagicNumber()==21 && OrderProfit()>0), хотя по графику и списку ордеров все параметры соблюдены


В чем может быть дело?


 
for (int k=OrdersTotal()-1; k>=0; k--) ?
 

одно и то же что и for (int k=0; k<OrdersTotal(); k++). Дело именно в if(iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,0)<iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,1) && OrderType()==OP_BUY && OrderMagicNumber()==21 && OrderProfit()>0).


Потомучто если ставлю Alert в цикл - сообщение появляется, а если под условие, то нет. Вот и не могу разобраться в чем дело.

 
Что пишется в журнале логов?
 

попробуй так..


for (int k=0; k<=OrdersTotal(); k++) //проверка наличия открытых ордеров
{
OrderSelect(k,SELECT_BY_POS);//выбор ордера по списку

{
if (OrderSymbol()==Symbol())
{
//M1 - для графика с минутным периодом
if(iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,0)<iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,1) && OrderType()==OP_BUY && OrderMagicNumber()==21 && OrderProfit()>0)
{
while(true)
{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
if(result!=TRUE) error=GetLastError();
if(error==135) RefreshRates(); else break;
}

}

}

}

}

 
panelektrik писал(а) >>

попробуй так..

Интересно, из каких соображений Вы предлагаете свой совет? Кто учил Вас закрывать длинные позиции по Аску?

 
makedonsky >>:


Проверял, все условия по графику были соблюдены, тип ордера верный, график и его период тоже смотрел верно, но по какой-то причине ордер не закрывается.

По какой-то причине не выполняет ся условие if(iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,0)<iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,1) && OrderType()==OP_BUY && OrderMagicNumber()==21 && OrderProfit()>0), хотя по графику и списку ордеров все параметры соблюдены


В чем может быть дело?

А магик тоже по графику проверяли?

 
Roger >>:

Интересно, из каких соображений Вы предлагаете свой совет? Кто учил Вас закрывать длинные позиции по Аску?

я не заметил OrderType()==OP_BUY

 

В один if () смешаны

а)проверки ордера

в)проверка индикатора

Раздели, будет проще разобраться. Да и программке полегче жить станет, если RSI вынесешь из цикла )

 
Вынес бы, да в этом и есть фишка =).
Reshetov >>:

А магик тоже по графику проверяли?


не по графику конечно. У меня ордер открывается и в зависимости от условий ставит мэджик определенный. вот его и при закрытии провевяю. всё равно всем спасибо большое. внёс корретивы, вроде пока всё окей.


рад буду так же сотрудничеству в области написания советников. предложения пишите в личку.

 
В этой связи и у меня вопрос к знатокам: у нулевого бара есть цена CLOSE?
Причина обращения: