Условный оператор


например, forex

Вернемся крассмотрению нашего первого советника ирасскажу обусловном операторе if-else, который яиспользовал вфункции init().

   int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0) > Close[0])
CurrentState = STATE_SHORT;
else CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
return(0);
}

Формат условного оператора if-else:

   if (выражение)
первый_оператор
else
второй_оператор

Принцип работы оператора: вычисляется значение выражения вскобках; если оно равно true, товыполняется первый_оператор, впротивном случае— второй_оператор.

В нашем первом эксперте вфункции init() есть такая строчка:

      if (iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0) > Close[0])
CurrentState = STATE_SHORT;
else CurrentState = STATE_LONG;

В этой строчке вычисляется выражение iMA(NULL, 0,MAPeriod, 0,MODE_EMA, PRICE_CLOSE, 0)> Close[0]. Забегая вперед, скажу, что вэтом выражении сравнивается значение экспоненциальной скользящей средней поцене закрытия спериодом, определенным внешней переменной MAPeriod, ицена закрытия текущего бара ( Close[0] ).

Если значение скользяйшей средней больше цены закрытия, товыполняется первый оператор:

   CurrentState = STATE_SHORT;

Если— меньше, товторой:

   CurrentState = STATE_LONG;

Если вкачестве оператора есть необходимость выполнить сразу несколько операторов, томожно использовать составной оператор, т.е. заключить вфигурные скобки необходимые нам операторы. При этом после закрывающей фигурной скобки точка сзапятой уже неставится.

Пример использования составного оператора можно найти ивнашем эксперте:

   if (!IsTesting()) 
return(MarketInfo(s, MODE_LOTSIZE)*MarketInfo(StringSubstr(s, 0, 3)+"USD",
MODE_BID)/AccountLeverage());
else
{
p = iClose(StringSubstr(s, 0, 3)+"USD", Period(),
iBarShift(StringSubstr(s, 0, 3)+"USD", Period(), CurTime(), true));
return(MarketInfo(s, MODE_LOTSIZE)*p/AccountLeverage());
}

Если унас нет необходимости ввыполнении второго оператора (вслучае, если выражение вкруглых скобках неравно true), точасть else можно опустить:

   if (выражение)
первый_оператор

Пример изнашего эксперта:

   if (s == "CHFJPY")
{
p = iClose("USDCHF", Period(), iBarShift("USDCHF", Period(), CurTime(), true));
return(MarketInfo(s, MODE_LOTSIZE)/(AccountLeverage()*p));
}

Если несколько операторов if-else вложены друг вдруга, ачасть операторов имеет пропущенную часть else, тоelse всегда связывается сближайшим предыдущим оператором ifвтомже блоке, неимеющим части else.

Обычно операторы вкоде эксперта выполняются последовательно— один задругим. Однако часто требуется изменить последовательность ихвыполнения взависимости откаких-то условий. Вэтом выпуске ярассмотрел один изспособов изменения этой последовательности: условный оператор if-else.


Перейти к главе «Цикл while».
 
+7 (495) 710-76-76
8 (800) 200-01-31
по России бесплатно

закрыть

Вход в личный кабинет

Для счета alpari.classic введите номер счета (буква и 4 цифры) и пароль в ЛК.

Для счетов alpari.micro и alpari.partner введите логин и пароль в МТ.

Зарегистрироваться!Забыли пароль?

 
Rambler's Top100