กองทุน SPDR GOLD SHARES
ถือทองก่อนหน้า
ถือทองล่าสุด
0.00
*หน่วยตัน / ราคาอ้างอิงล่าสุดจากสมาคมค้าทองคำ
สถิติกองทุน SPDR
ราคาทองคำแท่ง 96.5%
ราคาอ้างอิงล่าสุดจากสมาคมค้าทองคำ
ครั้งที่
ราคาก่อนหน้า
ราคาล่าสุด
0
(หน่วย บาท*) / อัปเดตล่าสุดเมื่อวันที่ 13 ก.ค. 2566 เวลา 13:04 น.
สถิติราคาทองคำ ไทย

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

  • 5 replies
  • 1,940 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,282
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,282
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**