Мы сделали этот советник для скальпинга! Советник должен закрывать каждый скальпинг-ордер с прибылью в 1 пункт! Чтобы не закрывать долгосрочные ордера, мы использовали команду OrderOpenTime(). Скальпинговые ордера устанавливаются вручную! Они действуют как TP, но только с прибылью в 1 пункт!
externdouble TPforBuys=1;
externdouble TPforSells=1;
externdouble TimeForEA=120;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
for(int a=OrdersTotal()-1;a>=0;a--)
{
double TPbuy = TPforBuys / 10000;
if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) &&
OrderType()==OP_BUY && OrderSymbol()==Symbol() ) // order type and Symbol checked here
{
double TPB=OrderOpenPrice()+ TPbuy;
// Close Buysif(Bid>TPB)
{
if( TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) ) // no need to check type and symbol hereif( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
{
Print("OrderClose failed, error: ", GetLastError());
}
elsecontinue; // if order has been closed move to the next position, no need to check if it's a SELL
} // end of if(Bid>TPB)
} // end of if( OrderSelect(a double TPsell = TPforSells / 10000;
if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) &&
OrderType()==OP_SELL && OrderSymbol()==Symbol() )
{
double TPS=OrderOpenPrice()- TPsell;
// Close Sellsif(Ask<TPS)
{
if( TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) )
if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
Print("OrderClose failed, error: ", GetLastError());
} // end of if(Ask<TPS)
} // end of if( OrderSelect(a
} // end of for(int a=OrdersTotal()return(0);
}
Вы имеете в виду этот путь?
Я не знаю... Это делает то, что ты хочешь?
Конечно! Извини! Я не подумал об этом!
Мы сделали этот советник для скальпинга! Советник должен закрывать каждый скальпинг-ордер с прибылью в 1 пункт! Чтобы не закрывать долгосрочные ордера, мы использовали команду OrderOpenTime(). Скальпинговые ордера устанавливаются вручную! Они действуют как TP, но только с прибылью в 1 пункт!
Спасибо
Понятно, вы не хотите, чтобы советник закрывал нескальпирующие, краткосрочные ордера...
Хорошо, несколько комментариев...
1. Ваш цикл практически ничего не делает, вам нужно заключить в скобки { } то, что вы хотите сделать внутри цикла. ...
2. У вас есть 2 вызова OrderSelect(), если вы поместите все в цикл, вам понадобится только один. ...
3. секция close buys должна выполняться только для ордеров Buy, секция close sells должна выполняться только для ордеров Sell.
4. ваша прибыль в 1 пункт жестко закодирована для четырехзначных пар, поэтому она не будет работать для таких пар, как USDJPY.
Может быть, что-то вроде этого...
Может быть, что-то вроде этого...