а я так делаю:
void start() { static bool isTrade=False; // Флаг торгов на текущем баре static datetime prevTimeBar=0; // Время открытия предыдущего бара if (prevTimeBar<Time[0]) isTrade=False; if (!isTrade) { // торговая операция isTrade=True; } prevTimeBar=Time[0]; }
Или так))))
int Pbars; int start() { if (Pbars == Bars) return(0); Pbars = Bars; // текст программы)))) return(0); }
to KimIV
Прокомментируйте, пожалуйста, вариант vladevgeniy.
Да вообщем-то это и не проблема) Да не блещет ваша метода надегой, а коли пару одинаковых баров подряд?
Не знаю что думает Игорь, но у меня этот вариант вызывает некоторые сомнения, а ну как ДЦ подкорректирует историю, или при запуске еще не вся история прогрузилась, или запущенный тестер историю подзапросит? Вариант с проверкой времени нулевого бара таких недостатков лишен.
Нормальный вариант. Только я бы сделал так:
void start() { static int Pbars=0; if (Pbars == Bars) return(0); Pbars = Bars; // текст программы)))) }И тут ещё нужно добавить, что предопределённую переменную можно использовать только с некоторыми оговорками, суть которых я уже не помню. Кому интересно, поищите сами. Здесь на форуме обсуждались разные варианты идентификации момента формирования нового бара. Вроде бы даже статья была и был сделан вывод, что самый надёжный метод - это Time[0].
Фишка в статических переменных. Они сохраняют значения даже при завершении работы функции. При повторном вызове функции эти значения можно использовать. Но в то же время это не глобальные переменные, то есть их область видимости ограничена функцией. За пределами функции эти переменные недоступны.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
//+------------------------------------------------------------------+
//| www.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
int trad=0; //флаг торговли установим в "нет торговле"
double ob1, ob2;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (trad==0) //проверяем на возможность торговли (1 - торгуем, 0 - нет)
{
trad=1; //если нет, устанавливаем флаг в "торговля разрешена"
ob1=(iHigh(NULL,0,1)-iLow(NULL,0,1)); //вычисляем разность между макс и мин
} //предыдущего бара и сохраняем до флага
ob2=(iHigh(NULL,0,1)-iLow(NULL,0,1)); //вычисляем разность между макс и мин
//предыдущего бара
if (ob1!=ob2) //постоянно сравниваем макс предыдущего
{ //с тем что в памяти при "trad=1"
if (trad==1) //если появилась разность и можно торговать
{ //тут расположить торговая операция по входу в рынок
trad=0; //возвращает 0 и снова ждет разницы между барами
}
}
}
//+------------------------------------------------------------------+
была у меня проблема с тем, что открывалось по 400 сделок в 1 бар, долго мучался, может кому-то пригодится, то что находил здесь больно замудрено, да и поздно нашел) свое нагляднее вроде