traderider forex ไทย

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

  • 5 replies
  • 87 views

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

*

ออฟไลน์ gaothun

  • **
  • 90
  • 0

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

« เมื่อ: 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);
}

Share Topic.

Follow Me.


traderider forex ไทย
traderider forex ไทย
traderider forex ไทย
*

ออฟไลน์ forcebewithyou

  • ****
  • 2,282
  • 75
  • Green PIPs Be With You

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 นะครับ อันนี้เดาเอา

*

ออฟไลน์ forcebewithyou

  • ****
  • 2,282
  • 75
  • Green PIPs Be With You

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

« ตอบกลับ #2 เมื่อ: 16, กันยายน 2020, 02:01:44 PM »

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


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


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


*

ออฟไลน์ gaothun

  • **
  • 90
  • 0

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

« ตอบกลับ #3 เมื่อ: 16, กันยายน 2020, 02:03:50 PM »

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


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


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

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

*

ออฟไลน์ iRuler

  • *
  • 1,221
  • 39

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,221
  • 39

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

« ตอบกลับ #5 เมื่อ: 16, กันยายน 2020, 05:37:24 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**

Tags:
 

เครื่องมือเทรด Forex

ข่าว Forex กราฟ Forex EURUSD GBPUSD GBPJPY ตารางข่าว Forex

เครื่องมือเทรดทองคำ

ราคาทอง วันนี้ ราคาทอง ย้อนหลัง SPDR ล่าสุด กราฟราคาทองคำ วิเคราะห์ ราคาทอง ข่าว ราคาทองคำ ข่าว ราคาน้ำมัน

โบรคเกอร์ Forex

XM Exness FBS Nordfx Pepperstone Land-FX Admiral Markets

Tickmill