| / | Форум |
|
ExpertTrader
23.05.2006 10:00
Если эксперт использует в расчете торговых сигналов, к примеру,
предыдущее бары, то нет смысла пересчитывать эти сигналы до
нового бара, это только замедлит работу эксперта. Поэтому хочу
решить эту проблему при помощи глобальных переменных.
// Здесь проверяем, существует ли переменная GlobalDay и если существует, // то проверяем, равен ли день записанный в эту переменную с текущим. if(!GlobalVariableCheck("GlobalDay") || GlobalVariableGet("GlobalDay")!=Day()) // Если не существует или не совпадает... { if(GlobalVariableSet("GlobalDay",Day())==0)return(-1); // Устанавливаем GlobalDay с новым значением // Вычисляем торговые сигналы int P=1; int M=2; // Записываем торговые сигналы в соответствующие глобальные переменные if(GlobalVariableSet("GlobalP",P)==0)return(-1); if(GlobalVariableSet("GlobalM",M)==0)return(-1); } Естественно, использовать такое решение стоит только при большом
объеме обрабатываемых данных для формирования торгового сигнала.
|
|
Бесплатная Groupware для групп разработчиков Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение. |
3646 |
Renat
23.05.2006 10:39
Желательно учитывать и имя символа.
|
|
ExpertTrader
23.05.2006 10:43
Учитывать при расчете сигналов или ... ? |
|
ExpertTrader
23.05.2006 10:50
или добавить еще одну переменную с именем символа?
|
|
ExpertTrader
23.05.2006 11:29
А в этом куске кода ошибка
// Здесь проверяем, существует ли переменная GlobalSymbol и если существует, // то проверяем, равен ли Symbol записанный в эту переменную с текущим. if(!GlobalVariableCheck("GlobalSymbol") || GlobalVariableGet("GlobalSymbol")!=Symbol()) { if(GlobalVariableSet("GlobalSymbol",Symbol())==0)return(-1); // Устанавливаем GlobalSymbol с новым значением }'!=' - different types in comparison D:\Program Files\MetaTrader 4\experts\ãëîáàëüíûå ïåðåìåííûå. mq4 (15, 75) |
|
Mak
23.05.2006 11:33
int _prevTime = 0; int start() { int curTime = Time[0]; if (_prevTime != curTime) { newBar(); _prevTime = curTime; } newTick(); } Можно проще. Вставте приведенный код в эксперт или индикатор. Функция newTick() вызывается на каждом тике, функция newBar() вызывается в начале нового бара. Поместите ваш код в newBar() |
|
ExpertTrader
23.05.2006 11:39
Спачибо, отличное решение.
|
|
ExpertTrader
23.05.2006 11:40
Но хотелось бы разобраться с Symbol(), раз уже начал.
|
|
ExpertTrader
23.05.2006 11:49
Можно проще. Вставте приведенный код в эксперт или индикатор. Функция newTick() вызывается на каждом тике, функция newBar() вызывается в начале нового бара. Поместите ваш код в newBar() Нет, наверное ваше решение мне не подходит, т.к. мне нужно определить сигнал по предыдущим барам и не обязательно что именно в начале нового бара, может я включу эксперт в середине дня. |
|
Mak
23.05.2006 12:38
При запуске новый бар тоже сработает.
Полезно только перед запуском эксперта сделать задержку, чтобы данные подкачались. int init() { GlobalVariableSet("LastTradeTime", LocalTime() + 100); } .................. |
|
komposter
23.05.2006 16:03
ExpertTrader писал (а): Просто в имя Гл. Переменной добавить символ - чтоб для каждого
графика была своя переменнаяНо хотелось бы разобраться с Symbol(), раз уже начал. А вообще, все делают как Мак, и не морочат голову ;) |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий