Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
xektor68
98
xektor68  

Здравствуйте Всем,помогите по советнику,открь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);
//}
//}
//}
//}

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

Boris
3949
Boris  

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

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

xektor68
98
xektor68  
borilunad:

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

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

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

Artyom Trishkin
Модератор
81614
Artyom Trishkin  

XEKTOR68:

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

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

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

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

int total=OrdersTotal();

if(total<1)

{

.....

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

.....

}

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий