Open Forex4you Account

Server รัน EA 1000 / ปี

สั่งชื้อคู่มือการโปรแรกม MQL4

Author Topic: การเขียน Code จากสมการครับ ช่วยหน่อย  (Read 11442 times)

veronika

  • Newbie
  • *
  • Posts: 44
   สวัสดีครับ พอดีอยากเขียน code จากสมการ ดังนี้ครับ

Quote
SumAllPrice = (Price1*Volum1)+(Price2*Volum2)+(Price3*Volum3)+....+(Pricen*Volumn)
SumAllVolum = Volum1+Volum2+Volum3+...+Volumn

Average = SumAllPrice /SumAllVolum

นี่คือสมการที่ได้ครับ พอดีผมเอามาเขียน code แล้ว แสดงผล ค่าที่ได้มันไม่ถูกต้องครับ
ไม่ทราบว่าผิดพลาดตรงส่วนไหน -..- รบกวนช่วยทีครับ

***พอดีเขียน EA แบบ Grid แล้วจะหาค่าเฉลี่ยต้นทุนครับ จะเอาค่าที่ได้มาตั้งเป็น เลขกลาง แล้ว บวก กำไร เพื่อทำ Take Profit ครับ

Quote
   double PB,OLot,Av;
   double Average = 0;
   double SumLots = 0; 
   double SumAverage = 0;
   double TakeProfit =0;
   
   for(int i=0;i<=OrdersTotal();i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA){
         if(OrderType()==OP_BUY){
         PB = OrderOpenPrice();
         OLot = OrderLots();       
         }
      }
   }
   Av = PB*OLot;
   Average = Average+Av;
   SumLots = SumLots+OLot; 
   SumAverage = Average/SumLots;
   TakeProfit = SumAverage+Pf;

  String sComment = sComment + "Average = " + DoubleToStr(SumAverage,5) + NL;
  String sComment = sComment + "Tailling Stop = " + DoubleToStr(TakeProfit,5) + NL;

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
loop มีแค่ชั้นเดียว ค่า  PB และ OLot จะเป็นของตัวสุดท้ายเท่านั่นครับ คุณต้องใส่ loop ครอบไปอีกชั้นเพื่อให้มันมันวนหาค่าของ order แต่ละตำแหน่งด้วยครับ

veronika

  • Newbie
  • *
  • Posts: 44
ได้แล้วครับ ขอบคุณครับ

แก้เป็น

Quote
   for(i=0;i<=OrdersTotal();i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA){
         if(OrderType()==OP_BUY){
         PB = OrderOpenPrice();
         OLot = OrderLots(); 
         
         Av = PB*OLot;
         Average = Average+Av;
         SumLots = SumLots+OLot;     
         }
      }
   }   
   SumAverage = Average/SumLots;
   TakeProfit = SumAverage+Pf;
« Last Edit: มีนาคม 10, 2013, 12:50:50 am by veronika »

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
เท่าที่ดูมันน่าจะรวมเข้าไปใน Loop เดียวกันได้เลยครับ

for(int i=0;i<=OrdersTotal();i++)
          {
       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
          if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
              {
             if(OrderType()==OP_BUY)
                  {
                PB   = OrderOpenPrice();
                OLot = OrderLots();       
                  }
               Av = PB*OLot;
               Average = Average+Av; 
               SumLots = SumLots+OLot; 
               SumAverage = Average/SumLots;
               TakeProfit = SumAverage+Pf;
                 
               }

   
           }