У меня для этого реализован класс, который работает с конкретным символом.
Вот например.
Что-то похожее я уже реализовал. Но почему-то на одном символе проскакивает 3-5 позиций. Выходит, что 3-5 раз определяется что новый бар на одном символе.
Что-то похожее я уже реализовал. Но почему-то на одном символе проскакивает 3-5 позиций. Выходит, что 3-5 раз определяется что новый бар на одном символе.
Пойду затоплю печку и продолжу колдовать.
В классе включите переменную типа datetime. В ней храните время появления нового бара. И уже потом проверяйте если это время не совпадает со временем текущего (нулевого бара) то значит пришел новый бар.
class Trader
{
datetime TM;
string SMB;
bool NewBar();
void Init(string Symbols);
}
void Init(...)
{
SMB = Symbols;
TM = 0;
}
bool NewBar()
{
res = false;
if (TM!=iTime(SMB,Period(),0) res = true;
return(res);
}
Таким образом для каждого экземпляра класса у вас будет свое время прихода бара.
Alexey Viktorov: Ну это такой костыль... вообще неприемлемый. Самый простой костыль, делать советник для одного инструмента и поставить его на несколько пар. Но нужен именно мультивалютник.
Так варианты со своими плюсами и минусами:
1. Синтетик из необходимых символов, весь механизм учета и подгрузки истории символов средствами терминала без участия советника.
2. Советники на каждый символ, разделен механизм открытия и учета/сопровождения позиций.
Ну вызываешь IsNewBar() для одного символа, получаешь bool ответ, пишешь его в переменную. Вызываешь IsNewBar() для другого символа... В другую переменную надо писать... Сколько переменных надо завести если неизвестно сколько пар будут работать?
И вторая непонятка: Все действия перенести в OnTimer() а OnTick() оставить пустым? Или только для действий с символом на котором стоит советник?
Для каждого символа и тф свой экземпляр класса - не будет у тебя кучи переменных. А будет один легко измеряемый список. Вот по этому списку проходишь и проверяешь значения каждого экземпляра из списка.
Artyom Trishkin: Для каждого символа и тф свой экземпляр класса - не будет у тебя кучи переменных. А будет один легко измеряемый список. Вот по этому списку проходишь и проверяешь значения каждого экземпляра из списка.
Могу ночью показать. Сейчас - с мобилы.
Это пока для меня за пределами понимания. На неделе, когда у тебя будет время, я с удовольствием послушаю ликбез на эту тему.
В классе включите переменную типа datetime. В ней храните время появления нового бара. И уже потом проверяйте если это время не совпадает со временем текущего (нулевого бара) то значит пришел новый бар.
Таким образом для каждого экземпляра класса у вас будет свое время прихода бара.
Читать я начал с конца... И опять экземпляры класса.
Почему в вашем примере функции Init и NewBar как отдельные функции, не "привязаны" к классу?
При открытии новой недели перед открытием позиций и для проверки условий нужно торговое окружение. Получаю его посредством CopyRates для каждого символа из string массива.
Потом перед следующей проверкой нового бара переменной datetime присваивается время из структуры MqlRates и это время сравнивается с текущим нулевого бара символа в функции NewBar().
Вот если ошибка в моём коде, я её со временем найду. Но если такой вариант вообще не подходящий, то проблема. Придётся увеличивать свои познания в ООП.
При открытии новой недели перед открытием позиций и для проверки условий нужно торговое окружение. Получаю его посредством CopyRates для каждого символа из string массива.
Потом перед следующей проверкой нового бара переменной datetime присваивается время из структуры MqlRates и это время сравнивается с текущим нулевого бара символа в функции NewBar().
Вот если ошибка в моём коде, я её со временем найду. Но если такой вариант вообще не подходящий, то проблема. Придётся увеличивать свои познания в ООП.
Создайте или еще один массив, для даты нулевого бара, или этот символ+дата в стркутуру. И не нужно будет плодить сущностей из классов.
Создайте или еще один массив, для даты нулевого бара, или этот символ+дата в стркутуру. И не нужно будет плодить сущностей из классов.
И какой прок от массива дат нулевого бара? Дата хранится в datetime переменной и в функции NewBar() сравнивается с временем нулевого бара каждого символа.
Брррррррррррррррр. Кажется нашёл ошибку в своём коде... Стоило только написать "каждого символа". Ведь моя функция не была предназначена для других символов... Там время нулевого бара берётся по _Symbol а это будет неправильно. Сейчас проверю и исправлю...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
У меня для этого реализован класс, который работает с конкретным символом.
Вот например.
Что-то похожее я уже реализовал. Но почему-то на одном символе проскакивает 3-5 позиций. Выходит, что 3-5 раз определяется что новый бар на одном символе.
Пойду затоплю печку и продолжу колдовать.
Что-то похожее я уже реализовал. Но почему-то на одном символе проскакивает 3-5 позиций. Выходит, что 3-5 раз определяется что новый бар на одном символе.
Пойду затоплю печку и продолжу колдовать.
В классе включите переменную типа datetime. В ней храните время появления нового бара. И уже потом проверяйте если это время не совпадает со временем текущего (нулевого бара) то значит пришел новый бар.
Таким образом для каждого экземпляра класса у вас будет свое время прихода бара.Ну это такой костыль... вообще неприемлемый. Самый простой костыль, делать советник для одного инструмента и поставить его на несколько пар. Но нужен именно мультивалютник.
Так варианты со своими плюсами и минусами:
1. Синтетик из необходимых символов, весь механизм учета и подгрузки истории символов средствами терминала без участия советника.
2. Советники на каждый символ, разделен механизм открытия и учета/сопровождения позиций.
3. Вариации OnTimer, подходящая фраза из недавних обсуждений - "закат солнца вручную".
Не в этом моё недопонимание.
Ну вызываешь IsNewBar() для одного символа, получаешь bool ответ, пишешь его в переменную. Вызываешь IsNewBar() для другого символа... В другую переменную надо писать... Сколько переменных надо завести если неизвестно сколько пар будут работать?
И вторая непонятка: Все действия перенести в OnTimer() а OnTick() оставить пустым? Или только для действий с символом на котором стоит советник?
Для каждого символа и тф свой экземпляр класса - не будет у тебя кучи переменных. А будет один легко измеряемый список. Вот по этому списку проходишь и проверяешь значения каждого экземпляра из списка.
Это пока для меня за пределами понимания. На неделе, когда у тебя будет время, я с удовольствием послушаю ликбез на эту тему.
В классе включите переменную типа datetime. В ней храните время появления нового бара. И уже потом проверяйте если это время не совпадает со временем текущего (нулевого бара) то значит пришел новый бар.
Таким образом для каждого экземпляра класса у вас будет свое время прихода бара.Читать я начал с конца... И опять экземпляры класса.
Почему в вашем примере функции Init и NewBar как отдельные функции, не "привязаны" к классу?
Пока у меня реализовано так:
При открытии новой недели перед открытием позиций и для проверки условий нужно торговое окружение. Получаю его посредством CopyRates для каждого символа из string массива.
Потом перед следующей проверкой нового бара переменной datetime присваивается время из структуры MqlRates и это время сравнивается с текущим нулевого бара символа в функции NewBar().
Вот если ошибка в моём коде, я её со временем найду. Но если такой вариант вообще не подходящий, то проблема. Придётся увеличивать свои познания в ООП.
Пока у меня реализовано так:
При открытии новой недели перед открытием позиций и для проверки условий нужно торговое окружение. Получаю его посредством CopyRates для каждого символа из string массива.
Потом перед следующей проверкой нового бара переменной datetime присваивается время из структуры MqlRates и это время сравнивается с текущим нулевого бара символа в функции NewBar().
Вот если ошибка в моём коде, я её со временем найду. Но если такой вариант вообще не подходящий, то проблема. Придётся увеличивать свои познания в ООП.
Создайте или еще один массив, для даты нулевого бара, или этот символ+дата в стркутуру.
И не нужно будет плодить сущностей из классов.
Создайте или еще один массив, для даты нулевого бара, или этот символ+дата в стркутуру.
И не нужно будет плодить сущностей из классов.
Брррррррррррррррр. Кажется нашёл ошибку в своём коде... Стоило только написать "каждого символа". Ведь моя функция не была предназначена для других символов... Там время нулевого бара берётся по _Symbol а это будет неправильно. Сейчас проверю и исправлю...
Читать я начал с конца... И опять экземпляры класса.
Почему в вашем примере функции Init и NewBar как отдельные функции, не "привязаны" к классу?
Это просто примерный алгоритм. Лень было все полностью писать. А так, это есть методы класса.