Здравствуйте. Написал функцию, которая проверяет условия для входа в позицию.
Проблема в том, что если условие (выделено желтым) не выполняется - функция не завершает свою работу, а переходит к следующему условию. Таким образом сигнал отрабатывает не правильно.
Что нужно сделать, чтобы при невыполнении одного из условий функции - завершалась работа всей функции, сразу после некорректного условия?
bool BuySignal_new()
{
double Sig_Up[]; // динамический массив для хранения значений индикатора на покупку для каждого бараdouble Sig_Down[]; // динамический массив для хранения значений индикатора на продажу для каждого бараArraySetAsSeries (Sig_Up,true); // устанавливаем индексацию как в таймсерии ( т.е. 5,4,3,2,1,0) в динамич. массиве для индикатораArraySetAsSeries (Sig_Down,true); // устанавливаем индексацию как в таймсерии ( т.е. 5,4,3,2,1,0) в динамич. массиве для индикатораResetLastError();
double close = NormalizeDouble(iClose(_Symbol,_Period,1),Digits());
double close_1 = NormalizeDouble(iClose(_Symbol,_Period,0),Digits());
double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),Digits());
if(CopyBuffer(Handle_stepma_line,0,1,5,Sig_Up)==5 && CopyBuffer(Handle_stepma_line,1,1,4,Sig_Down)==4 )
{
Print("Данные скопированы. Ошибок нет.");
}
else
{
Print("Ошибка копирования. Нет данных");
return(false);
}
if (Sig_Up[1] < Sig_Down[1] && Sig_Up[0] > Sig_Down[0])
{
Print("условие 1 - ок");
}
else
{
Print("условие 1 НЕ выполненно");
return(false);
}
if (close < Sig_Up[1]&& Bid > Sig_Up[0])
{
Print ("условие 2 - ок");
return(true);
}
else
{
Print("условие 2 НЕ выполненно");
return(false);
}
Здравствуйте. Пытаюсь прописать условие, но что-то делаю не так. Помогите разобраться.
В момент пересечения ценой снизу вверх линии индикатора открывается позиция на покупку.
Для этого же бара пытаюсь прописать условие:
если цена закрытия текущей свечи выше линии индикатора и цена Bid на любом из последующих баров больше линии индикатора - ..условие 1
Как это правильно сделать?
if (m_position.Select(_Symbol)) //проверка на наличие позиции
{
Print ("Позиция открыта");
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
Print ("Открыта на покупку");
if (close_1 > Sig_Up[0]) //цена закрытия текущей свечи выше линии индикатора
{
int cl = 4;
if (cl && Bid > Sig_Up[0]) // Bid больше линии индикатора
{
....
}
}
}
}
Здравствуйте. Написал функцию, которая проверяет условия для входа в позицию.
Проблема в том, что если условие (выделено желтым) не выполняется - функция не завершает свою работу, а переходит к следующему условию. Таким образом сигнал отрабатывает не правильно.
Что нужно сделать, чтобы при невыполнении одного из условий функции - завершалась работа всей функции, сразу после некорректного условия?
Что нужно сделать, чтобы при невыполнении одного из условий функции - завершалась работа всей функции, сразу после некорректного условия?
уберите ветвления по else, можно так попробовать сделать:
уберите ветвления по else, можно так попробовать сделать:
спасибо, буду пробовать.
Как в Mql5 будет выглядеть код
Как в Mql5 будет выглядеть код
Примерно так
Необходимые проверки сами прикрутите.Как в Mql5 будет выглядеть код
Можно и так
можно и так:
Здравствуйте. Пытаюсь прописать условие, но что-то делаю не так. Помогите разобраться.
В момент пересечения ценой снизу вверх линии индикатора открывается позиция на покупку.
Для этого же бара пытаюсь прописать условие:
если цена закрытия текущей свечи выше линии индикатора и цена Bid на любом из последующих баров больше линии индикатора - ..условие 1
Как это правильно сделать?
можно и так:
а с нумерацией баров ничего не надо разве делать. Т.е. код из четверки с первым баром для пятерки будет тоже с первым баром без переворота нумерации?