if(OrdersTotal()>2){return(0);}Вставь в начало кода: эксперт не выполняется если 2 ордера!
Нужно взять из какого-нибудь стандартного эксперта стандартный же цикл по ордерам и вставить подсчёт ордеров для данного символа. Если больше двух - return(0).
Здесь внизу страницы можно найти панель инструментов, там есть кнопка MQL. Крайне желательно использовать её для вставки кода, в таком виде мало кто будет его смотреть.
//+------------------------------------------------------------------+ //| кккк.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" extern double TakeProfit = 150; extern double StopLoss = 100; extern double lev= 100; extern double TR= 20; extern double Lots = 0.01; extern double HouerOpen = 18; extern double MinutesOpen = 45; extern double SecondsOpen = 35; bool UseCurrSymbol = False; // Использовать только один инструмент int Slippage = 5; // Проскальзывание цены color clCloseBuy = Blue; // Цвет закрытия покупки color clCloseSell = Red; // Цвет закрытия продажи //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double pBid, pAsk; double Vcp1, MyInd, MySL; int Os, total, OI, ticket, ho, mo, OP, cnt, sred, so ; mo=Minute(); so=Seconds(); ho=Hour(); //-------------------------------------------------------------------------------------------------- // Блок выставления ордеров // //-------------------------------------------------------------------------------------------------- if(mo==MinutesOpen && so>=SecondsOpen ) { if(ho==HouerOpen ) { //---- if(OrderTotal(OP_BUYSTOP)==0) { OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+lev*Point,3,(Ask+lev*Point)-StopLoss*Point,Ask+(TakeProfit+lev)*Point,"Покупка",111,0,Green); } //---- if(OrderTotal(OP_SELLSTOP)==0) { OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-lev*Point,3,(Bid-lev*Point)+StopLoss*Point,Bid-(TakeProfit+lev)*Point,"Продажа",111,0,Green); } //---- } } //---- return(0); } //+------------------------------------------------------------------+ int OrderTotal(int type) { int order=0; for(int pos=OrdersTotal()-1; pos>=0; pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true) { if(OrderSymbol()==Symbol() && OrderType()==type) { order++; } } else Print("Ошибка ", GetLastError()); } return(order); }Так вот пойдёт?
conys:
Так вот пойдёт?
Так вот пойдёт?
Да, спасибо. Работает.
maxtor писал (а):
Только уберите лишние обьявленные переменные, если они не нужны. Я не стал удолять, потому что не знаю нужны они вам или нет.
conys:
Только уберите лишние обьявленные переменные, если они не нужны. Я не стал удолять, потому что не знаю нужны они вам или нет.
maxtor писал (а):
Только уберите лишние обьявленные переменные, если они не нужны. Я не стал удолять, потому что не знаю нужны они вам или нет.
Спасибо, conys
Еще просьба есть
а не могли бы дописать блок закрытия ордеров в заданное время?
Заранее благодарю
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть простой эксперт, выставляет ордера buy stop и sell stop в заданное время, но повторяет ордера по заданной паре пока не истекло время.
Подскажите что дописать, чтобы выставлялись ордера только один buy stop и один sell stop по заданной паре, и по другим инструментам была возможность выставлять аналогичные ордера?
Спасибо
extern double TakeProfit = 150;
extern double StopLoss = 100;
extern double lev= 100;
extern double TR= 20;
double Lots = 0.01;
extern double HouerOpen = 18;
extern double MinutesOpen = 45;
extern double SecondsOpen = 35;
bool UseCurrSymbol = False; // Использовать только один инструмент
int Slippage = 5; // Проскальзывание цены
color clCloseBuy = Blue; // Цвет закрытия покупки
color clCloseSell = Red; // Цвет закрытия продажи
int start()
{
double pBid, pAsk;
double Vcp1, MyInd, ts, MySL;
int Os, total, OI, ticket, ho, mo, OP, cnt, sred, so ;
ts=1;
mo=Minute();
so=Seconds();
ho=Hour();
//--------------------------------------------------------------------------------------------------
// Блок выставления ордеров
//
//--------------------------------------------------------------------------------------------------
if ( mo== MinutesOpen && so>= SecondsOpen ) //
{
//total=OrdersTotal();
// if(total<1 )
{
if (ho==HouerOpen ) //
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+lev*Point,3,(Ask+lev*Point)-StopLoss*Point, Ask+(TakeProfit+lev)*Point, "Покупка",111,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) SendMail("BUYSTOP order установлен : ", OrderOpenPrice());
}
else Print("Error opening Buy order : ", GetLastError());
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-lev*Point, 3, (Bid-lev*Point)+StopLoss*Point, Bid-(TakeProfit+lev)*Point, "Продажа",111,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) SendMail("SELLSTOP order установлен : ", OrderOpenPrice());
}
else Print("Error opening Sell order : ", GetLastError());
return(0);
}
}
}