EA Programing => MT4 Code Libary => Topic started by: admin on ตุลาคม 13, 2010, 01:39:54 am
-
คำสั่ง OrderModify เป็นคำสั่ง ที่ใช้แก้ไข SL TP ของ Order ที่เปิดแล้วหรือแก้ไขราคาเปิด ของ Pending Order
OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
ตัวอย่างเช่น
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
คำสั่งด้านบนเป็นบางส่วนของ คำสั่งที่ใช้ทำ Trailing Stop แต่ในการใช้งานจริงเราต้องใช้คำสั่ง
OrderSelect() ช่วย ผมจะนำข้อมูลจากหัวข้อ OrderSelect บางส่วนบางใช้นะครับใครงงให้กลับไปดูที่ Orderselect ประกอบนะครับ
จากหัวข้อ orderselect เรามี order อยู่ 3 order ถ้าต้องการปิด order ทั้งหมดเราต้องใช้ orderselect ช่วย
1 BUY 0.1 lot
2 SELL 0.1 lot
3 BUY 0.1 lot
for(int i=0;i<OrderTotal();i++)
{
OrderSelect( i,SELECT_BY_POS,MODE_TRADE) ;
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
return(0);
}
}
}
ข้างบนคือบางส่วนของ code Trailing Stop
Trailing Stop คือรูปแบบในการรักษา Profit อย่างหนึ่งกล่าวคือ หากราคาของ คู่เงิน เป็นบวกในจำนวนที่มากกว่า pip ที่กำหนด ตัว Trailiing Stop จะเริ่มทำการแก้ไข
SL ของ order ให้กลับมาเท่ากับราคาที่เปิด หากราคาของคู่เงินเปลี่ยนทาง Order ที่เราเปิดไวก็จะไม่ขาดทุน แต่หากราคาของคู่เงินที่เราเปิดไวกลับบวกไปเรื่อยๆๆ Trailing Stop ก็จำทำการแก้ไข SL
ตามราคาไปเรื่อยๆๆโดย SL ใหม่จะอยู่หากราคาปัจจุบันตามที่เรากำหนดเสมอ
-
ขอบคุณครับ หัวข้อ MT4 Code Libary เป็นประโยชน์มากๆเลยนะครับ
หัวข้อต่อไปขอเป็น คำสั่ง NormalizeDouble()
อยากทราบรายละเอียด คำอธิบายวิธีการใช้ และตัวอย่าง
;Dขอบคุณอีกครั้ง
-
ขอบคุณครับ หัวข้อ MT4 Code Libary เป็นประโยชน์มากๆเลยนะครับ
หัวข้อต่อไปขอเป็น คำสั่ง NormalizeDouble()
อยากทราบรายละเอียด คำอธิบายวิธีการใช้ และตัวอย่าง
;Dขอบคุณอีกครั้ง
ขอบคุณสำหรับคำแนะนำครับผมจะค่อยๆๆเขียนออกมาเรื่อยๆตามเวลาที่มีครับ
-
อยากขอให้ Admin ช่วยยกตัวอย่างกรณี Modify TP ด้วยได้ไหมครับ
ผมเปิดหลายOrder เป็นแบบเบิ้ลล๊อต ใช้คำสั่ง แบบ Profit Level & OrderClosed all
แต่มีปัญหาว่ากว่าจะปิดครบทุก Poisition บางครั้งราคามันวิ่งติดลบกลับมา ทำให้ขาดทุนได้
เลยอยากใช้แบบ Modify TP ให้ TP ทุก Position ตรงกับ Order ล่าสุด
ถ้า Admin ว่างๆ ขอรบกวนอธิบายพร้อมยกตัวอย่างให้ด้วยนะครับ
ขอบคุณมากครับ ;D
-
อยากขอให้ Admin ช่วยยกตัวอย่างกรณี Modify TP ด้วยได้ไหมครับ
ผมเปิดหลายOrder เป็นแบบเบิ้ลล๊อต ใช้คำสั่ง แบบ Profit Level & OrderClosed all
แต่มีปัญหาว่ากว่าจะปิดครบทุก Poisition บางครั้งราคามันวิ่งติดลบกลับมา ทำให้ขาดทุนได้
เลยอยากใช้แบบ Modify TP ให้ TP ทุก Position ตรงกับ Order ล่าสุด
ถ้า Admin ว่างๆ ขอรบกวนอธิบายพร้อมยกตัวอย่างให้ด้วยนะครับ
ขอบคุณมากครับ ;D
จริงๆๆก็ไม่ได้ต่างอะไรมากกับการตั้ง SL ครับทุกอย่างเหมือนกันแต่ต่างกันตรง พารามิเตอร์ใน OrderModify เท่านั่นเองครับ
โคยเริ่มจากการใช้ for เพื่อวนรอบ การใช้ OrderSelect เพื่อบอกให้ EA ทราบถึง Order ที่เราต้องการแก้ไข
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ราคาใหม่ที่ต้องการตั้ง TP,0,Blue);
-
ขอบคุณครับ กลับมากอ่านหลายรอบเลย ;D ;D
-
ขอบคุณครับมีประโยชน์มาก
-
รบกวนช่วยดูให้หน่อยครับ คือตั้งใจจะให้มัน TP จุดเดียวที่ออเดอร์ล่าสุดที่เปิดครับ
คือออเดอร์ล่าสุดเปิดมาจะตั้ง TP ให้ครับ พอตั้งให้แล้วอยากให้ออเดอร์ที่เหลือเปลี่ยน TP เดิมมาใช้ของออเดอร์ล่าสุด
(http://image.free.in.th/v/2013/iz/151008051054.PNG) (http://picture.in.th/id/7397448bbe85c8c0cc18893d9e9b9aa2)
ผมเขียนแบบนี้ครับแก้มาหลายวันแล้วครับแต่ก็ได้แบบในรูปครับ
double Getlastsellprice(int Type)
{
double lastsellprice=0;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==MagicNumberSell){
if(OrderSymbol()==Symbol()){
if(OrderType()==Type){
if(OrderOpenPrice()!=lastsellprice){
lastsellprice=OrderOpenPrice();
}
}
}
}
}
}
return lastsellprice;
}
void AdjustTPS()
{
for(int i=OrdersTotal()-1;i >= 0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==MagicNumberSell){
if(OrderSymbol()==Symbol()){
if(OrderType() == OP_SELL){
if(OrderTakeProfit() < Ask-(TakeProfitSell*2)*Point){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),(lastsellprice-(TakeProfitSell)*Point),0,clrRed);
}
}
}
}
}
}
}
-
รบกวนช่วยดูให้หน่อยครับ คือตั้งใจจะให้มัน TP จุดเดียวที่ออเดอร์ล่าสุดที่เปิดครับ
คือออเดอร์ล่าสุดเปิดมาจะตั้ง TP ให้ครับ พอตั้งให้แล้วอยากให้ออเดอร์ที่เหลือเปลี่ยน TP เดิมมาใช้ของออเดอร์ล่าสุด
(http://image.free.in.th/v/2013/iz/151008051054.PNG) (http://picture.in.th/id/7397448bbe85c8c0cc18893d9e9b9aa2)
ผมเขียนแบบนี้ครับแก้มาหลายวันแล้วครับแต่ก็ได้แบบในรูปครับ
double Getlastsellprice(int Type)
{
double lastsellprice=0;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==MagicNumberSell){
if(OrderSymbol()==Symbol()){
if(OrderType()==Type){
if(OrderOpenPrice()!=lastsellprice){
lastsellprice=OrderOpenPrice();
}
}
}
}
}
}
return lastsellprice;
}
void AdjustTPS()
{
for(int i=OrdersTotal()-1;i >= 0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderMagicNumber()==MagicNumberSell){
if(OrderSymbol()==Symbol()){
if(OrderType() == OP_SELL){
if(OrderTakeProfit() < Ask-(TakeProfitSell*2)*Point){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),(lastsellprice-(TakeProfitSell)*Point),0,clrRed);
}
}
}
}
}
}
}
แต่คิดๆแล้วแบบนี้มันตายตัวไปครับ อยากให้เป็น CloseAll ออเดอร์ที่เปิดอยู่โดยอิงจาก TP ที่ปิดไปล่าสุดครับ แบบนี้ EA ทำงานไป เราก็สามารถตั้ง TP ให้มันปิดไว้ปิดช้าได้ครับ แค่เราเลื่อน TP ของออเดอร์ไดออเดอร์หน้าก็ได้พอมา ถึง TP ที่ใกล้ที่สุดก็ทำการปิดออเดอร์ที่เหลือให้ด้วย ขอเป็นแบบนี้แทนละกันครับ ผมต้องเอาค่าจากอะไรมาใส่ในนี้ครับ Admin
//+------------------------------------------------------------------+
//+=====================Close Order Sell Function====================+
//+------------------------------------------------------------------+
void CloseOrderSell(){
for(int i= OrdersTotal()-1;i >=0;i--){
if(OrderSelect(i,SELECT_BY_POS)==true){
if((OrderMagicNumber() == MagicNumber) && OrderSymbol()== Symbol())
if(OrderType() == OP_SELL)
if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),0,clrRed))Print("");
}
}
}
//+------------------------------------------------------------------+
-
lastsellprice เป็นตัวแปรของฟังก์ชั่น Getlastsellprice แล้วคุณเอาตัวแปรนี้ไปใช้ที่ฟังก์ชั่น AdjustTPS() ยังไงอ่ะครับ ถ้าไม่ทำให้มันเป็นตัวแปรแบบ global ก่อนอ่ะครับ
-
lastsellprice เป็นตัวแปรของฟังก์ชั่น Getlastsellprice แล้วคุณเอาตัวแปรนี้ไปใช้ที่ฟังก์ชั่น AdjustTPS() ยังไงอ่ะครับ ถ้าไม่ทำให้มันเป็นตัวแปรแบบ global ก่อนอ่ะครับ
พอจะมีให้อ่านไหมครับผมไม่เข้าใจ global ครับ :'( ???
-
ประกาศตัวแปรเอาไวส่วนบนของ EA ครับให้ทุกฟังก์ชั่นมันเรียกใช้งานได้หมด ส่วน code คุณถ้าไม่ประกาศแบบที่ว่า ตรงฟังก์ชั่น Modify คุณก็ต้องเรียกใช้งานฟังก์ชั่น Getlastsellprice() แทนการใช้ตัวแปร lastsellprice ครับ
-
ใช้คำสั่งยังไงหรอคับให้มันเลื่อน TP แบบในรูปนี้ (มือใหม่หัดเขียนคับ)
-
เรียน Admin ครับ
ผมเขียนคำสั่งประมาณว่าหากมีออเดอร์เกินห้าออร์เดอร์แล้วให้ modify takeprofit = 0 ให้หมด
มันก็เปลี่ยน Take profit เป็น ศูนย์นะครับ แต่มันขึ้น OrderModify error 1 ไม่รู้มันผิดตรงไหนครับ ช่วยดูให้หน่อยได้ไหมครับ
if(OrderBuy>=ORDER_MaxRisk)
{
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol())
{
if (mode==OP_BUY)
{ OrderModify(OrderTicket(),OrderOpenPrice(),0,0,800,Yellow);
}
}
}
}
if(OrderSell>=ORDER_MaxRisk)
{
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol())
{
if (mode==OP_SELL)
{
OrderModify(OrderTicket(),OrderOpenPrice(),0,0,800,Purple);
}
}
}
}
ขอบคุณครับ
-
ใส่ตัวแปร รับค่า return ที่หน้าฟังก์ชั่น OrderModify ครับ