EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: lovelove on กุมภาพันธ์ 16, 2011, 06:16:26 pm
-
rderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastprofit=OrderProfit();
if(lastprofit < 0.00 )
{
Lots = NormalizeDouble(OL*2, 2); //เลขสอง สองตัวนี้คืออะไรครับ
}
else
{
Lots = 0.1;
}
return(0);
}
++++++++++++++++++++++++++++++++++++++++++
ถ้าผมจะเขียนโคดว่า
-ออเด้อเเรกเทรดที่ 0.1 ล็อต
-ถ้าออเด้อแรกเสีย ออเด้อที่2ให้เบิ้ลล็อต
-ถ้าออเด้อที่2เสีย ออเด้อที่3ให้เบิลล็อด ถ้าเสียต่อเนื่องก้อให้เบิ้ลต่อไปเรื่อยๆ
ถ้าออเด้อที่3 ได้ ออเด้อที่4 ให้กลับไปเทรดที่ 0.1ลอตเหมือนเดิม
เขียนยังไงครับ รบกวนขอโคตด้วยครับ พึ่งหัดเขียนครับ
-
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(TimeCurrent()-OrderOpenTime()>300)
{
int type = OrderType();
bool result = false;
switch(type)
{
case OP_BUY : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
break;
case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
}
}}
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastprofit=OrderProfit();
if(lastprofit < 0.0 )
{
Lots = NormalizeDouble(OL*2, 2);
}
else
{
Lots = 0.1;
}
return(0);
}
/////
ไม่แน่ใจว่าถุกหรือเปล่าช่วยดูด้วยครับ กอปมาจากหลายที่ :)
-
อยากให้ code มันทำงานลักษณไหนหรอครับ บอกรายละเอียดนิดหนึ่งครับ
-
ตามนี้เลยครับ
หากออเด้อเเรกเทรดที่ 0.1 ล็อต
-ถ้าออเด้อแรกเสีย ออเด้อที่2ให้เบิ้ลล็อต
-ถ้าออเด้อที่2เสีย ออเด้อที่3ก็ให้เบิลล็อด //ถ้าเสียต่อเนื่องก้อให้เบิ้ลต่อไปเรื่อยๆ
ถ้าออเด้อที่3 ได้ ออเด้อที่4 ให้กลับไปเทรดที่ 0.1ลอตเหมือนเดิมครับผม
ขอบคุณครับ
-
ตามนี้เลยครับ
หากออเด้อเเรกเทรดที่ 0.1 ล็อต
-ถ้าออเด้อแรกเสีย ออเด้อที่2ให้เบิ้ลล็อต
-ถ้าออเด้อที่2เสีย ออเด้อที่3ก็ให้เบิลล็อด //ถ้าเสียต่อเนื่องก้อให้เบิ้ลต่อไปเรื่อยๆ
ถ้าออเด้อที่3 ได้ ออเด้อที่4 ให้กลับไปเทรดที่ 0.1ลอตเหมือนเดิมครับผม
ขอบคุณครับ
extern double lot =0.1;
extern double sl =45;
extern double tp =45;
extern int MaxOrder =1;
int start() {
if(OrdersTotal()<MaxOrder)
{
double var1 = 0.00025;
double var2 = -0.00025;
double ma1 =iMA(NULL,0,10,0,MODE_SMMA,PRICE_MEDIAN,0);
double ma2 =iMA(NULL,0,20,0,MODE_SMMA,PRICE_MEDIAN,0);
double min = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
double sig = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastlot=OrderLots();
double lastprofit=OrderProfit();
double lastlot2=lastlot*2;
if((lastprofit<0))
{
if ((min<=0))
{
if ((sig <=0)&&(ma2>ma1))
{
if ((sig-var1)>=min)
{OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
if ((min>=-0))
{
if ((sig>=-0)&&(ma2<ma1))
{
if ((sig+var1)<=min)
{OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
}
}
}
else
{
if ((min<=0))
{
if ((sig <=0)&&(ma2>ma1))
{
if ((sig-var1)>=min)
{OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
if ((min>=-0))
{
if ((sig>=-0)&&(ma2<ma1))
{
if ((sig+var1)<=min)
{OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);}
}
}
}
}}
return(0) ;
}
ลองเอาตัวนี้ไปใช้ดูนะคับ แต่ระวังนะคับ การเบิ้ลลอต ถ้าทุนไม่มากพอ ล้างพอตอย่างเดียวคับ ให้ลองเทรสดูก่อนคับ ลองปรับค่าต่าง ๆ ให้ดีนะคับ
ปล. ระวังซิบหายวายวอด EA เบิ่ลลอดอะ :'( :'( :'( :'( :'( :'( :'( :'( :'(
-
ขอบคุณครับ ;D
-
จากโคดเบิลล็อตด้านบน ถ้าโปรฟิตเท่ากับ 0 มันไม่ยอมเบิ้ลให้ครับ
ผมลองแก้เป็นแบบนี้ครับ if((lastprofit<=0))มันไม่เปิดออเด้อครับ
แล้วก้อแก้เป็น if((lastprofit<0)&& ((lastprofit==0))
มันก้อไม่ทำงานอีก ทำไงดีครับ รบกวนแอดมินและเพื่อนๆ ด้วยครับ
-
if(lastprofit<=0 ) ลองแบบนี้ก็น่าจะได้นะครับ
แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ
-
if(lastprofit<=0 ) ลองแบบนี้ก็น่าจะได้นะครับ
แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ
ลอลแล้วครับแอดมิน ไม่ได้เลยครับ มันไม่ยอมเปิดออเด้อให้ครับ ทำไงดีครับ
ออเด้อที่1 เสีย
ที่2 เบิ้ล
ที่3 เบิ้ลเสียอีก
ที่4 ออเด้อปิดที่ 0 โปรฟิต
ที่5 มันไม่เบิ้ลต่อ แต่กับมาเทรดที่ 0.1 ล็อตต่อ ขาดทุนตรงนี้แหละครับ
-
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)
-
if(lastprofit<=0 ) ลองแบบนี้ก็น่าจะได้นะครับ
แต่เขียนแบบนี้ไม่ได้ if((lastprofit<0)&& ((lastprofit==0))
เพราะ && คือเครื่องหมาย และ มันต้องเป็นจริงทั้ง 2 กรณีถึงทำงาน ถ้าจะเขีบนแบบนี้ต้องใช้แบบนี้
if( (lastprofit<0) ) || ((lastprofit==0))
ใช้เครื่องหมาย หรือแทนครับ
ลอลแล้วครับแอดมิน ไม่ได้เลยครับ มันไม่ยอมเปิดออเด้อให้ครับ ทำไงดีครับ
ออเด้อที่1 เสีย
ที่2 เบิ้ล
ที่3 เบิ้ลเสียอีก
ที่4 ออเด้อปิดที่ 0 โปรฟิต
ที่5 มันไม่เบิ้ลต่อ แต่กับมาเทรดที่ 0.1 ล็อตต่อ ขาดทุนตรงนี้แหละครับ
เอา code คุณมาโพสให้หน่อยครับจะได้ช่วยกันหาว่าทำไมมัน error ครับ
-
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)
ขอบคุณครับ ได้แล้วครับ
เอา code คุณมาโพสให้หน่อยครับจะได้ช่วยกันหาว่าทำไมมัน error ครับ
++++++++++
extern double lot =0.1;
extern double sl =45;
extern double tp =45;
extern int MaxOrder =1;
int start() {
if(OrdersTotal()<MaxOrder)
{
double var1 = 0.00025;
double var2 = -0.00025;
double ma1 =iMA(NULL,0,10,0,MODE_SMMA,PRICE_MEDIAN,0);
double ma2 =iMA(NULL,0,20,0,MODE_SMMA,PRICE_MEDIAN,0);
double min = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
double sig = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastlot=OrderLots();
double lastprofit=OrderProfit();
double lastlot2=lastlot*2;
if(lastprofit< lastlot*10)
{
if ((min<=0))
{
if ((sig <=0)&&(ma2>ma1))
{
if ((sig-var1)>=min)
{OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
if ((min>=-0))
{
if ((sig>=-0)&&(ma2<ma1))
{
if ((sig+var1)<=min)
{OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
}
}
}
else
{
if ((min<=0))
{
if ((sig <=0)&&(ma2>ma1))
{
if ((sig-var1)>=min)
{OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
if ((min>=-0))
{
if ((sig>=-0)&&(ma2<ma1))
{
if ((sig+var1)<=min)
{OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);}
}
}
}
}}
return(0) ;
}
-
ลองแบบนี้ครับ
if(lastprofit< lastlot*10)
if((lastprofit< lastlot*10))
จากโคดด้านบน ถ้าโปรฟิตเท่ากับ 0 มันก้อเบิ้ลล็อตให้ เยี่ยมไปเลยครับ
แล้ว ถ้าเราจะเปลี่ยนใหม่เป็น
ถ้าไม่ถึงโปรฟิตที่กำหนดก้อให้เบิ้ลล่ะครับ หมายถึง ถ้ามันไม่ชนทาเก็ตน่ะครับ คือ ถ้าเราปิดออเด้อก่อนและ + มากกว่า 0 แต่ไม่ถึงทาเก็ต ก้อให้เบิ้ลล็อตอีก
เราจะเขียนโคดว่ายังๆไงครับ
ผมลอง if(lastprofit < 10)
if((lastprofit< lastlot*10)||(lastprofit < 10))ทั้งหรือทั้งและ
มันไม่ยอมเปิดออเด้อให้ครับ
-
ที่ไม่เปิดออเดอร์นี่คือ ออเดอร์แรกเปิด แต่ถ้าปิดไม่ถึง tp จะไม่เบิ้ลใช่มั้ยครับ อ่านแล้วยังงง
ถ้าดูจากโค้ด ไม่ปิด TP ก็ต้องปิด SL เพราะมีแต่คำสั่งเปิดออเดอร์ ไม่มีคำสั่งปิดออเดอร์ หรือว่าปิดมือเอาครับ
-
ลองแก้ดูเองนะครับ ผมจะขออธิบายเงื่อนไขนี้ให้
if(lastprofit< lastlot*10)
เบิ้ลต่อ
else
ไม่เบิ้ล
จากเงื่อนไข lastprofit คือ profit ของออเดอร์ล่าสุด ที่เราปิดไปแล้ว จะปิดมือหรืออีเอก็ตาม จะต้องน้อยกว่า lastlot*10 ถึงจะเบิ้ล
ทำไมผมถึงเขียนแบบนั้น สมมุติเทรด 0.1ลอต คูณ10 ก็จะได้ 1 ซึ่งถ้าเทรด 0.1ลอต 1จุดก็จะมีไรเท่ากับ 1 แปลง่ายๆว่า
lastprofit< lastlot*10 กำไรของออเดอร์ล่าสุด จะต้องน้อยกว่า 1 จุด แต่ต้องเขียนแบบนี้ เพราะกำไรนับเป็น $ ไม่ได้นับเป็นจุด
น้อยกว่า 1 จุด ก็คือ 0 นั่นแหละครับ แต่ทำไมถ้าเขียน lastprofit = 0 มันจะใช้ไม่ได้ เพราะจริงๆแล้วมันไม่ได้ปิด +0 เป๊ะๆ มันอาจจะปิด +0.000001 ซึ่ง mt4 มันปัดให้เราเห็นเป็น 0 เขียนแบบนี้จึงเกิดบั๊กได้
ดังนั้นถ้าจะบอกว่า ถ้าปิดน้อยกว่า TP ให้เบิ้ล ก็เอา TP ไปคูณ
if(lastprofit< lastlot*TP*10) ----ของเดิมคือ 1จุด คูณ TP เข้าไป ก็กลายเป็น TPจุด แต่เขียนแบบนี้ก็มีปัญหาอีกครับ เพราะมันอาจจะไม่ได้ปิดเท่า TP เป๊ะๆ
ลองคิดดูเองก่อน ไม่ได้ค่อยเฉลย
-
ลองเอาแบบนี้นะคับ
น่าจะได้
if(lastprofit< lastlot*sl)
ลองดูนะคับไม่รู้ว่าได้หรือเปล่า
-
ลองแก้ดูเองนะครับ ผมจะขออธิบายเงื่อนไขนี้ให้
if(lastprofit< lastlot*10)
เบิ้ลต่อ
else
ไม่เบิ้ล
จากเงื่อนไข lastprofit คือ profit ของออเดอร์ล่าสุด ที่เราปิดไปแล้ว จะปิดมือหรืออีเอก็ตาม จะต้องน้อยกว่า lastlot*10 ถึงจะเบิ้ล
ทำไมผมถึงเขียนแบบนั้น สมมุติเทรด 0.1ลอต คูณ10 ก็จะได้ 1 ซึ่งถ้าเทรด 0.1ลอต 1จุดก็จะมีไรเท่ากับ 1 แปลง่ายๆว่า
lastprofit< lastlot*10 กำไรของออเดอร์ล่าสุด จะต้องน้อยกว่า 1 จุด แต่ต้องเขียนแบบนี้ เพราะกำไรนับเป็น $ ไม่ได้นับเป็นจุด
น้อยกว่า 1 จุด ก็คือ 0 นั่นแหละครับ แต่ทำไมถ้าเขียน lastprofit = 0 มันจะใช้ไม่ได้ เพราะจริงๆแล้วมันไม่ได้ปิด +0 เป๊ะๆ มันอาจจะปิด +0.000001 ซึ่ง mt4 มันปัดให้เราเห็นเป็น 0 เขียนแบบนี้จึงเกิดบั๊กได้
ดังนั้นถ้าจะบอกว่า ถ้าปิดน้อยกว่า TP ให้เบิ้ล ก็เอา TP ไปคูณ
if(lastprofit< lastlot*TP*10) ----ของเดิมคือ 1จุด คูณ TP เข้าไป ก็กลายเป็น TPจุด แต่เขียนแบบนี้ก็มีปัญหาอีกครับ เพราะมันอาจจะไม่ได้ปิดเท่า TP เป๊ะๆ
ลองคิดดูเองก่อน ไม่ได้ค่อยเฉลย
+++++++++++++++++++++++++++
ผมนึกยังไม่ออกเลยครับ :'(
ลองเอาแบบนี้นะคับ
น่าจะได้
if(lastprofit< lastlot*sl)
ลองดูนะคับไม่รู้ว่าได้หรือเปล่า
ยังไม่ได้ครับ.. ;)
++++++++++++++++++++
ออเด้อที่ 1 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้ แต่ไม่ชน tp ไม่เบิ้ลล็อตต่อ
ออเด้อที่ 6 กลับมาเทรดที่ 0.1 เหมือนเดิม
++++++++++++++
ออเด้อ ที่ 5 จำนวนโปรฟิตที่ได้กับเสียมันไม่เท่ากัน
ปัญหามันอยู่ที่ตรงนี้ครับ เลยอยากให้เบิ้ลต่อ
++++++++
เวลาผมเอามาเทส ผมเห็นปัญหา ถ้านึกไม่ออก ผมก็ขอถามเลยนะครับ ขอบคุณพี่ๆทุกคนและแอดมินครับ
+++++++++++++++++++++++++++++++++++++++++++
ผมลองเปลี่ยนเป็น if(((lastprofit< lastlot*10))&&(lastprofit< tp)) ก็ยังไม่ได้ครับ
++++++
ผมลองเปลี่ยนเป็น if(((lastprofit< lastlot*100)) เบิ้ลไม่หยุดเลยครับ เบิ้ลต่อเนื่องเลยครับ
+++
if(((lastprofit< lastlot*10))||((lastprofit< lastlot*100))) ก็ยังไม่ได้ครับ
-
ปัญหาคุณคือ order ที่5 ใช้ไหมเพราะว่า order ที่ 4 มีการขบได้ 2 แบบแล้วเปิด lot ของ order ที่5 ต่างกันใช่ไหมเพราะผมอ่านแล้วยังงง เลยถามก่อนว่าปัญหาคุณคือตรงนี้ใช่ไหม
-
แบที่คุณ D_Diamond บอก น่าจะถูกแล้วคับ
ลองแบบนี้คับ
if(lastprofit< lastlot*tp*10) ------->ที่โค๊ส TP ต้องเป็นตัวพิมพ์เล็ก tp เพราะตอนแรกกำหนดค่าเป็นตัวพิมพ์เล็กอะคับ------
หรือว่าแบบนี้
if(lastprofit< lastlot*sl*10)
น่าจะได้นะคับถ้าไม่ได้จริงๆ เดี๋ยวจะลองหาให้ใหม่
-
แบที่คุณ D_Diamond บอก น่าจะถูกแล้วคับ
ลองแบบนี้คับ
if(lastprofit< lastlot*tp*10) ------->ที่โค๊ส TP ต้องเป็นตัวพิมพ์เล็ก tp เพราะตอนแรกกำหนดค่าเป็นตัวพิมพ์เล็กอะคับ------
หรือว่าแบบนี้
if(lastprofit< lastlot*sl*10)
น่าจะได้นะคับถ้าไม่ได้จริงๆ เดี๋ยวจะลองหาให้ใหม่
ลองแล้วครับเบิ้ลไม่หยุดเลยครับ
ปัญหาคุณคือ order ที่5 ใช้ไหมเพราะว่า order ที่ 4 มีการขบได้ 2 แบบแล้วเปิด lot ของ order ที่5 ต่างกันใช่ไหมเพราะผมอ่านแล้วยังงง เลยถามก่อนว่าปัญหาคุณคือตรงนี้ใช่ไหม
ครับผม
-
ผมมีข้อสงสัย ในเมื่อโค้ดของอีเอ มีแต่คำสั่ง เปิดออเดอร์+TP+SL แต่ไม่มีคำสั่ง ปิดออเดอร์
++++++++++++++++++++
ออเด้อที่ 1 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้ แต่ไม่ชน tp ไม่เบิ้ลล็อตต่อ
ออเด้อที่ 6 กลับมาเทรดที่ 0.1 เหมือนเดิม
++++++++++++++
1.แล้วออเดอร์ที่ 4 ปิด 0ได้ยังไง ออเดอร์ที่5 ปิดไม่ชน TP ได้ยังไง?
2.ณ ตอนนี้ ความต้องของคือ ปิดตรงไหนก็ต้องเบิ้ล ยกเว้นชน TP กลับไปเริ่มใหม่ ใช่ไหมครับ?
-
ผมมีข้อสงสัย ในเมื่อโค้ดของอีเอ มีแต่คำสั่ง เปิดออเดอร์+TP+SL แต่ไม่มีคำสั่ง ปิดออเดอร์
++++++++++++++++++++
ออเด้อที่ 1 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้ แต่ไม่ชน tp ไม่เบิ้ลล็อตต่อ
ออเด้อที่ 6 กลับมาเทรดที่ 0.1 เหมือนเดิม
++++++++++++++
1.แล้วออเดอร์ที่ 4 ปิด 0ได้ยังไง ออเดอร์ที่5 ปิดไม่ชน TP ได้ยังไง?
2.ณ ตอนนี้ ความต้องของคือ ปิดตรงไหนก็ต้องเบิ้ล ยกเว้นชน TP กลับไปเริ่มใหม่ ใช่ไหมครับ?
ตอบครับ
1) ตั่งเวลาปิดครับ และ ตั่ง tpและsl สั้นระหว่าง 3- 15 ครับ เพราะถ้าตั้งเยอะคงจะกินมาจิ้นเยอะ
2) ใช่ครับ ติดลบก็เบิ้ล เท่ากับ 0 ก้เบิ้ล ไม่ถึงtp ก็เบิ้ล
ผมยังนึกไม่ออกเลย รบ กวนด้วยนะครับ
ขอบคุณครับ
-
จากเงื่อนไขคือ ปิดไม่ถึง TP ให้เบิ้ล ตรงนี้เราต้องดูก่อนครับว่า TP คือราคาที่อยู่บนกราฟ ไม่ใช่ กำไรที่เป็นเงิน
การจะเทียบแบบเดิมนั้นผมบอกแล้วว่ามันใช้ได้เหมือนกัน แต่อาจจะติดบั๊ก
การจะเทียบราคาTP ใช้คำสั่ง OrderTakeprofit() ครับ ทีนี้เราจะต้องเปลี่ยน ไม่เอากำไรมาเทียบ แต่เอาราคาปิดมาเทียบแทน
if( OrderClosePrice() != Ordertakeprofit() ) ไม่แน่ใจสะกดถูกไหม
แบบนี้จะเอาราคาปิดของออเดอร์ก่อนหน้ามาดู ถ้าปิดไม่ชน TP เขียว ออเดอร์ต่อไปต้องเบิ้ล
-
จากเงื่อนไขคือ ปิดไม่ถึง TP ให้เบิ้ล ตรงนี้เราต้องดูก่อนครับว่า TP คือราคาที่อยู่บนกราฟ ไม่ใช่ กำไรที่เป็นเงิน
การจะเทียบแบบเดิมนั้นผมบอกแล้วว่ามันใช้ได้เหมือนกัน แต่อาจจะติดบั๊ก
การจะเทียบราคาTP ใช้คำสั่ง OrderTakeprofit() ครับ ทีนี้เราจะต้องเปลี่ยน ไม่เอากำไรมาเทียบ แต่เอาราคาปิดมาเทียบแทน
if( OrderClosePrice() != Ordertakeprofit() ) ไม่แน่ใจสะกดถูกไหม
แบบนี้จะเอาราคาปิดของออเดอร์ก่อนหน้ามาดู ถ้าปิดไม่ชน TP เขียว ออเดอร์ต่อไปต้องเบิ้ล
ขอบคุณมากๆ เลยครับ ขอลองก่อนนะครับ ;D
-
รบกวนคุณ D_Diamond อีกครั้งครับ ผมวางโค็ตแบบนี้ถูกไหมครับ ทำไมมันไม่ยอมเปิดออเด้อให้ครับ
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastlot=OrderLots();
double lastprofit=OrderProfit();
double lastlot2=lastlot*2;
if( OrderClosePrice() != OrderTakeProfit() )
{
if((lastprofit< lastlot*10))
{
if(a > b )
{OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
else if( a < b )
{OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
else
{
if( a > b )
{OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
else if( a <= b )
{OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
-
เปลี่ยนเงื่อนอะไรอีกรึเปล่าครับ แล้ว a กับ b นี่คือออะไรครับ
-
เปลี่ยนเงื่อนอะไรอีกรึเปล่าครับ แล้ว a กับ b นี่คือออะไรครับ
โทษทีครับ ตัวบนผมตั่งใจจะดัดแปลงใส่กับอินดี้ตัวอื่นครับ
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
double lastlot=OrderLots();
double lastprofit=OrderProfit();
double lastlot2=lastlot*2;
if( OrderClosePrice() != OrderTakeProfit() )
{
if(lastprofit< lastlot*10)
{
if ((min<=0))
{
if ((sig <=0)&&(ma2>ma1))
{
if ((sig-var1)>=min)
{OrderSend(Symbol(),OP_SELL,lastlot2,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
if ((min>=-0))
{
if ((sig>=-0)&&(ma2<ma1))
{
if ((sig+var1)<=min)
{OrderSend(Symbol(),OP_BUY,lastlot2,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green); }
}
}
}
else
{
if ((min<=0))
{
if ((sig <=0)&&(ma2>ma1))
{
if ((sig-var1)>=min)
{OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Red); }
}
}
if ((min>=-0))
{
if ((sig>=-0)&&(ma2<ma1))
{
if ((sig+var1)<=min)
{OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);}
}
}
}
}}}
รบกวนด้วยครับ ขอบคุณครับ
-
แล้วความต้องการคืออะไรครับ
แล้วปัญหาตอนนี้คือยังไงครับ ละเอียดกว่านี้หน่อย
-
แล้วความต้องการคืออะไรครับ
แล้วปัญหาตอนนี้คือยังไงครับ ละเอียดกว่านี้หน่อย
ครับผม ตามนี้เลยครับ
เพิ่มเติมครับ
ออเด้อที่ 1 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 2 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 3 เสีย ชน sl เบิ้ลล็อต
ออเด้อที่ 4 เสีย ปิดที่ 0 โปรฟิต เบิ้ลล็อตต่อ
ออเด้อที่ 5 ได้ แต่ไม่ชน tp ให้เบิ้ลล็อตต่อในออเด้อที่ 6
ออเด้อที่ 6 ได้ ชน tp
ออเด้อที่ 7 กลับมาเทรดที่ 0.1 เหมือนเดิมครับ
+++++++
เอาโคตไปวางใส่ macd เบิ้ลล็อตด้านบนแล้วอีเอเปิดออเด้อตามปกติน่ะครับ
ขอบคุณครับ.. :D รบกวนคุณD_Diamond และ admin และ เพื่อนๆ ด้วยนะครับ
-
แปลว่าตอนนี้ได้ตามความต้องการแล้วเหรอครับ หรือยังติดปัญหาตรงไหนอีก ถ้ายังติดก็แนบไฟล์ mq4 ไว้นะครับ
-
แปลว่าตอนนี้ได้ตามความต้องการแล้วเหรอครับ หรือยังติดปัญหาตรงไหนอีก ถ้ายังติดก็แนบไฟล์ mq4 ไว้นะครับ
ยังครับ อิอิ
เด๋วผมอัพให้นะครับ ตอนนี้ ใช้ gprs อยู่ครับ.. ;D
-
ขออนุญาติปิดกะทู้นะครับ พอดีทำได้แล้ว เบิ้ลไป 200 กว่าล้อต ไม่เวิคครับ
พอดีพึ่งหัดเขียนด้วยครับ เลยงมอยู่ตั่งนาน อิอิ
ขอบคุณคุณD_Diamond และ admin และ เพื่อนๆ ด้วยนะครับ