//+------------------------------------------------------------------+
//| 2MA.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_chart_window
input int Sdvig = 1; // на каком баре сигнал
input int PutAlert = 1; // 0-off.
input int MA1Period = 12;
input int MA1Shift = 0;
input int MA1Method = 0;
input int MA1ApPrice = 0;
input int MA2Period = 55;
input int MA2Shift = 0;
input int MA2Method = 0;
input int MA2ApPrice = 0;
double LastOpen=0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*
double iMA(
string symbol, // имя символа
int timeframe, // таймфрейм
int ma_period, // период
int ma_shift, // сдвиг средней
int ma_method, // метод усреднения
int applied_price, // тип цены
int shift // сдвиг
);
MODE_SMA 0 Простое усреднение
MODE_EMA 1 Экспоненциальное усреднение
MODE_SMMA 2 Сглаженное усреднение
MODE_LWMA 3 Линейно-взвешенное усреднение
PRICE_CLOSE 0 Цена закрытия
PRICE_OPEN 1 Цена открытия
PRICE_HIGH 2 Максимальная за период цена
PRICE_LOW 3 Минимальная за период цена
PRICE_MEDIAN 4 Медианная цена, (high+low)/2
PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3
PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4
*/
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutPointer(string name,double price,color clr,int code)
{
ObjectCreate(0,name,OBJ_ARROW,0,Time[0],price);
//--- установим код стрелки
ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим способ привязки
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
//--- установим цвет стрелки
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим размер стрелки
ObjectSetInteger(0,name,OBJPROP_WIDTH,3);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(0,name,OBJPROP_BACK,true);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
double MA1=iMA(NULL,0,MA1Period,0,MA1Method,MA1ApPrice,Sdvig);
double MA12=iMA(NULL,0,MA1Period,0,MA1Method,MA1ApPrice,Sdvig+1);
double MA2=iMA(NULL,0,MA2Period,0,MA2Method,MA2ApPrice,Sdvig);
double MA22=iMA(NULL,0,MA2Period,0,MA2Method,MA2ApPrice,Sdvig+1);
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(LastOpen!=open[0])
{
if(MA1>MA2 && MA12<MA22)
{
PutPointer("UP"+TimeToString(Time[0]),Low[1],Aqua,233);
if(PutAlert==1) {Alert(Symbol()+" Signal BUY!!!");}
}
if(MA1<MA2 && MA12>MA22)
{
PutPointer("DN"+TimeToString(Time[0]),High[1],Red,234);
if(PutAlert==1){Alert(Symbol()+" Signal SELL!!!");}
}
}
LastOpen=open[0];
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
// ---------------------------------------------------------------------------
// Рассчёт RSI по книге Ч.Лебо и Д.Лукаса, для усреднения используется SMA.
// ---------------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 40
#property indicator_level2 60
// Период индикатора.
extern int PERIOD=9;
extern int RSILevel=40;
double LastOpen=0;
// Буферы индикатора.
double buf_rsi[];
// Рабочий период индикатора.
int work_period;
// Инициализация.
int init()
{
IndicatorShortName(StringConcatenate(
"SMA RSI (",PERIOD,")"));
IndicatorDigits(0);
SetIndexBuffer(0,buf_rsi);
SetIndexEmptyValue(0,-1);
SetIndexLabel(0,"SMA RSI("+PERIOD+")");
work_period=Bars-PERIOD;
return(0);
}
// Главный цикл.
int start()
{
int i;
for(i=Bars-IndicatorCounted()-1; i>=0; i--)
{
if(i<work_period)
{
double up=0,dn=0;
int j;
for(j=i+PERIOD-1; j>=i; j--)
{
double v=Close[j]-Open[j];
if(v>0)
{
up+=v;
} else {
dn-=v;
}
}
buf_rsi[i]=up/(up+dn)*100;
} else {
buf_rsi[i]=-1;
}
}
if(Open[0]!=LastOpen)
{
if(buf_rsi[1]>RSILevel && buf_rsi[2]<RSILevel) Alert(Symbol()+" Пробитие Уровня RSI "+IntegerToString(RSILevel)+" Снизу Вверх!");
if(buf_rsi[1]<RSILevel && buf_rsi[2]>RSILevel) Alert(Symbol()+" Пробитие Уровня RSI "+IntegerToString(RSILevel)+" Cверху Вниз!");
if(buf_rsi[1]>(100-RSILevel) && buf_rsi[2]<(100-RSILevel)) Alert(Symbol()+" Пробитие Уровня RSI "+IntegerToString(100-RSILevel)+" Снизу Вверх!");
if(buf_rsi[1]<(100-RSILevel) && buf_rsi[2]>(100-RSILevel)) Alert(Symbol()+" Пробитие Уровня RSI "+IntegerToString(100-RSILevel)+" Cверху Вниз!");
}
LastOpen=Open[0];
Comment("\n buf_rsi[0] ",buf_rsi[1],
"\n buf_rsi[1] ",buf_rsi[2]);
return(0);
}
//+------------------------------------------------------------------+
/*
double iMA(
string symbol, // имя символа
int timeframe, // таймфрейм
int ma_period, // период
int ma_shift, // сдвиг средней
int ma_method, // метод усреднения
int applied_price, // тип цены
int shift // сдвиг
);
MODE_SMA 0 Простое усреднение
MODE_EMA 1 Экспоненциальное усреднение
MODE_SMMA 2 Сглаженное усреднение
MODE_LWMA 3 Линейно-взвешенное усреднение
PRICE_CLOSE 0 Цена закрытия
PRICE_OPEN 1 Цена открытия
PRICE_HIGH 2 Максимальная за период цена
PRICE_LOW 3 Минимальная за период цена
PRICE_MEDIAN 4 Медианная цена, (high+low)/2
PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3
PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4
*/
но помоему как открывал и закрывал на третьем баре, так и открывает.
www.opentraders.ru/downloads/888/
AM2