กองทุน SPDR Gold Shares

ประจำวันที่

เวลา ครั้งที่ ก่อนหน้า ถือล่าสุด เปลี่ยนแปลง
- - - - -
รวมวันนี้-
เดือนนี้ - : 
ปีนี้  : 
*หน่วยตัน
*อ้างอิงจาก SPDR Gold Share

ราคาทองตามประกาศสมาคมค้าทองคำ

ประจำวันที่ ครั้งที่ เวลา น.

ชนิดทองคำ รับซื้อ ขายออก
ทองคำแท่ง 96.5% - -
ทองรูปพรรณ 96.5% - -
รวมวันนี้-
เปลี่ยนแปลงล่าสุด-
*หน่วยเงินบาท
*ราคาอ้างอิงล่าสุดจากสมาคมค้าทองคำ

การวนลูป มันไม่ออกนอกลูปครับ

  • 5 replies
  • 2,324 views
การวนลูป มันไม่ออกนอกลูปครับ
« เมื่อ: 16, กันยายน 2020, 12:17:59 PM »
ช่วยดูเงื่อนไขนี้ให้หน่อยครับว่าทำไมมัน วนซ้ำ ด้วยครับ จุดประสงค์คือต้องการบวกจำนวนจุดที่ปิดไปว่าได้กี่จุด นับตั้งแต่เวลาที่เรากำหนด
ปัญหาก็คือ เมื่อมันบวกหมดแล้ว มันกลับมาบวกซ้ำอีกในลูป เช่น Orderticket ที่ 10 บวกแล้ว มันก็วนเอา  Orderticket ที่ 10 มาบวกอีกครับ ไม่ออกนอกลูปสักที

input datetime    TimeStart   = D'2020.09.01 00:00:00';

double CountPointHis()
{
   double AllPoint = 0;
   double Point1 = 0;
   for(int cnt=OrdersHistoryTotal()-1; cnt>0; cnt--)
   {
         if(OrderSelect(cnt,SELECT_BY_POS, MODE_HISTORY))
         if ( TimeToStr(OrderOpenTime()) >= TimeToStr(TimeStart))
         {
            if(OrderType()==OP_SELL){Point1   = (OrderOpenPrice()-OrderClosePrice())/Point;}
            if(OrderType()==OP_BUY) {Point1   = (OrderClosePrice()-OrderOpenPrice())/Point;}
            AllPoint = AllPoint + Point1;
         }
   } 
   return(AllPoint);
}

Re: การวนลูป มันไม่ออกนอกลูปครับ
« ตอบกลับ #1 เมื่อ: 16, กันยายน 2020, 01:52:10 PM »


ไม่แน่ใจนะ รอท่าน iRuler มาตอบดีกว่า

ลอง

for(int cnt=OrdersHistoryTotal()-1; cnt>0; cnt--)

เป็น

for(int cnt=0 ; cnt<OrdersHistoryTotal()-1; cnt++)

ผมยังไม่ได้ test code นะครับ อันนี้เดาเอา

Re: การวนลูป มันไม่ออกนอกลูปครับ
« ตอบกลับ #2 เมื่อ: 16, กันยายน 2020, 02:01:44 PM »

ลองอีกอัน เผื่อไม่ได้


for(int cnt=OrdersHistoryTotal()-1; cnt>=0; cnt--)


ผมถนัดแต่ใช้ i++ มากกว่า


Re: การวนลูป มันไม่ออกนอกลูปครับ
« ตอบกลับ #3 เมื่อ: 16, กันยายน 2020, 02:03:50 PM »
อ้างจาก: forcebewithyou ที่ 16, กันยายน  2020, 02:01:44 PM

ลองอีกอัน เผื่อไม่ได้


for(int cnt=OrdersHistoryTotal()-1; cnt>=0; cnt--)


ผมถนัดแต่ใช้ i++ มากกว่า

ผมลองหลายวิธีแล้วครับ แต่คิดว่าไม่เกี่ยวตรงงนี้ครับ

*

iRuler

  • 1,283
Re: การวนลูป มันไม่ออกนอกลูปครับ
« ตอบกลับ #4 เมื่อ: 16, กันยายน 2020, 05:33:42 PM »
for(int cnt=OrdersHistoryTotal()-1; cnt>0; cnt--)

เปลี่ยนเป็น

for(int cnt=OrdersHistoryTotal()-1; cnt>=0; cnt--)

ถ้ามีเลข 0 ถึง 9 (10 จำนวน)
ภาษาที่เป็น zero index จำไว้ว่าถ้าเป็นการวนลูปจากมากไปน้อย ให้ เริ่มจาก จำนวน-1 ก็คือเริ่มที่ 9 แล้วเช็คว่า >=0 หรือยัง
ถ้าเช็คแค่ >0 รอบที่ cnt เป็น 0 มันจะไม่ทำงาน



if ( TimeToStr(OrderOpenTime()) >= TimeToStr(TimeStart))

เปลี่ยนเป็น

if(OrderOpenTime() >= TimeStart)

OrderOpenTime() เป็น datetime และ TimeStart ก็เป็น datetime เหมือนกัน compare กันได้เลย

ตัวแปร string มัน compare แบบมากกว่า น้อยกว่าไม่ได้ เพราะมันไม่ใช่ตัวเลขครับ

ถ้าอธิบายผิดพลาด ต้องขออภัยด้วย ผ่านมายี่สิบกว่าปีแล้ว x*/2

(TH)**

*

iRuler

  • 1,283
Re: การวนลูป มันไม่ออกนอกลูปครับ
« ตอบกลับ #5 เมื่อ: 16, กันยายน 2020, 05:37:24 PM »
อ้างจาก: forcebewithyou ที่ 16, กันยายน  2020, 02:01:44 PM

ลองอีกอัน เผื่อไม่ได้


for(int cnt=OrdersHistoryTotal()-1; cnt>=0; cnt--)


ผมถนัดแต่ใช้ i++ มากกว่า



i++ ไม่สามารถใช้ได้ทุกกรณี เช่นต้องการวนลูปเพื่อ close order

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
//close order
}

ค่า OrdersTotal() จะเปลี่ยนทุกครั้งที่ close order แบบนี้ loop ทำงานผิดพลาด **Hea**

 

XM Global Limited