Добрый день!
Мне нужно, чтобы советник работал постоянно, но включался всего один раз в день. Вроде написал, но в тестере не могу добиться необходимого.
extern bool WaitForNewDay = false;//В этой переменной указывается, нужно ли дожидаться нового дня, чтобы начать работу int start() { static datetime bt; datetime tm=iTime(Symbol(),PERIOD_D1,0); if(bt==tm && WaitForNewDay)return(-1); /* Здесь Ваш код, который должен выполняться только один раз в день. */ bt=tm; //---- return(0); }
Добрый день!
Мне нужно, чтобы советник работал постоянно, но включался всего один раз в день. Вроде написал, но в тестере не могу добиться необходимого.
А критерий какой ?
он должен включаться на открытии дня ?
или в какой то момент внутри дня ?
Necron, но в таком случае, с указанием периода D1, на графике для моего советника придется ставить именно такой период (ну, как я понимаю). Этого нежелательно, поскольку я хочу с помощью него следить за минутными барами.
YuraZ, да, таким образом он включится в начале дня, дождется в этот день благополучного момента и купит-продаст. Один раз.
Necron, но в таком случае, с указанием периода D1, на графике для моего советника придется ставить именно такой период (ну, как я понимаю). Этого нежелательно, поскольку я хочу с помощью него следить за минутными барами.
YuraZ, да, таким образом он включится в начале дня, дождется в этот день благополучного момента и купит-продаст. Один раз.
if (LastorderTime==0) //аварийный поиск последнего ордера.
{
for (int ii=0; ii<OrdersHistoryTotal();ii++)
if (OrderSelect(ii,SELECT_BY_POS,MODE_HISTORY))
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
if (OrderOpenTime()>LastorderTime)
{LastorderTime =OrderOpenTime();}
for (ii=0; ii<OrdersTotal();ii++)
if (OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>LastorderTime )
{LastorderTime =OrderOpenTime();}
}
..........
............
if ( iTime(Symbol(),PERIOD_D1,Delay)> LastorderTime // проверка на сл. день
{
....
OrderSend(..........)
....
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)
LastorderTime=iTime(Symbol(),PERIOD_D1,0); // установка время последнего ордера
.....
}
Necron, но в таком случае, с указанием периода D1, на графике для моего советника придется ставить именно такой период (ну, как я понимаю). Этого нежелательно, поскольку я хочу с помощью него следить за минутными барами.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Мне нужно, чтобы советник работал постоянно, но включался всего один раз в день. Вроде написал, но в тестере не могу добиться необходимого.
extern bool WaitForNewDay = false;//В этой переменной указывается, нужно ли дожидаться нового дня, чтобы начать работу
bool AllowTrade = true;//Разрешено ли советнику работать
int CurrentDay = 0;//Переменная текущего дня
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
CurrentDay = DayOfWeek(); //Присваиваем значение переменной текущего дню
if (WaitForNewDay == false) //Если нового дня дожидаться не нужно, то...
{
AllowTrade = true; //разрешить торговлю
}
else
{
AllowTrade = false; //иначе нет
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if ((AllowTrade == false) && (WaitForNewDay == false)) //Если торговать нельзя
{
AllowTrade = IsNewDay(); //Спрашиваем у функции нового дня, наступил ли новый день
}
if (AllowTrade == true)
{
Print(IsNewDay());//Вместо этого Принт'а будет рабочая функция, а сейчас она выводит, наступил ли новый день
AllowTrade = false; //Отменяем разрешение на торговлю
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool IsNewDay() //Функция проверки нового дня
{
if ( (DayOfWeek() != CurrentDay) || (DayOfWeek() != 6) || (DayOfWeek() != 0)) //Если день не сегодняшний, и не выходной, то...
{
CurrentDay = DayOfWeek();//Сегодняшним днем делаем день, пришедший с тиком
return(true); //Да - день действительно изменился
}
else
{
return(false);//Нет, день все тот же
}
}
Я только начал программировать на MetaQuotes, поэтому, возможно, допустил ошибку из-за незнания особенностей системы.
Пожалуйста, помогите мне исправить в программе логику или синтаксис! :) Заранее спасибо!