Здравствуйте Всем,помогите по советнику,открьiвает больше ордеров а надо открьiть только один.

 

Здравствуйте Всем,помогите по советнику,открьiвает больше ордеров а надо открьiть только один.Вот и код.Заранее Всем спасибо!

extern int TakeProfit=100;
extern int StopLoss=30;
extern int Magic = 0;
extern int Slippage = 3;
extern double Lot = 0.01;
extern double TrailingStop = 20;

//--------------------------------------------------------------------
int start()
{
double OOP;
int OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OT = OrderType();
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
if (OT==OP_BUY)
{
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(OOP-30*Point,Digits),Slippage,0,0,"",Magic,0,Red));

{
if (OT==OP_SELL)
{
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(OOP+30*Point,Digits),Slippage,0,0,"",Magic,0,Blue));

}
}
}
}
}
}
//return(0);
}
//+------------------------------------------------------------------+

//if(TrailingStop>0)
//{
//if(Bid-OrderOpenPrice()>Point*TrailingStop)
//{
//if(OrderStopLoss()<Bid-Point*TrailingStop)
//{
//OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
//return(0);
//}
//}
//}
//}

//else // go to short position

//if(TrailingStop>0)
//{
//if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
//{
//if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
//{
//OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
//return(0);
//}
//}
//}
//}

//}
//+------------------------------------------------------------------+

 

Первое условие для вставки кода: SRC!

Для открытия только одного ордера поставьте вначале условие: if(OrdersTotal() == 0)

 
borilunad:

Первое условие для вставки кода: SRC!

Для открытия только одного ордера поставьте вначале условие: if(OrderTotal() == 0)

Имеете виду после if (OT==OP_BUY), потому что здесь идея ставить BUY или SELL вручную и чтоб в тоже самое время советник поставил STOP одер в противоположную сторону.

 

XEKTOR68:

здесь идея ставить BUY или SELL вручную и чтоб в тоже самое время советник поставил STOP одер в противоположную сторону.

Вам нужно постоянно сканировать открытые позиции и установленные ордера. Как только появляется новая позиция, открытая вручную, для которой ещё не выставлен ордер - выставлять отложку и привязывать её ко вновь открытой позиции. Как вы это решите делать - ваша головная боль. Тут много вариантов. Но идея примерно такая.
 
Если советник должен только модифицировать позиции, открытые вручную, то ему следует ампутировать насовсем строки содержащие OrderSend...
 
evillive:
Если советник должен только модифицировать позиции, открытые вручную, то ему следует ампутировать насовсем строки содержащие OrderSend...
По-мойму он там отложки хочет тыкать противонаправленные стоповые
 
Ну тогда комментарий к отложке с магиком той позиции, которой данная отложка будет соответствовать...
 
evillive:
Если советник должен только модифицировать позиции, открытые вручную, то ему следует ампутировать насовсем строки содержащие OrderSend...
artmedia70:
Вам нужно постоянно сканировать открытые позиции и установленные ордера. Как только появляется новая позиция, открытая вручную, для которой ещё не выставлен ордер - выставлять отложку и привязывать её ко вновь открытой позиции. Как вы это решите делать - ваша головная боль. Тут много вариантов. Но идея примерно такая.

Все ордера будут закрьiватся вручную,ну скажем советник полу - автомат,потому что будем работать, скажем по какомоту индикатору и как он ттолько дает сигнал, то мьi вставляем ордера вручную.Следим за рьiнком и может на стоплосс или трейлингстоп или вручную закрьiваем все ордера при получений прибьiли, а по стоплоссу они будут закриватся сами.
 

Если нужен только один ордер я использовал условия.

int total=OrdersTotal();

if(total<1)

{

.....

функции стратегии.

.....

}

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