Формализация некоторых индикаторов

Рассмотрим пару примеров формализации индикаторов. Возьмём для начала macd и параболик sar

  MACD


Индикатор macd представляет собой гистограмму разности между короткой и длинной скользящей средней. Каждый штрих гистограммы соответствует одному бару (свечке). Нумерация штрихов соответствует нумерации баров. На рисунке показаны сигналы macd на покупку (красные) и на продажу (жёлтые)

Сигналы MACD

 

За сигнал на покупку примем:



1. macd[0]<0
2. macd[3]>macd[2]
3. macd[1]>macd[2]
4. macd[0]>macd[1]
5. главная линия выше сигнальной (на текущем баре)

По аналогии сигналы на продажу:



5. macd[0]>0
6. macd[3]<macd[2]
7. macd[1]<macd[2]
8. macd[0]<macd[1]
9. главная линия ниже сигнальной (на текущем баре)

Всего нужно 4 переменных (по одной на каждый бар).Так и назовём их, macd0,macd1 и т.д. Все переменные типа double.Для оптимизации нам нужны периоды средних и используемая цена (принимает значения от 0 до 6).

 

 

Ценовые константы:

 

 
 
Price_close
0
Цена закрытия
 Price_open
1
Цена открытия 
 Price_high
2
Максимальная цена
 Price_low
3
 Минимальная цена
 Price_median
4
 Средняя цена (High+Low)/2
 Price_typical
5
 Типичная ценa (High+Low+Close)/3
 Price_Wighted
6
Взвешенная цена закрытияя (High+Low+CLOSE+CLOSE)/4
 

 обозначим эту цену переменной price (может принимать значения от 0 до 6)

определим переменные индикатора
периоды быстрой (fast_ema), медленной (slow_ema) скользящей и сигнальной линии (signal)
так же обозначим переменную для определение требуемой линии (mode 0-главная линия, 1-сигнальная)
тогда:

string ind()
{
string s="";

int fast_ema=ind_p1, slow_ema=ind_p2,signal=ind_p3,price=ind_p4,mode;

mode=0; //(главная линия)
double macd0=iMACD(NULL,0,fast_ema,slow_ema,signal,price,mode,0);
double macd1=iMACD(NULL,0,fast_ema,slow_ema,signal,price,mode,1);
double macd2=iMACD(NULL,0,fast_ema,slow_ema,signal,price,mode,2);
double macd3=iMACD(NULL,0,fast_ema,slow_ema,signal,price,mode,3);

mode=1;//(сигнальная линия)

double macds0=iMACD(NULL,0,fast_ema,slow_ema,signal,price,mode,0);

// сигнал buy

if(macd0<0&&macd3>macd2&&macd1>macd2&&macd0>macd1&&macd0>macds0)s="buy";

// по аналогии sell

if(macd0>0&&macd3<macd2&&macd1<macd2&&macd0<macd1&&macd0<macds0)s="sell";
return(s);
}

Параболик SAR

Очень простой трендовый индикатор.

 

Сигнал-переход индикатора снизу вверх (Sell), сверху вниз, как на рисунке(Buy)

 

параболик sar

 

High[1]<sar && Open[0]>sar   // "сигнал на BUY"
Low[1]>sar && Open[0]<sar    //"сигнал на SELL" 

 

 

Полностью:

 

string ind()
{
string s="";
double sar=iSAR(NULL,0,0.02,0.2,0);
double sar1=iSAR(NULL,0,0.02,0.2,1);
if(High[1]<sar1&&Open[0]>sar)s="buy";
if(Low[1]>sar1&&Open[0]<sar)s="sell";
return(s);

Рейтинг: 0 Голосов: 0 817 просмотров
Комментарии (0)

Нет комментариев. Ваш будет первым!

Яндекс.Метрика