Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
tkuan77
Вам нужно найти последний закрытый бар и посмотреть, совпадает ли день последнего закрытого бара с текущим днем.
Вы можете использовать что-то вроде этой функции, чтобы получить время последнего закрытого ордера:
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
Привет, Младен,
Но куда мне вставить эту часть кода? Извините за вопрос, так как я еще совсем новичок в кодировании и до сих пор не могу понять, как работает цикл For.
С уважением,
Райан
Привет, Младен,
Но куда мне вставить эту часть кода? Извините за вопрос, так как я еще совсем новичок в кодировании и до сих пор не могу понять, как работает цикл For.
С уважением,
РайанРайан
Что-то вроде этого :
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // торговли нет
Райан
Что-то вроде этого :
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // нет торговли
Привет, Младен, я добавил код, но он, похоже, выдает какую-то ошибку глобальной переменной. Также я заметил, что у вас есть переменная MagicNumber, которая не определена, могу я спросить, для чего она нужна? Я добавил ее в раздел int, но не уверен, для чего она нужна.
Дайте совет. Еще раз спасибо за ваше терпение.
//---- входные параметры
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- Триггерная торговля
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
double TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
total = OrdersTotal(); // проверка общего количества сделок, открытых в настоящее время
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Привет mladen, я добавил код, но он, похоже, выдает какую-то ошибку глобальной переменной. Также я заметил, что у вас есть переменная MagicNumber, которая не определена, могу я спросить, для чего она нужна? Я добавил ее в раздел int, но не уверен, для чего она нужна.
Дайте совет. Еще раз спасибо за ваше терпение.
//---- входные параметры
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- Триггерная торговля
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
double TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
total = OrdersTotal(); // проверка общего количества сделок, открытых в настоящее время
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Это функция
Переместите ее за пределы тела функции start()
↵
Это функция
Переместите его за пределы тела функции start()Привет mladen, я попробовал переместить функцию из Start function, однако, мой советник все еще запускает более 1 сделки в день вместо того, чтобы ограничиться только 1 сделкой в день.
Спасибо за просвещение.
С уважением,
//---- входные параметры
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//-- Триггерная торговля
//+------------------------------------------------------------------+
int ticket, total;
double TP_Value, SL_Value;
total = OrdersTotal(); // проверяем общее количество сделок, открытых в данный момент
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // значение длинного тела
SL_Value = (Low[1] - 0.0010); // всегда одинаково для лонга
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // значение короткого тела
SL_Value = (Low[1] - 0.0010); // всегда одинаково для лонга
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // значение всей свечи, включая голову и хвост
SL_Value = (Low[1] - 0.0010); // всегда одно и то же для лонга
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // значение длинного тела
SL_Value = (High[1] + 0.0010); // всегда одинаково для шорта
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // значение короткого тела
SL_Value = (High[1] + 0.0010); // всегда одинаково для шорта
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // значение всей свечи, включая голову и хвост
SL_Value = (High[1] + 0.0010); // всегда одинаково для шорта
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
↵
Привет, mladen, я попробовал переместить функцию из функции Start, однако мой советник по-прежнему запускает более 1 сделки в день вместо того, чтобы ограничиться только 1 сделкой в день.
Спасибо за просвещение.
С уважением,
//---- входные параметры
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//-- Триггерная торговля
//+------------------------------------------------------------------+
int ticket, total;
double TP_Value, SL_Value;
total = OrdersTotal(); // проверяем общее количество сделок, открытых в данный момент
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // значение длинного тела
SL_Value = (Low[1] - 0.0010); // всегда одинаково для лонга
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // значение короткого тела
SL_Value = (Low[1] - 0.0010); // всегда одинаково для лонга
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // значение всей свечи, включая голову и хвост
SL_Value = (Low[1] - 0.0010); // всегда одно и то же для лонга
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())))
{
if ((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // значение длинного тела
SL_Value = (High[1] + 0.0010); // всегда одинаково для шорта
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // значение короткого тела
SL_Value = (High[1] + 0.0010); // всегда одинаково для шорта
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // значение всей свечи, включая голову и хвост
SL_Value = (High[1] + 0.0010); // всегда одинаково для шорта
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
tkuan77
Замените это :
if(total < 1)
этим :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
И больше не должно этого делать
tkuan77
Замените это :
if(total < 1)
этим :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
И она больше не должна этого делатьПривет, mladen, после того, как я ввел код, вместо того, чтобы срабатывать на 1 сделку в день, он срабатывает на несколько сделок сразу, пока счет не лопнет. Может ли это быть вызвано каким-то механизмом срабатывания?
С уважением,
Привет, mladen, у меня есть код, который закрывает все отложенные сделки, которые у меня есть, после того, как я запустил сделку. как я могу установить, чтобы отменить только текущую существующую отложенную сделку после того, как я запустил сделку, а не все будущие отложенные сделки?
спасибо.....
int new_del()
{
int i,a;
int total = OrdersTotal();
string comentario, par;
for (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6);
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket());
Print("Удаление SELL_STOP", "Orderertype:",OrderType());
return(1);
}
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket());
Print("Удаление BUY_STOP", "Orderertype:",OrderType());
return(1);
}
}
}
}
}
Привет, Младен, у меня есть код, который закрывает все отложенные сделки, которые у меня есть, после того как я запустил сделку. как мне установить, чтобы отменить только текущую существующую отложенную сделку после того, как я запустил сделку, а не все будущие отложенные сделки?
спасибо.....
int new_del()
{
int i,a;
int total = OrdersTotal();
string comentario, par;
for (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6);
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket());
Print("Удаление SELL_STOP", "Orderertype:",OrderType());
return(1);
}
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket());
Print("Удаление BUY_STOP", "Orderertype:",OrderType());
return(1);
}
}
}
}
}tkuan77
Что означает "текущая отложенная сделка" и что означает "будущая отложенная сделка"?
tkuan77
Что означает "текущая отложенная сделка" и что означает "будущая отложенная сделка"?
Привет Младен,
Текущая отложенная сделка означает: как только условие будет выполнено, ea установит 2 отложенные сделки (1 длинную и 1 короткую). Таким образом, если, скажем, сработает длинная сделка, ea автоматически отменит короткую отложенную сделку.
Будущая отложенная сделка означает: после того, как ea отменит предыдущие отложенные сделки и, скажем, условие будет выполнено снова, ea по праву должна установить еще 2 отложенные сделки (1 длинную и 1 короткую). однако, если ea в настоящее время имеет текущую сделку, ea автоматически отменит все отложенные ордера, которые ea пытается установить.
Я пытаюсь сделать так, чтобы система отменяла только текущую отложенную сделку после того, как сделка была запущена.
с уважением,