Привет всем, я мог бы использовать небольшую помощь по этому вопросу. Я немного подправил вещи в коде, но никак не могу понять, как отрегулировать наклон или как буферизовать, чтобы желтый оставался желтым немного дольше. Я торгую на 5-секундных графиках, используя flexichart, и хотел бы, чтобы волна стала желтой, так как тренд исчерпывает топливо и находится в процессе консолидации. Я настроил это на lwma в настоящее время. Кроме того, цвета - красный вверх и зеленый вниз, и я не разобрался в этом, не входя и не меняя каждый отдельный индикатор. Я явно не программист.
Вот код, который у меня есть, и снимок экрана.
//Версия: 11
//Дата последнего обновления: 23 мая 2011 г.
// ----------------------------------------------- -------------------
//| Скользящая средняя XP |
//| xpMA.mq4 |
//| Разработано Coders Guru |
//|
http://www.xpworx.com|
// ----------------------------------------------- -------------------
# Свойство ссылка http://www.xpworx.com
// ----------------------------------------------- -------------------
#property Indior_chart_window
#property Indic_buffers 4
#property Indic_color1 Yellow
#property Indic_color2 Green
#property Indic_color3 Red
#property Indior_width1 1
#property Indior_width2 1
#property Indior_width3 1
// ----------------------------------------------- -------------------
/* Константы скользящих средних:
------------------------------------
MODE_SMA 0 Простая скользящая средняя,
MODE_EMA 1 экспоненциальная скользящая средняя,
MODE_SMMA 2 Сглаженное скользящее среднее,
MODE_LWMA 3 Линейное взвешенное скользящее среднее.
MODE_DEMA 4 Двойная экспоненциальная скользящая средняя.
MODE_TEMA 5 Тройная экспоненциальная скользящая средняя.
MODE_T3MA 6 Скользящая средняя T3.
MODE_JMA 7 Скользящая средняя Юрика.
MODE_HMA 8 Скользящая средняя корпуса.
MODE_DECEMA 9 DECEMA Скользящая средняя.
MODE_SALT 10 Индикатор соли.
------------------------------------ *
#define MODE_DEMA 4
#define MODE_TEMA 5
#define MODE_T3MA 6
#define MODE_JMA 7
#define MODE_HMA 8
#define MODE_DECEMA 9
#define MODE_SALT 10
/* Применяемые ценовые константы:
-------------------------------
PRICE_CLOSE 0 Цена закрытия.
PRICE_OPEN 1 Цена открытия.
PRICE_HIGH 2 Высокая цена.
PRICE_LOW 3 Низкая цена.
PRICE_MEDIAN 4 Средняя цена (высокая низкая)2
PRICE_TYPICAL 5 Типичная цена (высокая низкая закрытие)3.
PRICE_WEIGHTED 6 Взвешенная цена закрытия, (максимум минимум закрытие закрытие)4.
--------------------------------- *
extern int MA_Period = 25;
extern int MA_Type = MODE_LWMA;
extern int MA_Applied = PRICE_CLOSE;
extern double T3MA_VolumeFactor = 0,8;
внешний двойной JMA_Phase = 1;
extern int Step_Period = 1;
// ----------------------------------------------- -------------------
extern int BarsCount = 20000;
extern bool Alert_On = false;
extern bool Arrows_On = false;
extern bool Email_On = false;
// ----------------------------------------------- -------------------
int UpArrowCode = 241;
int DownArrowCode = 242;
color UpArrowColor = Red;
color DownArrowColor = Blue;
int UpArrowSize = 3;
int DownArrowSize = 3;
// ----------------------------------------------- -------------------
строка pro = xpMA v11;
строка ver =;
// ----------------------------------------------- -------------------
двойной UpBuffer [];
double DownBuffer [];
двойной буф [];
двойной буфер [];
двойной темпбуфер [];
двухместные [];
двойной сигнал [];
// ----------------------------------------------- -------------------
int nShift;
двойная точка;
// ----------------------------------------------- -------------------
int init ()
{
ver = GenVer ();
DeleteObjects ();
Штамп (ver, pro - ver, 15,20);
Копия строки = C 2005-2011 XPWORX. Все права защищены.;
copy = StringSetChar (copy, 0, '©');
Штамп (авторское право, копия, 15,35);
IndiorBuffers (7);
SetIndexStyle (1, DRAW_LINE, STYLE_SOLID, 0);
SetIndexBuffer (2, UpBuffer);
SetIndexStyle (1, DRAW_LINE, STYLE_SOLID, 0);
SetIndexBuffer (1, DownBuffer);
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 0);
SetIndexBuffer (0, ЬиЕ);
SetIndexBuffer (3, сигнал);
SetIndexBuffer (4, буфер);
SetIndexBuffer (5, tempbuffer);
SetIndexBuffer (6, matriple);
SetIndexLabel (0, скользящее среднее XP);
SetIndexLabel (1, DownBuffer);
SetIndexLabel (2, UpBuffer);
SetIndexLabel (3, сигнал);
Переключатель (Период ())
{
случай 1: nShift = 5; перерыв;
случай 5: nShift = 7; перерыв;
случай 15: nShift = 10; перерыв;
случай 30: nShift = 15; перерыв;
случай 60: nShift = 20; перерыв;
дело 240: nShift = 30; перерыв;
дело 1440: nShift = 80; перерыв;
дело 10080: nShift = 150; перерыв;
дело 43200: nShift = 250; перерыв;
}
if (Digits == 2 || Digits == 3) point = 0.01;
if (Digits == 4 || Digits == 5) point = 0.0001;
Возвращение (0);
}
int deinit ()
{
DeleteObjects ();
Возвращение (0);
}
void start ()
{
int limit;
int countted_bars = IndiorCounting ();
if (countted_barslt; 0) return (-1);
if (countted_barsgt; 0) countted_bars--;
предел = Bars-counted_bars;
переключатель (MA_Type)
{
case MODE_SMA:
case MODE_EMA:
case MODE_SMMA:
case MODE_LWMA:
{
для (int i = 0; ilt; limit; i ) буфера [i] = iMA (NULL, 0, MA_Period, 0, MA_Type, MA_Applied, i);
перерыв;
}
case MODE_DEMA:
{
для (i = 0; ilt; предел; i ) темпбуфера [i] = iMA (NULL, 0, MA_Period, 0, MODE_EMA, MA_Applied, i);
для (i = 0; ilt; лимит; i ) matriple [i] = iMAOnArray (tempbuffer, 0, MA_Period, 0, MODE_EMA, i);
для буфера (i = 0; ilt; limit; i ) [i] = iMAOnArray (matriple, 0, MA_Period, 0, MODE_EMA, i);
перерыв;
}
case MODE_TEMA:
{
для (i = 0; ilt; предел; i ) темпбуфера [i] = iMA (NULL, 0, MA_Period, 0, MODE_EMA, MA_Applied, i);
для буфера (i = 0; ilt; limit; i ) [i] = iMAOnArray (tempbuffer, 0, MA_Period, 0, MODE_EMA, i);
перерыв;
}
case MODE_T3MA:
{
для буфера (i = 0; ilt; limit; i ) [i] = iCustom (NULL, 0, T3MA, MA_Period, T3MA_VolumeFactor, 0, i);
перерыв;
}
case MODE_JMA:
{
для буфера (i = 0; ilt; limit; i ) [i] = iCustom (NULL, 0, JMA, MA_Period, JMA_Phase, 0, i);
перерыв;
}
case MODE_HMA:
{
для буфера (i = 0; ilt; limit; i ) [i] = iCustom (NULL, 0, HMA, MA_Period, 0, i);
перерыв;
}
case MODE_DECEMA:
{
для буфера (i = 0; ilt; limit; i ) [i] = iCustom (NULL, 0, DECEMA_v1, MA_Period, MA_Applied, 0, i);
перерыв;
}
case MODE_SALT:
{
для буфера (i = 0; ilt; limit; i ) [i] = iCustom (NULL, 0, SATL, 0, i);
перерыв;
}
}
if (limitlt; BarsCount) BarsCount = лимит;
for (int shift = 0; shiftlt; BarsCount; shift )
{
UpBuffer [shift] = buffer [shift];
DownBuffer [shift] = buffer [shift];
buf [shift] = buffer [shift];
}
for (shift = 0; shiftlt; BarsCount; shift )
{
двойной дМА = 0;
for (int k = shift 1; k lt; = shift Step_Period; k ) dMA = buffer [k];
dMA = dMAStep_Period;
if (buffer [shift] lt; dMA) UpBuffer [shift] = EMPTY_VALUE;
иначе if (buffer [shift] gt; dMA) DownBuffer [shift] = EMPTY_VALUE;
еще
{
UpBuffer [shift] = EMPTY_VALUE;
DownBuffer [shift] = EMPTY_VALUE;
}
}
for (shift = 0; shiftlt; BarsCount-1; shift )
{
Сигнал [сдвиг] = 0;
if (UpBuffer [shift 1] == EMPTY_VALUE UpBuffer [shift]! = EMPTY_VALUE buf [shift 1]! = UpBuffer [shift])
{
if (Arrows_On shift! = 0) DrawObject (1, shift, buffer [shift] - nShift * point);
if (Arrows_On shift == 0) DrawOnce (1, shift, buffer [shift] - nShift * point, 0);
сигнал [сдвиг] = 1;
}
if (DownBuffer [shift 1] == EMPTY_VALUE DownBuffer [shift]! = EMPTY_VALUE buf [shift 1]! = DownBuffer [shift])
{
if (Arrows_On shift! = 0) DrawObject (2, shift, буфер [shift] nShift * точка);
if (Arrows_On shift == 0) DrawOnce (2, shift, буфер [shift] nShift * point, 1);
сигнал [смещение] = -1;
}
}
if (UpBuffer [1] == EMPTY_VALUE UpBuffer [0]! = EMPTY_VALUE buf [1]! = UpBuffer [0])
{
if (Alert_On) AlertOnce (Symbol () : PeriodToText () - Сигнал вверх, 1);
if (Email_On) SendMailOnce (Сигнал xpMA, Символ () : PeriodToText () - Сигнал вверх, 1);
}
if (DownBuffer [1] == EMPTY_VALUE DownBuffer [0]! = EMPTY_VALUE buf [1]! = DownBuffer [0])
{
if (Alert_On) AlertOnce (Symbol () : PeriodToText () - Сигнал вниз, 2);
if (Email_On) SendMailOnce (Сигнал xpMA, Символ () : PeriodToText () - Сигнал вниз, 2);
}
Возвращение (0);
}
bool DrawOnce (int direction, int bar, двойная цена, int ref)
{
static int LastDraw [10];
if (LastDraw [ref] == 0 || LastDraw [ref] lt; Bars)
{
DrawObject (направление, бар, цена);
LastDraw [ref] = Bars;
возврат (правда);
}
возвращать (ложь);
}
void DrawObject (int direction, int bar, double price)
{
статический int count = 0;
подсчитывать ;
строка Obj =;
if (direction == 1)/стрелка вверх
{
Obj = xpMA_up_ DoubleToStr (bar, 0);
ObjectCreate (Obj, OBJ_ARROW, 0, время [бар], цена);
ObjectSet (Obj, OBJPROP_COLOR, UpArrowColor);
ObjectSet (Obj, OBJPROP_ARROWCODE, UpArrowCode);
ObjectSet (Obj, OBJPROP_WIDTH, UpArrowSize);
}
if (direction == 2)/стрелка вниз
{
Obj = xpMA_down_ DoubleToStr (bar, 0);
ObjectCreate (Obj, OBJ_ARROW, 0, время [бар], цена);
ObjectSet (Obj, OBJPROP_COLOR, DownArrowColor);
ObjectSet (Obj, OBJPROP_ARROWCODE, DownArrowCode);
ObjectSet (Obj, OBJPROP_WIDTH, DownArrowSize);
}
WindowRedraw ();
}
void DeleteObjects ()
{
int objs = ObjectsTotal ();
имя строки;
for (int cnt = ObjectsTotal () - 1; cntgt; = 0; cnt--)
{
имя = ObjectName (НСТ);
if (StringFind (name, xpMA, 0) gt; -1) ObjectDelete (name);
if (StringFind (name, Stamp, 0) gt; -1) ObjectDelete (name);
WindowRedraw ();
}
}
bool AlertOnce (строка msg, int ref)
{
static int LastAlert [10];
if (LastAlert [ref] == 0 || LastAlert [ref] lt; Bars)
{
Оповещение (MSG);
LastAlert [ref] = Bars;
возврат (правда);
}
возвращать (ложь);
}
bool SendMailOnce (строковая тема, строковое тело, int ref)
{
static int LastAlert [10];
if (LastAlert [ref] == 0 || LastAlert [ref] lt; Bars)
{
SendMail (при условии, тело);
LastAlert [ref] = Bars;
возврат (правда);
}
возвращать (ложь);
}
Строка PeriodToText ()
{
переключатель (точка ())
{
Случай 1:
возвращать (М1);
перерыв;
дело 5:
возврата (М5);
перерыв;
дело 15:
возвращать (М15);
перерыв;
дело 30:
возврата (М30);
перерыв;
дело 60:
возврата (Н1);
перерыв;
дело 240:
возврата (Н4);
перерыв;
дело 1440:
Возвращение (D1);
перерыв;
дело 10080:
Возвращение (W1);
перерыв;
дело 43200:
возвращать (MN1);
перерыв;
}
}
void Stamp (строка objName, текст строки, int x, int y)
{
строка Obj = Stamp_ objName;
int objs = ObjectsTotal ();
имя строки;
for (int cnt = 0; cntlt; ObjectsTotal (); cnt )
{
имя = ObjectName (НСТ);
if (StringFind (name, Obj, 0) gt; -1)
{
ObjectSet (Obj, OBJPROP_XDISTANCE, х);
ObjectSet (Obj, OBJPROP_YDISTANCE, у);
WindowRedraw ();
}
еще
{
ObjectCreate (Obj, OBJ_LABEL, 0,0,0);
ObjectSetText (Obj, текст, 8, Arial, оранжевый);
ObjectSet (Obj, OBJPROP_XDISTANCE, х);
ObjectSet (Obj, OBJPROP_YDISTANCE, у);
WindowRedraw ();
}
}
if (ObjectsTotal () == 0)
{
ObjectCreate (Obj, OBJ_LABEL, 0,0,0);
ObjectSetText (Obj, текст, 8, Arial, оранжевый);
ObjectSet (Obj, OBJPROP_XDISTANCE, х);
ObjectSet (Obj, OBJPROP_YDISTANCE, у);
WindowRedraw ();
}
Возвращение (0);
}
строка GenVer ()
{
строковый метод;
if (MA_Type == 0) method = SMA;
if (MA_Type == 1) method = EMA;
if (MA_Type == 2) method = SMMA;
if (MA_Type == 3) method = LWMA;
if (MA_Type == 4) method = DEMA;
if (MA_Type == 5) method = TEMA;
if (MA_Type == 6) method = T3MA;
if (MA_Type == 7) method = JMA;
if (MA_Type == 8) method = HMA;
if (MA_Type == 9) method = DECEMA;
if (MA_Type == 10) method = SALT;
return (метод ( MAn Period));
}