皆さん、こんにちは。私はこれについて少し手助けをすることができます。私はコードの中で少し事を微調整しました、しかし私の人生のために黄色がもう少し黄色のままでいるように勾配を調整する方法または緩衝する方法を理解することができません。私はflexichartを使用して5秒チャートを取引しています、そしてトレンドが燃料を使い果たしそして統合の間に黄色に変わるのを望む。私は現在これをlwmaに設定しています。さらに、色は逆に赤と緑の下になっています、そして私はそれぞれの個々のインディケータに入って変更する必要なしにどちらかを考え出していません。私は明らかにプログラマではありません。
これが私がこれまでに持っているコードとスクリーンショットです。
//バージョン:11
//最終更新日: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赤
#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 Jurik移動平均。
MODE_HMA 8ハル移動平均。
MODE_DECEMA 9 DECEMA移動平均。
MODE_SALT 10 SALTインジケータ。
------------------------------------ *
#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。
extern double 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 =赤。
color DownArrowColor =青。
int UpArrowSize = 3。
int DownArrowSize = 3。
// ----------------------------------------------- -------------------
文字列pro = xpMA v11。
文字列ver =;
// ----------------------------------------------- -------------------
double UpBuffer [];
double DownBuffer [];
double buf [];
ダブルバッファ[];
double tempbuffer [];
二重行列[];
ダブルシグナル[];
// ----------------------------------------------- -------------------
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、signal);
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:n Shift = 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制限。
int count_bars = IndiorCounted();
if(counting_barslt; 0)が(-1)を返す。
if(counting_barsgt; 0)counting_bars--;
limit = Bars-counting_bars;
スイッチ(MA_Type)
{
ケースMODE_SMA:
ケースMODE_EMA:
ケースMODE_SMMA:
ケースMODE_LWMA:
{
(int i = 0; ilt; limit; i )buffer [i] = iMA(NULL、0、MA_Period、0、MA_Type、MA_Applied、i)
ブレーク;
}
ケースMODE_DEMA:
{
(i = 0; ilt; limit; i )の場合tempbuffer [i] = iMA(NULL、0、MA_Period、0、MODE_EMA、MA_Applied、i);
(i = 0; ilt; limit; i )に対してmatriple [i] = iMAOnArray(tempbuffer、0、MA_Period、0、MODE_EMA、i);
(i = 0; itt; limit; i ++)に対して、buffer [i] = iMAOnArray(matriple、0、MA_Period、0、MODE_EMA、i)。
ブレーク;
}
ケースMODE_TEMA:
{
(i = 0; ilt; limit; i )の場合tempbuffer [i] = iMA(NULL、0、MA_Period、0、MODE_EMA、MA_Applied、i);
(i = 0; ilt; limit; i )の場合buffer [i] = iMAOnArray(tembuffer、0、MA_Period、0、MODE_EMA、i);
ブレーク;
}
ケースMODE_T3MA:
{
(i = 0; ilt; limit; i )の場合buffer [i] = iCustom(NULL、0、T3MA、MA_Period、T3MA_VolumeFactor、0、i);
ブレーク;
}
ケースMODE_JMA:
{
(i = 0; ilt; limit; i )の場合buffer [i] = iCustom(NULL、0、JMA、MA_Period、JMA_Phase、0、i);
ブレーク;
}
ケースMODE_HMA:
{
(i = 0; ilt; limit; i )の場合buffer [i] = iCustom(NULL、0、HMA、MA_Period、0、i);
ブレーク;
}
ケースMODE_DECEMA:
{
(i = 0; ilt; limit; i )の場合buffer [i] = iCustom(NULL、0、DECEMA_v1、MA_Period、MA_Applied、0、i);
ブレーク;
}
ケースMODE_SALT:
{
for(i = 0; ilt; limit; i )buffer [i] = iCustom(NULL、0、SATL、0、i);
ブレーク;
}
}
if(limitlt; BarsCount)BarsCount = limit;
for(int shift = 0; shiftlt; BarsCount; shift )
{
UpBuffer [shift] =バッファ[shift];
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 = buffer [k];
dMA = dMA /ステップ期間。
if(buffer [shift] lt; dMA)UpBuffer [shift] = EMPTY_VALUE;
そうでなければ(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、バッファ[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 * point);
if(Arrows_On shift == 0)DrawOnce(2、shift、buffer [shift] nShift * point、1);
信号[シフト] = −1。
}
}
if(UpBuffer [1] == EMPTY_VALUE UpBuffer [0]!= EMPTY_VALUE buf [1]!= UpBuffer [0])
{
if(Alert_On)AlertOnce(シンボル() : 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(シンボル() : PeriodToText() - ダウン信号、2)。
if(Email_On)SendMailOnce(xpMAシグナル、シンボル() : PeriodToText() - ダウンシグナル、2);
}
(0)を返します。
}
bool DrawOnce(int方向、intバー、ダブルプライス、int参照)
{
static int LastDraw [10];
if(LastDraw [ref] == 0 || LastDraw [ref] lt;バー)
{
DrawObject(方向、バー、価格)。
LastDraw [ref] =バー。
戻り値(true)。
}
戻り値(false)。
}
void DrawObject(int direction、int bar、ダブルプライス)
{
静的intカウント= 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();
文字列名。
(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;バー)
{
アラート(メッセージ)
LastAlert [ref] =バー。
戻り値(true)。
}
戻り値(false)。
}
ブールSendMailOnce(文字列の件名、文字列の本体、int型参照)
{
static int LastAlert [10];
if(LastAlert [ref] == 0 || LastAlert [ref] lt;バー)
{
SendMail(件名、本文)。
LastAlert [ref] =バー。
戻り値(true)。
}
戻り値(false)。
}
ストリングPeriodToText()
{
スイッチ(ピリオド())
{
ケース1:
戻る(M1)。
ブレーク;
ケース5:
戻る(M5)。
ブレーク;
ケース15:
戻る(M15)。
ブレーク;
ケース30:
戻る(M30)。
ブレーク;
ケース60:
戻る(H1)。
ブレーク;
ケース240:
戻る(H4)。
ブレーク;
ケース1440:
戻る(D1)。
ブレーク;
ケース10080:
戻る(W1)。
ブレーク;
ケース43200:
戻る(MN1)。
ブレーク;
}
}
voidスタンプ(文字列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();
}
(0)を返します。
}
ストリングGenVer()
{
文字列メソッド。
(MA_Type == 0)method = SMAの場合
(MA_Type == 1)method = EMAの場合
(MA_Type == 2)method = SMMAの場合
(MA_Type == 3)メソッド= LWMAの場合。
(MA_Type == 4)method = DEMAの場合
(MA_Type == 5)method = TEMAの場合
(MA_Type == 6)メソッド= T3MAの場合。
(MA_Type == 7)method = JMAの場合
(MA_Type == 8)method = HMAの場合
(MA_Type == 9)method = DECEMAの場合
(MA_Type == 10)method = SALTの場合
return(メソッド( MAn期間));
}