Помогите закрыть встречные ордера.

 

Уважаемые форумчане, подскажите кто может текст функции, которая выполняет следующие действия:

1. Имеется один, два, три ... открытых ордеров Бай. (Остались от предыдущей неудачной торговли).

2. Имеются один, два, три... открытых ордеров Селл (Поменялось направление, и начал я открывать в другую сторону).

3. При обращении к функции, она подсчитывает общую сумму прибыли/убытка и при условии, что прибыль больше или равна 0,

закрывает встречные ордера, оставляя открытой оставшуюся разницу.

Например: имеем 1 Селл объемом 1 лот, 1 Бай объемом 2 лота. В нужный момент срабатывает функция, перекрытые объемы закрываются с нулевой прибылью

и остается 1 Бай объемом 1 лот или 0,5 лота .

Я просмотрел все имеющиеся на этом сайте примеры, но найти не смог, а сам, к сожалению не тяну.

 

Тут нужен небольшой советник!

Помогу:

icq 459027664

nazarchic@meta.ua

 
MOLET писал (а) >>

Тут нужен небольшой советник!

Помогу:

icq 459027664

nazarchic@meta.ua

А почему функцией нельзя этот вопрос решить
 
xaxa писал (а) >> А почему функцией нельзя этот вопрос решить

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

 
Спасибо. Задумался... т.е. в одну функцию все это нельзя втиснуть, ну тогда три функции последовательно, какая разница? Мне кажется эта ситуация должна быть достаточно распространенной, может кто выложить код?
 
xaxa писал (а) >>
Спасибо. Задумался... т.е. в одну функцию все это нельзя втиснуть, ну тогда три функции последовательно, какая разница? Мне кажется эта ситуация должна быть достаточно распространенной, может кто выложить код?

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



Вот код вычисляющий цену уровня безубытка:

double px = 0; double tv = 0;
for (i =1; i <= К; i++) //К-число ордеров одного типа
{
px = px + _OrderOpenPrice[i] * _OrderLots [i]*MarketInfo(Symbol(),MODE_TICKVALUE);
tv = tv + _OrderLots [i]*MarketInfo(Symbol(),MODE_TICKVALUE);
}


px = NormalizeDouble(px/tv, Digits ); ценовой уровень безубытка тэйкпрофита всех ордеров


далее идет код модификайии ордеров на ценовой уровень безубытка тэйкпрофита всех ордеров:


//--------
for (i = 1; i <= К; i++)
{
if (NormalizeDouble(_OrderTakeProfit[i], Digits ) != NormalizeDouble(px, Digits ))
{
_OrderTakeProfit[i] = px;
_OrderModify(Message);
return(true);
}

}

//----------------------------------


bool _OrderModify(string& Message[])
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // торговый поток занят, подождем следующего тика
if (OrderModify(_OrderTicket [i]
,_OrderOpenPrice [i]
,_OrderStopLoss [i]
,_OrderTakeProfit[i]
,0
,CLR_NONE))
{
AG_Message(Message,OrderTypeString+"("+DoubleToStr(_OrderLots[i],2)+")"+ _OrderComment[i]+"("+DoubleToStr(_OrderTicket[i],0)+")"+OrderModifyOkMes);
PlaySound("ok.wav");
return(true);
}
LastError = GetLastError();
AG_Message(Message,OrderTypeString+"("+DoubleToStr(_OrderLots[i],2)+")"+ _OrderComment[i]+OrderModifyErrorMes+
"- Error #"+DoubleToStr(LastError,0));
PlaySound("alert.wav");
return(false);
}

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

 

Большое спасибо. Пробую разобраться. Выяснил, что перекрытые ордера и встречные - это разные вещи.

 

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

Причина обращения: