EA Programing > MT4 Code Libary

คำสั่ง OrderModify() และ Trailing Stop

<< < (2/3) > >>

gagoi:
ขอบคุณครับ กลับมากอ่านหลายรอบเลย ;D ;D

tomkah:
ขอบคุณครับมีประโยชน์มาก

Zero:
รบกวนช่วยดูให้หน่อยครับ คือตั้งใจจะให้มัน TP จุดเดียวที่ออเดอร์ล่าสุดที่เปิดครับ
คือออเดอร์ล่าสุดเปิดมาจะตั้ง TP ให้ครับ พอตั้งให้แล้วอยากให้ออเดอร์ที่เหลือเปลี่ยน TP เดิมมาใช้ของออเดอร์ล่าสุด


ผมเขียนแบบนี้ครับแก้มาหลายวันแล้วครับแต่ก็ได้แบบในรูปครับ

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);
                 }
               }
            }
         }
      }
   }
}

Zero:

--- Quote from: Zero on ตุลาคม 08, 2015, 12:14:47 pm ---รบกวนช่วยดูให้หน่อยครับ คือตั้งใจจะให้มัน TP จุดเดียวที่ออเดอร์ล่าสุดที่เปิดครับ
คือออเดอร์ล่าสุดเปิดมาจะตั้ง TP ให้ครับ พอตั้งให้แล้วอยากให้ออเดอร์ที่เหลือเปลี่ยน TP เดิมมาใช้ของออเดอร์ล่าสุด


ผมเขียนแบบนี้ครับแก้มาหลายวันแล้วครับแต่ก็ได้แบบในรูปครับ

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);
                 }
               }
            }
         }
      }
   }
}

--- End quote ---

แต่คิดๆแล้วแบบนี้มันตายตัวไปครับ อยากให้เป็น 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("");
         }
      }
  }
//+------------------------------------------------------------------+

admin:
lastsellprice เป็นตัวแปรของฟังก์ชั่น Getlastsellprice แล้วคุณเอาตัวแปรนี้ไปใช้ที่ฟังก์ชั่น AdjustTPS()  ยังไงอ่ะครับ ถ้าไม่ทำให้มันเป็นตัวแปรแบบ global ก่อนอ่ะครับ

นำร่อง

[0] ดัชนีข้อความ

[#] หน้าถัดไป

[*] หน้าที่แล้ว

Go to full version