EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: pwannakit on มกราคม 28, 2014, 11:16:37 pm
-
//+------------------------------------------------------------------+
//| Pivot.mq4 |
//| Copyright ฉ 2004, Poul_Trade_Forum |
//| Aborigen |
//| http://forex.kbpauk.ru/ |
//+------------------------------------------------------------------+
#property copyright "Poul Trade Forum"
#property link "http://forex.kbpauk.ru/"
#property indicator_chart_window
//#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 Orange
#property indicator_color2 DarkBlue
#property indicator_color3 Maroon
#property indicator_color4 DarkBlue
#property indicator_color5 Maroon
#property indicator_color6 Green
#property indicator_color7 Green
//---- input parameters
//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
string Pivot="Pivot Point",Sup1="S 1", Res1="R 1";
string Sup2="S 2", Res2="R 2", Sup3="S 3", Res3="R 3";
int fontsize=10;
double P,S1,R1,S2,R2,S3,R3;
double LastHigh,LastLow,x;
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
ObjectDelete("Pivot");
ObjectDelete("Sup1");
ObjectDelete("Res1");
ObjectDelete("Sup2");
ObjectDelete("Res2");
ObjectDelete("Sup3");
ObjectDelete("Res3");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexStyle(0,DRAW_LINE,0,2,Orange);
SetIndexStyle(1,DRAW_LINE,0,2,DarkBlue);
SetIndexStyle(2,DRAW_LINE,0,2,Maroon);
SetIndexStyle(3,DRAW_LINE,0,2,DarkBlue);
SetIndexStyle(4,DRAW_LINE,0,2,Maroon);
SetIndexStyle(5,DRAW_LINE,0,2,Green);
SetIndexStyle(6,DRAW_LINE,0,2,Green);
SetIndexBuffer(0,PBuffer);
SetIndexBuffer(1,S1Buffer);
SetIndexBuffer(2,R1Buffer);
SetIndexBuffer(3,S2Buffer);
SetIndexBuffer(4,R2Buffer);
SetIndexBuffer(5,S3Buffer);
SetIndexBuffer(6,R3Buffer);
//---- name for DataWindow and indicator subwindow label
short_name="Pivot_Point_X";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
SetIndexDrawBegin(0,1);
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit, i;
//---- indicator calculation
if (counted_bars==0)
{
x=Period();
if (x>240) return(-1);
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot Point",fontsize,"Arial",Red);
ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup1", " S 1",fontsize,"Arial",Red);
ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res1", " R 1",fontsize,"Arial",Red);
ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup2", " S 2",fontsize,"Arial",Red);
ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res2", " R 2",fontsize,"Arial",Red);
ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Sup3", " S 3",fontsize,"Arial",Red);
ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("Res3", " R 3",fontsize,"Arial",Red);
}
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
// if(counted_bars>0) counted_bars--;
limit=(Bars-counted_bars)-1;
for (i=limit; i>=0;i--)
{
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
if (TimeDay(Time)!=TimeDay(Time[i+1]))
{
P=(LastHigh+LastLow+Close[i+1])/3;
R1 = (2*P)-LastLow;
S1 = (2*P)-LastHigh;
R2 = P+(LastHigh - LastLow);
S2 = P-(LastHigh - LastLow);
R3 = (2*P)+(LastHigh-(2*LastLow));
S3 = (2*P)-((2* LastHigh)-LastLow);
LastLow=Open; LastHigh=Open;
ObjectMove("Pivot", 0, Time,P);
ObjectMove("Sup1", 0, Time,S1);
ObjectMove("Res1", 0, Time,R1);
ObjectMove("Sup2", 0, Time,S2);
ObjectMove("Res2", 0, Time,R2);
ObjectMove("Sup3", 0, Time,S3);
ObjectMove("Res3", 0, Time,R3);
}
PBuffer=P;
S1Buffer=S1;
R1Buffer=R1;
S2Buffer=S2;
R2Buffer=R2;
S3Buffer=S3;
R3Buffer=R3;
}
//----
return(0);
}
//+------------------------------------------------------------------+
ปล* อยากดึงค่า P,S1,R1,S2,R2,S3,R3 มาใช้นะครับ
เคยเขียนแบบนี้ P=iCustom(NULL, 0, "Pivot_Point_X",0,0) แต่มันใช้ไม่ได้ครับ
-
คุณต้องเขียน code ให้มันเรียกค่า shift ของ Buffer ครับถึงจะเจอค่าที่คุณต้องการ จากตัวอย่างที่คุณยกมาเรียกแค่ตัวเดียวครับแต่ buffer ของ indicator มี 8 ตัวครับ
-
ใช้งานได้แล้วครับ ขอบคุณมากครับ
-
ผมขอถามต่อจากหัวข้อนี้เลยนะครับ ผมมือใหม่ครับ
ถ้าผมจะให้มันเปิดออเดอร์ สมมุต #property indicator_color7 Green
ถ้าตัวนี้มันเกิดเป็นสีเขียวปั๊บ เราจะใช้คำสั่งอะไรดึงค่าออกมา
หรือทำอย่างไง ให้เขียวแล้วมันเปิดออเดอร์อะครับ รบกวนด้วยครับ :)
-
ข้อมูลไม่พอครับ code ที่ว่าเป้นส่วนการกำหนด สี เฉยๆๆคุณต้องไปดูครับว่า ตัว สีเงขียวมันใช้ buffer ตัวที่เราไรครับเราจึงใช้ icustom ดึงค่ามันออกมาใช้งานได้ครับ
-
ผมรบกวนด้วยครับท่าน ผมจะใช้ #property indicator_color5 White เป็นสีขาวให้เปิด Buy
#property indicator_color6 Red เป็นสีแดงให้เปิด Sell
ผมต้องเรียกค่ามันอย่างไรครับท่าน
-
ขอ code indi คุณมาดูหน่อยครับถึงจะตอบได้ครับ
-
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Lime
#property indicator_color2 OrangeRed
#property indicator_color3 Yellow
#property indicator_color4 Yellow
#property indicator_color5 White
#property indicator_color6 Red
extern double Period1 = 5.0;
extern double Period2 = 12.0;
extern double Period3 = 35.0;
extern string Dev_Step_1 = "5,3";
extern string Dev_Step_2 = "5,3";
extern string Dev_Step_3 = "5,3";
extern int Symbol_1_Kod = 159;
extern int Symbol_2_Kod = 159;
extern int Symbol_3_Kod = 82;
extern string _____ = "";
extern bool Box.Alerts = FALSE;
extern bool Email.Alerts = FALSE;
extern bool Sound.Alerts = TRUE;
extern bool Alert.Lv1 = FALSE;
extern bool Alert.Lv2 = TRUE;
extern bool Alert.Lv3 = TRUE;
string Gs_168 = "stage one level high.wav";
string Gs_176 = "stage one level low.wav";
string Gs_184 = "stage two level high.wav";
string Gs_192 = "stage two level low.wav";
string Gs_200 = "stage three level high.wav";
string Gs_208 = "stage three level low.wav";
double G_ibuf_216[];
double G_ibuf_220[];
double G_ibuf_224[];
double G_ibuf_228[];
double G_ibuf_232[];
double G_ibuf_236[];
int Gi_unused_240;
int Gi_unused_244;
int Gi_unused_248;
int Gi_252;
int Gi_256;
int Gi_260;
int Gi_264;
int Gi_268;
int Gi_272;
string Gs_276;
string Gs_284;
string Gs_292;
int G_digits_300;
int G_timeframe_304;
bool Gi_308;
bool Gi_312;
bool Gi_316;
int G_bars_320 = -1;
int Gi_unused_324 = 65535;
int init() {
int Lia_8[];
G_timeframe_304 = Period();
Gs_284 = TimeFrameToString(G_timeframe_304);
Gs_276 = Symbol();
G_digits_300 = Digits;
Gs_292 = "tbb" + Gs_276 + Gs_284;
if (Period1 > 0.0) Gi_unused_240 = MathCeil(Period1 * Period());
else Gi_unused_240 = 0;
if (Period2 > 0.0) Gi_unused_244 = MathCeil(Period2 * Period());
else Gi_unused_244 = 0;
if (Period3 > 0.0) Gi_unused_248 = MathCeil(Period3 * Period());
else Gi_unused_248 = 0;
if (Period1 > 0.0) {
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, Symbol_1_Kod);
SetIndexBuffer(0, G_ibuf_216);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, Symbol_1_Kod);
SetIndexBuffer(1, G_ibuf_220);
SetIndexEmptyValue(1, 0.0);
}
if (Period2 > 0.0) {
SetIndexStyle(2, DRAW_ARROW);
SetIndexArrow(2, Symbol_2_Kod);
SetIndexBuffer(2, G_ibuf_224);
SetIndexEmptyValue(2, 0.0);
SetIndexStyle(3, DRAW_ARROW);
SetIndexArrow(3, Symbol_2_Kod);
SetIndexBuffer(3, G_ibuf_228);
SetIndexEmptyValue(3, 0.0);
}
if (Period3 > 0.0) {
SetIndexStyle(4, DRAW_ARROW);
SetIndexArrow(4, Symbol_3_Kod);
SetIndexBuffer(4, G_ibuf_232);
SetIndexEmptyValue(4, 0.0);
SetIndexStyle(5, DRAW_ARROW);
SetIndexArrow(5, Symbol_3_Kod);
SetIndexBuffer(5, G_ibuf_236);
SetIndexEmptyValue(5, 0.0);
}
int Li_unused_0 = 0;
int Li_unused_4 = 0;
int Li_12 = 0;
if (IntFromStr(Dev_Step_1, Li_12, Lia_8) == 1) {
Gi_256 = Lia_8[1];
Gi_252 = Lia_8[0];
}
if (IntFromStr(Dev_Step_2, Li_12, Lia_8) == 1) {
Gi_264 = Lia_8[1];
Gi_260 = Lia_8[0];
}
if (IntFromStr(Dev_Step_3, Li_12, Lia_8) == 1) {
Gi_272 = Lia_8[1];
Gi_268 = Lia_8[0];
}
return (0);
}
int deinit() {
return (0);
}
int start() {
string Ls_0;
if (Bars != G_bars_320) {
Gi_308 = TRUE;
Gi_312 = TRUE;
Gi_316 = TRUE;
}
if (Period1 > 0.0) CountZZ(G_ibuf_216, G_ibuf_220, Period1, Gi_252, Gi_256);
if (Period2 > 0.0) CountZZ(G_ibuf_224, G_ibuf_228, Period2, Gi_260, Gi_264);
if (Period3 > 0.0) CountZZ(G_ibuf_232, G_ibuf_236, Period3, Gi_268, Gi_272);
string Ls_8 = Gs_276 + " " + Gs_284 + " at " + DoubleToStr(Close[0], G_digits_300);
if (Gi_308 && Alert.Lv1) {
if (G_ibuf_216[0] != 0.0) {
Gi_308 = FALSE;
Ls_0 = " ZZS: Level 1 Low; ";
if (Box.Alerts) Alert(Ls_0, Ls_8);
if (Email.Alerts) SendMail(Ls_0, Ls_8);
if (Sound.Alerts) PlaySound(Gs_176);
}
if (G_ibuf_220[0] != 0.0) {
Gi_308 = FALSE;
Ls_0 = " ZZS: Level 1 High; ";
if (Box.Alerts) Alert(Ls_0, Ls_8);
if (Email.Alerts) SendMail(Ls_0, Ls_8);
if (Sound.Alerts) PlaySound(Gs_168);
}
}
if (Gi_312 && Alert.Lv2) {
if (G_ibuf_224[0] != 0.0) {
Gi_312 = FALSE;
Ls_0 = " ZZS: Level 2 Low; ";
if (Box.Alerts) Alert(Ls_0, Ls_8);
if (Email.Alerts) SendMail(Ls_0, Ls_8);
if (Sound.Alerts) PlaySound(Gs_192);
}
if (G_ibuf_228[0] != 0.0) {
Gi_312 = FALSE;
Ls_0 = " ZZS: Level 2 High; ";
if (Box.Alerts) Alert(Ls_0, Ls_8);
if (Email.Alerts) SendMail(Ls_0, Ls_8);
if (Sound.Alerts) PlaySound(Gs_184);
}
}
if (Gi_316 && Alert.Lv3) {
if (G_ibuf_232[0] != 0.0) {
Gi_316 = FALSE;
Ls_0 = " ZZS: Level 3 Low; ";
if (Box.Alerts) Alert(Ls_0, Ls_8);
if (Email.Alerts) SendMail(Ls_0, Ls_8);
if (Sound.Alerts) PlaySound(Gs_208);
}
if (G_ibuf_236[0] != 0.0) {
Gi_316 = FALSE;
Ls_0 = " ZZS: Level 3 High; ";
if (Box.Alerts) Alert(Ls_0, Ls_8);
if (Email.Alerts) SendMail(Ls_0, Ls_8);
if (Sound.Alerts) PlaySound(Gs_200);
}
}
G_bars_320 = Bars;
return (0);
}
string TimeFrameToString(int Ai_0) {
string Ls_ret_4;
switch (Ai_0) {
case 1:
Ls_ret_4 = "M1";
break;
case 5:
Ls_ret_4 = "M5";
break;
case 15:
Ls_ret_4 = "M15";
break;
case 30:
Ls_ret_4 = "M30";
break;
case 60:
Ls_ret_4 = "H1";
break;
case 240:
Ls_ret_4 = "H4";
break;
case 1440:
Ls_ret_4 = "D1";
break;
case 10080:
Ls_ret_4 = "W1";
break;
case 43200:
Ls_ret_4 = "MN";
}
return (Ls_ret_4);
}
int CountZZ(double &Ada_0[], double &Ada_4[], int Ai_8, int Ai_12, int Ai_16) {
double Ld_36;
double Ld_44;
double Ld_52;
double Ld_60;
double Ld_68;
double Ld_76;
for (int Li_20 = Bars - Ai_8; Li_20 >= 0; Li_20--) {
Ld_36 = Low[iLowest(NULL, 0, MODE_LOW, Ai_8, Li_20)];
if (Ld_36 == Ld_76) Ld_36 = 0.0;
else {
Ld_76 = Ld_36;
if (Low[Li_20] - Ld_36 > Ai_12 * Point) Ld_36 = 0.0;
else {
for (int Li_24 = 1; Li_24 <= Ai_16; Li_24++) {
Ld_44 = Ada_0[Li_20 + Li_24];
if (Ld_44 != 0.0 && Ld_44 > Ld_36) Ada_0[Li_20 + Li_24] = 0.0;
}
}
}
Ada_0[Li_20] = Ld_36;
Ld_36 = High[iHighest(NULL, 0, MODE_HIGH, Ai_8, Li_20)];
if (Ld_36 == Ld_68) Ld_36 = 0.0;
else {
Ld_68 = Ld_36;
if (Ld_36 - High[Li_20] > Ai_12 * Point) Ld_36 = 0.0;
else {
for (Li_24 = 1; Li_24 <= Ai_16; Li_24++) {
Ld_44 = Ada_4[Li_20 + Li_24];
if (Ld_44 != 0.0 && Ld_44 < Ld_36) Ada_4[Li_20 + Li_24] = 0.0;
}
}
}
Ada_4[Li_20] = Ld_36;
}
Ld_68 = -1;
int Li_28 = -1;
Ld_76 = -1;
int Li_32 = -1;
for (Li_20 = Bars - Ai_8; Li_20 >= 0; Li_20--) {
Ld_52 = Ada_0[Li_20];
Ld_60 = Ada_4[Li_20];
if (Ld_52 == 0.0 && Ld_60 == 0.0) continue;
if (Ld_60 != 0.0) {
if (Ld_68 > 0.0) {
if (Ld_68 < Ld_60) Ada_4[Li_28] = 0;
else Ada_4[Li_20] = 0;
}
if (Ld_68 < Ld_60 || Ld_68 < 0.0) {
Ld_68 = Ld_60;
Li_28 = Li_20;
}
Ld_76 = -1;
}
if (Ld_52 != 0.0) {
if (Ld_76 > 0.0) {
if (Ld_76 > Ld_52) Ada_0[Li_32] = 0;
else Ada_0[Li_20] = 0;
}
if (Ld_52 < Ld_76 || Ld_76 < 0.0) {
Ld_76 = Ld_52;
Li_32 = Li_20;
}
Ld_68 = -1;
}
}
for (Li_20 = Bars - 1; Li_20 >= 0; Li_20--) {
if (Li_20 >= Bars - Ai_8) Ada_0[Li_20] = 0.0;
else {
Ld_44 = Ada_4[Li_20];
if (Ld_44 != 0.0) Ada_4[Li_20] = Ld_44;
}
}
return (0);
}
int Str2Massive(string As_0, int &Ai_8, int &Aia_12[]) {
int Li_20;
int str2int_16 = StrToInteger(As_0);
if (str2int_16 > 0) {
Ai_8++;
Li_20 = ArrayResize(Aia_12, Ai_8);
if (Li_20 == 0) return (-1);
Aia_12[Ai_8 - 1] = str2int_16;
return (1);
}
return (0);
}
int IntFromStr(string As_0, int &Ai_8, int Aia_12[]) {
string Ls_28;
if (StringLen(As_0) == 0) return (-1);
string Ls_16 = As_0;
int Li_24 = 0;
Ai_8 = 0;
ArrayResize(Aia_12, Ai_8);
while (StringLen(Ls_16) > 0) {
Li_24 = StringFind(Ls_16, ",");
if (Li_24 > 0) {
Ls_28 = StringSubstr(Ls_16, 0, Li_24);
Ls_16 = StringSubstr(Ls_16, Li_24 + 1, StringLen(Ls_16));
} else {
if (StringLen(Ls_16) > 0) {
Ls_28 = Ls_16;
Ls_16 = "";
}
}
if (Str2Massive(Ls_28, Ai_8, Aia_12) == 0) return (-2);
}
return (1);
}
ตามนี้เลยครับท่าน รบกวนด้วยนะครับ :) :)
-
double val1=iCustom(NULL,0,"เอา ชื่อ indicator มาใส่",4,0); // สีขาว
double val2=iCustom(NULL,0,"เอา ชื่อ indicator มาใส่",5,0); // สีแดง
-
ขอบคุณ Admin มากครับ :) :)