안녕하세요 여러분,이 문제에 대해 약간의 도움을 드릴 수 있습니다. 코드에서 약간 조정 해 봤지만, 내 인생에서 슬로프를 조절하는 방법을 알아 내거나 버퍼링 방법을 파악하여 노란색이 조금 더 노란색으로 유지되도록 할 수는 없습니다. 나는 flexichart를 사용하여 5 초 차트를 거래하고 있으며, 추세가 고갈되고 통합 중일 때 물결이 노란색으로 바뀌길 원합니다. 나는이 설정을 현재 lwma로하고있다. 또한 색상이 거꾸로 빨간색으로 올라가고 녹색으로 변하며 각 개별 표시기를 들여다 보지 않고도 색상을 파악하지 못했습니다. 나는 분명히 프로그래머가 아니다.
다음은 지금까지 가지고있는 코드와 스크린 샷입니다.
//버전 : 11
//Last Update Date : 2011 년 5 월 23 일
// ----------------------------------------------- -------------------
//| XP 이동 평균 |
//| xpMA.mq4 |
//| 코더 스 전문가에 의해 개발 |
//|
http://www.xpworx.com|
// ----------------------------------------------- -------------------
#property link http://www.xpworx.com
// ----------------------------------------------- -------------------
#property indior_chart_window
#property indior_buffers 4
#property indior_color1 노란색
#property indior_color2 녹색
#property indior_color3 Red
#property indior_width1 1
#property indior_width2 1
#property indior_width3 1
// ----------------------------------------------- -------------------
/* 이동 평균 유형 상수 :
------------------------------------
MODE_SMA 0 단순 이동 평균,
MODE_EMA 1 지수 이동 평균,
MODE_SMMA 2 Smoothed moving average,
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_MEDIAN4 중간 가격, (높음 낮음)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;
extern double JMA_Phase = 1;
extern int Step_Period = 1;
// ----------------------------------------------- -------------------
extern int BarsCount = 20000;
extern bool Alert_On = false;
extern bool Arrows_On = 거짓;
extern bool Email_On = false;
// ----------------------------------------------- -------------------
int UpArrowCode = 241;
int DownArrowCode = 242;
color UpArrowColor = 빨강;
color DownArrowColor = 파랑;
int UpArrowSize = 3;
int DownArrowSize = 3;
// ----------------------------------------------- -------------------
string pro = xpMA v11;
string ver =;
// ----------------------------------------------- -------------------
이중 UpBuffer [];
double DownBuffer [];
이중 buf [];
더블 버퍼 [];
이중 tempbuffer [];
이중 matriple [];
이중 신호 [];
// ----------------------------------------------- -------------------
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, buf);
SetIndexBuffer (3, 신호);
SetIndexBuffer (4, 버퍼);
SetIndexBuffer (5, tempbuffer);
SetIndexBuffer (6, matriple);
SetIndexLabel (0, XP 이동 평균);
SetIndexLabel (1, DownBuffer);
SetIndexLabel (2, UpBuffer);
SetIndexLabel (3, 신호);
스위치 (마침표 ())
{
케이스 1 : n 쉬프트 = 5; 단절;
케이스 5 : n 쉬프트 = 7; 단절;
케이스 15 : n 쉬프트 = 10; 단절;
케이스 30 : n 쉬프트 = 15; 단절;
케이스 60 : n 쉬프트 = 20; 단절;
케이스 240 : nShift = 30; 단절;
케이스 1440 : nShift = 80; 단절;
case 10080 : nShift = 150; 단절;
경우 43200 : nShift = 250; 단절;
}
if (Digits == 2 || Digits == 3) point = 0.01;
if (Digits == 4 || Digits == 5) point = 0.0001;
return (0);
}
int deinit ()
{
DeleteObjects ();
return (0);
}
void start ()
{
int 한도;
int counted_bars = IndiorCounted ();
if (counted_barslt; 0) return (-1);
if (counted_barsgt; 0) counted_bars--;
limit = Bars-counted_bars;
스위치 (MA_Type)
{
case MODE_SMA :
case MODE_EMA :
case MODE_SMMA :
case MODE_LWMA :
{
for (int i = 0; ilt; limit; i ) buffer [i] = iMA (NULL, 0, MA_Period, 0, MA_Type, MA_Applied, i);
단절;
}
case MODE_DEMA :
{
tempbuffer [i] = iMA (NULL, 0, MA_Period, 0, MODE_EMA, MA_Applied, i); (i = 0, ilt;
for (i = 0, ilt, limit, i ) matriple [i] = iMAOnArray (임시 버퍼, 0, MA_Period, 0, MODE_EMA, i);
(i = 0, ilt, limit, i ) buffer [i] = iMAOnArray (matriple, 0, MA_Period, 0, MODE_EMA, i);
단절;
}
case MODE_TEMA :
{
tempbuffer [i] = iMA (NULL, 0, MA_Period, 0, MODE_EMA, MA_Applied, i); (i = 0, ilt;
버퍼 (i = 0; ilt; i ) 버퍼 [i] = iMAOnArray (temp 버퍼, 0, MA_Period, 0, MODE_EMA, i);
단절;
}
case MODE_T3MA :
{
(i = 0; ilt; i ) buffer [i] = iCustom (NULL, 0, T3MA, MA_Period, T3MA_VolumeFactor, 0, i);
단절;
}
case MODE_JMA :
{
(i = 0; ilt; i ) buffer [i] = iCustom (NULL, 0, JMA, MA_Period, JMA_Phase, 0, i);
단절;
}
case MODE_HMA :
{
(i = 0; ilt; i ) buffer [i] = iCustom (NULL, 0, HMA, MA_Period, 0, i);
단절;
}
case MODE_DECEMA :
{
(i = 0; ilt; i ) buffer [i] = iCustom (NULL, 0, DECEMA_v1, MA_Period, MA_Applied, 0, i);
단절;
}
case MODE_SALT :
{
for (i = 0; ilt; limit; i ) buffer [i] = iCustom (NULL, 0, SATL, 0, i);
단절;
}
}
if (limitlt; BarsCount) BarsCount = 제한;
for (int shift = 0; shiftlt; BarsCount; shift )
{
UpBuffer [시프트] = 버퍼 [시프트];
DownBuffer [shift] = 버퍼 [shift];
buf [shift] = 버퍼 [shift];
}
for (shift = 0; shiftlt; BarsCount; shift )
{
이중 dMA = 0;
(int k = shift 1; k lt; = shift Step_Period; k ) dMA = 버퍼 [k];
dMA = dMAStep_Period;
if (buffer [shift] lt; dMA) UpBuffer [shift] = EMPTY_VALUE;
else if (buffer [shift] gt; dMA) DownBuffer [shift] = EMPTY_VALUE;
그밖에
{
UpBuffer [shift] = EMPTY_VALUE;
DownBuffer [shift] = EMPTY_VALUE;
}
}
for (shift = 0; shiftlt; BarsCount-1; shift )
{
신호 [shift] = 0;
if (UpBuffer [shift 1] == EMPTY_VALUE UpBuffer [교대]! = EMPTY_VALUE buf [교대 1]! = UpBuffer [교대])
{
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);
신호 [shift] = 1;
}
if (DownBuffer [shift 1] == EMPTY_VALUE DownBuffer [교대]! = EMPTY_VALUE buf [교대 1]! = DownBuffer [교대])
{
if (Arrows_On shift! = 0) DrawObject (2, shift, buffer [shift] nShift * point);
if (Arrows_On shift == 0) DrawOnce (2, shift, buffer [shift] nShift * point, 1);
신호 [shift] = -1;
}
}
if (UpBuffer [1] == EMPTY_VALUE UpBuffer [0]! = EMPTY_VALUE buf [1]! = UpBuffer [0])
{
if (Alert_On) AlertOnce (Symbol () : PeriodToText () - Up 신호, 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 () - Down 신호, 2);
if (Email_On) SendMailOnce (xpMA 신호, 기호 () : PeriodToText () - 다운 신호, 2);
}
return (0);
}
bool DrawOnce (int 방향, int bar, double 가격, int 참조)
{
static int LastDraw [10];
if (LastDraw [ref] == 0 || LastDraw [ref] lt; Bars)
{
DrawObject (방향, 막대, 가격);
LastDraw [ref] = 막대;
반환 (true);
}
return (false);
}
void DrawObject (int 방향, int bar, double price)
{
정적 int 카운트 = 0;
count ;
문자열 Obj =;
if (direction == 1)/위쪽 화살표
{
Obj = xpMA_up_ DoubleToStr (bar, 0);
ObjectCreate (Obj, OBJ_ARROW, 0, Time [bar], price);
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, Time [bar], price);
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--)
{
name = ObjectName (cnt);
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] = 막대;
반환 (true);
}
return (false);
}
bool SendMailOnce (문자열 제목, 문자열 본문, int ref)
{
static int LastAlert [10];
if (LastAlert [ref] == 0 || LastAlert [ref] lt; Bars)
{
SendMail (제목, 본문);
LastAlert [ref] = 막대;
반환 (true);
}
return (false);
}
string PeriodToText ()
{
스위치 (마침표 ())
{
사례 1 :
복귀 (M1);
단절;
사례 5 :
귀환 (M5);
단절;
케이스 15 :
귀환 (M15);
단절;
사례 30 :
귀환 (M30);
단절;
케이스 60 :
귀환 (H1);
단절;
케이스 240 :
귀환 (H4);
단절;
케이스 1440 :
복귀 (D1);
단절;
귀환 (W1);
단절;
사례 43200 :
귀환 (MN1);
단절;
}
}
void Stamp (문자열 objName, 문자열 텍스트, int x, int y)
{
문자열 Obj = Stamp_ objName;
int objs = ObjectsTotal ();
문자열 이름;
for (int cnt = 0; cntlt; ObjectsTotal (); cnt )
{
name = ObjectName (cnt);
if (StringFind (name, Obj, 0) gt; -1)
{
ObjectSet (Obj, OBJPROP_XDISTANCE, x);
ObjectSet (Obj, OBJPROP_YDISTANCE, y);
WindowRedraw ();
}
그밖에
{
ObjectCreate (Obj, OBJ_LABEL, 0,0,0);
ObjectSetText (Obj, text, 8, arial, Orange);
ObjectSet (Obj, OBJPROP_XDISTANCE, x);
ObjectSet (Obj, OBJPROP_YDISTANCE, y);
WindowRedraw ();
}
}
if (ObjectsTotal () == 0)
{
ObjectCreate (Obj, OBJ_LABEL, 0,0,0);
ObjectSetText (Obj, text, 8, arial, Orange);
ObjectSet (Obj, OBJPROP_XDISTANCE, x);
ObjectSet (Obj, OBJPROP_YDISTANCE, y);
WindowRedraw ();
}
return (0);
}
string 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));
}