Всем Доброго времени суток! Всем людям доброй воли, да не оскудеет рука дающего руку помощи..!
Есть вот такая задача:
В "Свойствах" эксперта, во "Входных параметрах" даём право выбора на каких условиях входить в рынок:
extern bool Условие1
extern bool Условие2
extern bool Условие3
extern bool Условие4
extern bool Условие......
и так миллион Условий для входа
Начинаем реализовывать это в эксперте:
Если было выбрано Условие1 для входа в рынок то:
if ( Условие1 = true) {Входим в рынок;}
А что если были выбраны для входа Условие1 и Условие2 то:
if ( Условие1 = true && Условие2 = true ) {Входим в рынок;}
А что если были выбраны для входа Условие1 и Условие2 и Условие3 то:
if ( Условие1 = true && Условие2 = true && Условие3 = true ) {Входим в рынок;}
А что если были выбраны для входа Условие3 и Условие15 и Условие30 и Условие50 то:
if ( Условие3 = true && Условие15 = true && Условие30 = true && Условие50 = true ) {Входим в рынок;}
А что если ...
В общем к чему я веду, если Условий для входа миллион, все возможные варианты перечислять нужно? Тогда это пиз..ц потому что это 10 9
... то есть миллиард if...
Или всё таки есть другое решение?
int OnInit() {
ShouldCheckCondition[1]=INPUT_1;
ShouldCheckCondition[2]=INPUT_2;
ShouldCheckCondition[3]=INPUT_3;
....
}
void OnTick() {
// проверим все торговые уловия
bool doTrade=true;
for (int i=0;i<ArraySize(ShouldCheckCondition);i++) {
if (ShouldCheckCondition[i]) {
//если надо проверять 100500-тое уловие, то проверим
//вызовем функцию проверки этого условия
if (!CheckCondition(i)) {
// если не склалось - то всё,не торгуем
doTrade=false; break;
}
}
if (doTrade) {
// все требуемые условия сошлись, торгуем
}
}
как-то вот так примерно :-) дано схематично
int OnInit() {
ShouldCheckCondition[1]=INPUT_1;
ShouldCheckCondition[2]=INPUT_2;
ShouldCheckCondition[3]=INPUT_3;
....
}
void OnTick() {
// проверим все торговые уловия
bool doTrade=true;
for (int i=0;i<ArraySize(ShouldCheckCondition);i++) {
if (ShouldCheckCondition[i]) {
//если надо проверять 100500-тое уловие, то проверим
//вызовем функцию проверки этого условия
if (!CheckCondition(i)) {
// если не склалось - то всё,не торгуем
doTrade=false; break;
}
}
if (doTrade) {
// все требуемые условия сошлись, торгуем
}
}
как-то вот так примерно :-) дано схематично
Я дилетант в программировании поэтому прошу простить, но как то не понял как это работает..
Для начала как объявляем ShouldCheckCondition..?
bool ShouldCheckCondition[] - так?
ArrayInitialize() не используем?
А вот тут в коде вы написали:
//если надо проверять 100500-тое уловие, то проверим
//вызовем функцию проверки этого условия
Здесь я вообще не понял, что писать нужно?
И вот в этой части кода вы написали:
if (!CheckCondition(i))
по моему должно быть так:
if (!CheckCondition[i])
В общем понятен смысл кода написанный вами, но не очень понял как этот код выполняет описанную выше мною задачу:
extern bool Условие1
extern bool Условие2
extern bool Условие3
extern bool Условие4
extern bool Условие......
и так миллион bool Условий для входа..
И какие Условия захочет использовать пользователь, нам не известно.. Может 1 и 3, а может 10 и 34 и 35, а может... в общем разные..
Если можно более понятней как для чайника.. составить код с объяснениями..
Буду очень Благодарен...
bool Условие1_buy=true; bool Условие1_sell=true; if(Условие1_включено){ Условие1_buy=...; Условие1_sell=...; } bool Условие2_buy=true; bool Условие2_sell=true; if(Условие2_включено){ Условие2_buy=...; Условие2_sell=...; } bool Buy=Условие1_buy && Условие2_buy; bool Sell=Условие1_sell && Условие2_sell;
Вот так!
1. заводим некоторый массив bool ShouldCheckCondition[100500]; - это будут флаги надо/ненадо проверять условия
2. при старте программы инициализируем всё как false и дополняем/заполняем флагами из полей ввода. (из input)
3. когда пора проверять торговые условия, бежим по массиву и смотрим "необходма-ли такая проверка".
3.1 если она нужна но не вышла, то не торгуем
4. когда прошло весь массив и нет флага "не торгуем", значит все требуемые условия сошлись и открываем ордер (или что-то иное)
1. заводим некоторый массив bool ShouldCheckCondition[100500]; - это будут флаги надо/ненадо проверять условия
2. при старте программы инициализируем всё как false и дополняем/заполняем флагами из полей ввода. (из input)
3. когда пора проверять торговые условия, бежим по массиву и смотрим "необходма-ли такая проверка".
3.1 если она нужна но не вышла, то не торгуем
4. когда прошло весь массив и нет флага "не торгуем", значит все требуемые условия сошлись и открываем ордер (или что-то иное)
Спасибо за ваше терпение! Буду пытаться тестировать..
Если всё упростить и сделать всё одной функцией:
bool ShouldCheckCondition_BUY[7]; ShouldCheckCondition_BUY[1] = USLOVIADLAVHODA_VBUY_1; ShouldCheckCondition_BUY[2] = USLOVIADLAVHODA_VBUY_2; ShouldCheckCondition_BUY[3] = USLOVIADLAVHODA_VBUY_3; ShouldCheckCondition_BUY[4] = USLOVIADLAVHODA_VBUY_4; ShouldCheckCondition_BUY[5] = USLOVIADLAVHODA_VBUY_5; bool doTrade_BUY=false; for (int isccb=0;isccb<ArraySize(ShouldCheckCondition_BUY);isccb++) { if (ShouldCheckCondition_BUY[isccb]) { doTrade_BUY=true; // открываем ордер в BUY //если надо проверять 100500-тое уловие, то проверим //вызовем функцию проверки этого условия if (!ShouldCheckCondition_BUY[isccb]) { // если не склалось - то всё,не торгуем doTrade_BUY=false;break; } } } bool ShouldCheckCondition_SEL[7]; ShouldCheckCondition_SEL[1] = USLOVIADLAVHODA_VSEL_1; ShouldCheckCondition_SEL[2] = USLOVIADLAVHODA_VSEL_2; ShouldCheckCondition_SEL[3] = USLOVIADLAVHODA_VSEL_3; ShouldCheckCondition_SEL[4] = USLOVIADLAVHODA_VSEL_4; ShouldCheckCondition_SEL[5] = USLOVIADLAVHODA_VSEL_5; bool doTrade_SEL=false; for (int isccs=0;isccs<ArraySize(ShouldCheckCondition_SEL);isccs++) { if (ShouldCheckCondition_SEL[isccs]) { doTrade_SEL=true; //открываем ордер в Sell //если надо проверять 100500-тое уловие, то проверим //вызовем функцию проверки этого условия if (!ShouldCheckCondition_SEL[isccs]) { // если не склалось - то всё,не торгуем doTrade_SEL=false;break; } } }
Я правильно интерпретировал ваш код?
Если да? То почему-то при тестировании, во время проверки массива с условиями, условия выполняются 1 или 2 или 3, а не 1 и 2 и 3 (если они были выбраны для входа, то есть открытия ордеров)..
Что не так сделал?
Самому не разобраться...
for (int isccb=0;isccb<ArraySize(ShouldCheckCondition_BUY);isccb++) { if (ShouldCheckCondition_BUY[isccb]) { doTrade_BUY=true; if (!ShouldCheckCondition_BUY[isccb]) { doTrade_BUY=false;break; } } }
Было. А надо:
for (int isccb=0;isccb<ArraySize(ShouldCheckCondition_BUY);isccb++) { if (ShouldCheckCondition_BUY[isccb]) { doTrade_BUY=true; } if (!ShouldCheckCondition_BUY[isccb]) { doTrade_BUY=false; break; } }
А лучше:
bool doTrade_BUY=true; for (int isccb=0;isccb<ArraySize(ShouldCheckCondition_BUY);isccb++) { if (!ShouldCheckCondition_BUY[isccb]) { doTrade_BUY=false; break; } }
Было. А надо:
А лучше:
При таком варианте переменная doTrade_BUY всё время равна 0 (то есть False)! Хотя переменные Условий входа в рынок USLOVIADLAVHODA_VBUY_ кричат одна, за одной, каждая в своё время, по очереди, что вход есть, то есть они равны 1 (True).. , я проверял!
Что то не так!!
- www.metatrader5.com
При таком варианте переменная doTrade_BUY всё время равна 0 (то есть False)! Хотя переменные Условий входа в рынок USLOVIADLAVHODA_VBUY_ кричат одна, за одной, каждая в своё время, по очереди, что вход есть, то есть они равны 1 (True).. , я проверял!
Что то не так!!
Условия входа через И, или ИЛИ?
При таком варианте переменная doTrade_BUY всё время равна 0 (то есть False)! Хотя переменные Условий входа в рынок USLOVIADLAVHODA_VBUY_ кричат одна, за одной, каждая в своё время, по очереди, что вход есть, то есть они равны 1 (True).. , я проверял!
Что то не так!!
Ищите ошибку. Включайте условия по-одному, проверяйте их.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем Доброго времени суток! Всем людям доброй воли, да не оскудеет рука дающего руку помощи..!
Есть вот такая задача:
В "Свойствах" эксперта, во "Входных параметрах" даём право выбора на каких условиях входить в рынок:
extern bool Условие1
extern bool Условие2
extern bool Условие3
extern bool Условие4
extern bool Условие......
и так миллион Условий для входа
Начинаем реализовывать это в эксперте:
Если было выбрано Условие1 для входа в рынок то:
if ( Условие1 = true) {Входим в рынок;}
А что если были выбраны для входа Условие1 и Условие2 то:
if ( Условие1 = true && Условие2 = true ) {Входим в рынок;}
А что если были выбраны для входа Условие1 и Условие2 и Условие3 то:
if ( Условие1 = true && Условие2 = true && Условие3 = true ) {Входим в рынок;}
А что если были выбраны для входа Условие3 и Условие15 и Условие30 и Условие50 то:
if ( Условие3 = true && Условие15 = true && Условие30 = true && Условие50 = true ) {Входим в рынок;}
А что если ...
В общем к чему я веду, если Условий для входа миллион, все возможные варианты перечислять нужно? Тогда это пиз..ц потому что это 10 9
... то есть миллиард if...
Или всё таки есть другое решение?