EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: swensens on มกราคม 19, 2013, 12:05:29 pm
-
เงื่อนไขของผมคือ
1. ถ้าhistogram เหนือ 0 ให้เปิด order Buy โดยการตั้ง TP=200
2. ถ้าราคาชน TP แล้วให้รอจนกว่า histogram จะอยู่ใต้ 0 จึงเปิด order Sell
แบบนี้ต้องเขียนประมาณไหรเหรอครับ แนะนำหน่อยครับ
ปล.
เป็น custom indicator ที่ผมใช้โปรแกรม icustom ดู buffer
ถ้า histogram เหนือ 0 , buffer0 = 1
ถ้า histogram ใต้ 0, buffer1 = 1
-
ไม่มีไรยากนิครับในเมื่อคุณหาตำแหน่งของ Histogram ที่ต้องการได้แล้วนี้ครับถ้า ถ้าเหนือ 0 คือ buffer0 ถ้าต่ำกว่า 0 คือ buffer 1 คุณแค่เรียกค่า buffer ทั้งสองตัวมาเก็บในตัวแปรก่อนจากนั่นสร้างเงื่อนไขตรวจสอบว่าขณะนี้ indicator คุณอยู่ในสถานะไหนจากนั่นก็เขียน code สิ่งที่คุณต้องการลงไปในเงื่อน แค่นี้เองครับ
-
ครับ ผมลองเขียนตามเงื่อนไขข้างล่างได้แล้ว คือ
1. เปิด buy ตอน buffer0=1
2. เปิด Sell ตอน buffer1=1
3. check order (OrdersTotal) ด้วย ถ้ามีอยู่แล้ว 1 order && buffer0=1 ให้ทำการปิด Order Sell
4. check order (OrdersTotal) ด้วย ถ้ามีอยู่แล้ว 1 order && buffer1=1 ให้ทำการปิด Order Buy
แต่ว่าถ้าผมตั้ง TP=200 แล้วมันขึ้นจนชน TP , order buy ผมก็จะถูกปิด -> พอถูกปิด มันก็จะเปิด order buy ต่อจากเงื่อนไขข้อ 1. ด้านบน
แต่ผมต้องการว่าถ้าชน TP ให้รอจนกว่าเกิดสัญญาณตรงข้าม ค่อยเปิด ไม่อยากให้เปิดซ้ำอะครับ
เช่น
-ถ้าเปิด order buy แล้วชน TP แล้ว buffer0=1 อยู่ ให้ไม่ต้องทำอะไร จนกว่า buffer1=1 ค่อยเปิด Sell
-ในทางกลับกัน ถ้าเปิด order sell แล้วชน TP แล้ว buffer1=1 อยู่ ให้ไม่ต้องทำอะไร จนกว่า buffer0=1 ค่อยเปิด Buy
-
ได้แล้วครับบบ เพิ่ม && เข้าไปตรงเงือนไข order buy , sell รบกวนช่วยดูให้หน่อยว่าโอเคมั้ยครับ แต่ผมลอง BackTest ก็เห็นว่าน่าจะใช้ได้ครับ แฮะๆ เพิ่งอ่านหนังสือจบครับ
double up=iCustom(NULL,0,"Hist",0,1);
double down=iCustom(NULL,0,"Hist",1,1);
if(OrdersTotal()==0)
{ if( (up>0)&&(iCustom(NULL,0,"Hist",0,2)!=1))
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);}
if( (down>0)&&(iCustom(NULL,0,"Hist",1,2)!=1))
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);}
}
-
แต่ผมต้องการว่าถ้าชน TP ให้รอจนกว่าเกิดสัญญาณตรงข้าม ค่อยเปิด ไม่อยากให้เปิดซ้ำอะครับ
เช่น
-ถ้าเปิด order buy แล้วชน TP แล้ว buffer0=1 อยู่ ให้ไม่ต้องทำอะไร จนกว่า buffer1=1 ค่อยเปิด Sell
-ในทางกลับกัน ถ้าเปิด order sell แล้วชน TP แล้ว buffer1=1 อยู่ ให้ไม่ต้องทำอะไร จนกว่า buffer0=1 ค่อยเปิด Buy
ต้องสร้างตัวแปรแบบ gboal เอาไวเก็บค่าทิศทางของ Histogram ด้วยครับแล้วเวลาตรวจสอบเงื่อนไขก็ต้องเอามาใช้ด้วยครับถึงได้ตามที่คุณต้องการ
-
เขียนแบบผมก่อนหน้ามีปัญหาจริงๆด้วยจากการลอง Back Test
ช่วยยกตัวอย่างหน่อยได้มั้ยครับ เกี่ยวกับการเขียน global พอดีเพิ่งหัดเขียน แฮะๆ
ผมลองดูงงๆ กับโค้ดข่างล้าง ถูกมั้ยครับ แต่งงว่าถ้าเป็น order แรก i ยังต้องเป็น 0 อยู่จะเปิด order ยังไง
double up=iCustom(NULL,0,"Hist",0,1);
double down=iCustom(NULL,0,"Hist",1,1);
int i=0;
if(OrdersTotal()==0)
{ if (up>0) && (i==2)
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
i=1;
}
if (down>0) && (i==1)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
i=2;
}
}
if(OrdersTotal()==1)
{ if(up>0)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);}
}
if(down>0)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);}
}
}
-
int xxx=0;
int start()
{
double up=iCustom(NULL,0,"Hist",0,0);
double down=iCustom(NULL,0,"Hist",1,0);
if(xxx==0)
{
if(up >0)
xxx=1;
if(down >0)
xxx=2;
}
if(OrdersTotal()==0)
{ if (up>0 && xxx==2 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;
}
if (down > 0 && xxx==1)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;
}
}
if(OrdersTotal()==1)
{ if(up>0)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);}
}
if(down>0)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);}
}
}
return(0);
}
-
อ่าาา ขอบคุณมากครับ ดูง่ายดี แต่ผมคิดไม่ออก T_T
ผมลอง modify ใหม่ มันยังเปิด order ซ้ำอยู่เลย สงสัยผมอธิบายผิดเองครับ มันเปิดซ้ำในกรณีที่มันชน SL หรือ TP ครับ
เช่น
ถ้าตอนแรกเปิด Sell (down>0 , xxx=2) พอชน SL ก็จะมาเข้า if(OrdersTotal()==0) อีก แต่ค่า histogram ยังคงสั่งให้ Sell (down>0, xxx=2) ก็เลยเปิด order sell อีก
ถ้าผมต้องการให้ในกรณีที่เปิด sell ไปแล้ว ถ้าชน SL หรือ TP ก็ตาม ให้หยุด จนกว่า histrogram จะเปลี่ยนเป็น up>0 ค่อยเปิด Buy อีกครัง ต้อง idea ประมาณไหนครับ แนะนำหน่อยครับ
(ผมอธิบายงงรึเปล่าหว่า)
int xxx=0;
int start()
{
double up=iCustom(NULL,0,"Hist",0,0);
double down=iCustom(NULL,0,"Hist",1,0);
if(xxx==0)
{
if(up >0)
xxx=1;
if(down >0)
xxx=2;
}
if(OrdersTotal()==0)
{ if (up>0 && xxx==1 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;
}
if (down > 0 && xxx==2)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;
}
}
if(OrdersTotal()==1)
{ if(up>0&&xxx==2)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
xxx=1;}
}
if(down>0&&xxx==1)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
xxx=2;}
}
}
//----
return(0);
}
-
ถ้าผมต้องการให้ในกรณีที่เปิด sell ไปแล้ว ถ้าชน SL หรือ TP ก็ตาม ให้หยุด จนกว่า histrogram
ตรงนี้คุณต้องเรียก ข้อมูลจาก history มาใช่ด้วยครับโดยการทำการตรวจสอบ Order สุดท้ายที่ปิดลงไปว่ามันโดน Sl หรือ Tp เปล่าใช้คำสั่ง
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
เพื่อเรียกดูข้อมูลของ order สุดท้ายที่ปิดลงไปจากนั่นให้เทียบราคาปิดกับ SL tp ว่าเท่ากันไหมถ้าเท่ากันแสดงว่าโดน SL tp
-
รบกวนอีกรอบครับ T_T
ผมเขียนผิดตรงไหนเหรอครับ มันยังเปิดซ้ำอยู่เลย 555 ขอโทษที่ถามหลายรอบครับ
ไม่มีพื้นฐานเขียนโปรแกรมเท่าไหร่ ???
int xxx=0;
int start()
{
double up=iCustom(NULL,0,"Hist",0,1);
double down=iCustom(NULL,0,"Hist",1,1);
if(xxx==0)
{
{ if(up >0)
{xxx=1;}
}
{ if(down >0)
{xxx=2;}
}
{ if(OrdersTotal()==0)
{ if (up>0 && xxx==1 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;}
if (down > 0 && xxx==2)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;}
}
}
}
if (xxx!=0)
{ if (OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{ if( (OrderClosePrice()!=OrderStopLoss())||(OrderClosePrice()!=OrderTakeProfit()) )
{ if(OrdersTotal()==0)
{ if (up>0 && xxx==1 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;}
if (down > 0 && xxx==2)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;}
}
}
}
}
if(OrdersTotal()==1)
{ if(up>0&&xxx==2)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
xxx=1;}
}
if(down>0&&xxx==1)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
xxx=2;}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
-
ที่เปิดซ้ำเพราะ
if(OrdersTotal()==0)
{ if (up>0 && xxx==1 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;}
if (down > 0 && xxx==2)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;}
}
อยู่บนสุดก่อนเงื่อนไขอื่น โปรแกรมจะทำงานจากบนลงล่าง ซ้ายไปขวาครับ
-
เอ๋ แต่จาก เงื่อนไขแรก ถ้าทำการเปิด EA ครั้งแรก ถ้า เปิด order buy แล้วโดน TP หลังจากนั้น order ถูกปิด ตัวแปรก็จะเป็น xxx=1, up>0
if(xxx==0)
{
{ if(up >0)
{xxx=1;}
}
{ if(down >0)
{xxx=2;}
}
{ if(OrdersTotal()==0)
{ if (up>0 && xxx==1 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;}
if (down > 0 && xxx==2)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;}
}
}
}
จากนั้นก็ควรที่จะเข้าเงื่อนไข if หลักอันที่สองที่กำหนดให้ xxx!=0 ถึงทำต่อ แล้วในเงื่อนไข if (xxx!=0) ผมก็ให้ check แล้วว่าต้องไม่ปิดด้วย SL หรือ TP ถึงทำต่อ
if (xxx!=0)
{ if (OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{ if( (OrderClosePrice()!=OrderStopLoss())||(OrderClosePrice()!=OrderTakeProfit()) )
{ if(OrdersTotal()==0)
{ if (up>0 && xxx==1 )
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=1;}
if (down > 0 && xxx==2)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=2;}
}
}
}
}
มันถูกต้องปะครับ ??? งง แล้ว 55555
-
ลองเขียน หลักการทำงานของ EA ทั้งหมดมาให้ละเอียดหน่อยครับว่าสิ่งที่คุณกำลังจะเขียนจะทำงานอย่างไรมีลำดับขั่นตอนยังไงมั้งครับ
-
ครับ
1. ผมมี custom indy เกี่ยวกับ histogram โดยรู้ค่าแล้วว่าถ้า indy บอกให้ซื้อค่า up>0 บอกให้ขายคือค่า down>0
double up=iCustom(NULL,0,"test",0,1);
double down=iCustom(NULL,0,"test",1,1);
2. เงื่อนไขการเข้า Trade มี SL,TP ทุกครั้ง
3. ถ้าเปิด order แล้วชน SL หรือ TP จะไม่เปิด order ใหม่ จนกว่า indy จะให้สัญญาณตรงข้าม
เช่น เปิด order buy แล้วชน TP แต่หลังจากชนแล้วราคายังขึ้นอยู่ up>0 จะไม่เปิด order buy ซ้ำจนกว่าจะเกิดสัญญาณ Sell ค่อยเปิด order sell
4. แต่ถ้ายังไม่ชน SL หรือ TP ก็ให้ทำตามค่า up>0 buy และ down<0 sell ครับ
-
ลองเอาไปทดสอบดูครับผมยังไม่ได้ test นะครับเขียนเสร็จโพสเลย
int xxx=0;
int way=0;
int start()
{
double up=iCustom(NULL,0,"Hist",0,1);
double down=iCustom(NULL,0,"Hist",1,1);
if(way==0)
{
if(up >0)
way=1;
if(down >0)
way=2;
}
if(xxx==0 )
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
if( ( OrderClosePrice()==OrderStopLoss() ) || ( OrderClosePrice()==OrderTakeProfit()) )
{
xxx=1;
}
}
if(xxx==1)
{
if(up >0 && way== 2)
{
way=1;
xxx=0;
}
if(down >0 && way== 1)
{
way=2;
xxx=0;
}
}
if(OrdersTotal()==0)
{ if (up>0 && xxx==0)
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=0;
}
if (down > 0 && xxx==0)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=0;
}
}
if(OrdersTotal()==1)
{ if(up>0)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
}
}
if(down>0)
{OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
}
}
}
return(0);
}
-
ถ้าจัดลำดับการทำงานผิด เขียนให้ตายมันก้ไม่ถูกครับ ยิ่งเขียนยิ่งมั่วยิ่งมึน
จริงๆแล้วง่ายๆเลย แค่เอาข้อ 3 ไปไว้เป้นข้อแรกครับ
-
ขอบคุณครับคุณ admin, D_Diamond
เป็นผมตอนนี้เลยครับ 555
ของที่คุณ admin เขียนมาให้มันก็ยังไม่เปิด order แรกให้แปลกจัง มันผิดตรงไหนเหรอครับ
ผมลองไล่ดูมันก็น่าจะถูก ??
ถ้า EA ทำงานครั้งแรกก็ควรจะเข้าเงื่อนไขด้านล่าง ก็น่าจะเปิดได้ แต่ผมไป backtest ดูไม่เห็นมันจะเปิด order เลย
if(OrdersTotal()==0)
{ if (up>0 && xxx==0)
{OrderSend(Symbol(),OP_BUY,0.2,Ask,3,Ask-Point*50,Ask+Point*150,"EX2",0,0,Green);
xxx=0;
}
if (down > 0 && xxx==0)
{OrderSend(Symbol(),OP_SELL,0.2,Bid,3,Ask+Point*50,Ask-Point*150,"EX2",0,0,Red);
xxx=0;
}
}
-
ผิดตรงไหนผมยังไม่ทราบเมื่อกันครับ เขียนเสร็จโพสเลยไม่มีการทดสอบใดๆๆทั้งสิ้นครับตอนนี้แทบจะแยกร่างอยู่แล้วครับ ว่าแต่ขอ อินดี้ที่คุณใช่ด้วยครับผมจะจะได้ลอง Test ดูไม่มีอินดี้ไม่ทำงานครับที่เครื่องผม
-
ผิดตรงไหนผมยังไม่ทราบเมื่อกันครับ เขียนเสร็จโพสเลยไม่มีการทดสอบใดๆๆทั้งสิ้นครับตอนนี้แทบจะแยกร่างอยู่แล้วครับ ว่าแต่ขอ อินดี้ที่คุณใช่ด้วยครับผมจะจะได้ลอง Test ดูไม่มีอินดี้ไม่ทำงานครับที่เครื่องผม
ส่งให้ทาง pm ละครับบ
-
เห็น indi แล้วตกใจเลยครับมัน repaint ได้นี้ครับผม backtest มันก็ออกนะ ไล่หาดูไม่มันไม่ทันโดน SL Tp ก็ปิดก่อนแล้วนี้ครับ
-
ผมลองกราฟ 4 ชั่วโมงดูถึงเจอ sl tp มันก็มีพักนี้ครับกว่าจะเปิดต่อตามผลการทดสอบ
-
ก็คือใช้ได้ปกติเหรอครับ ??? เดี๋ยวผมลองลง meta ใหม่ดีกว่าทำไมผมไม่ออกหว่าา
ปล
ใช่ครับมัน repaint ผมเลยใช้การ get ค่าย้อนหลัง 1 อัน
double up=iCustom(NULL,0,"Hist",0,1);
double down=iCustom(NULL,0,"Hist",1,1);
-
ตัว EA
-
ผมรันได้ละครับ 555 ผมตั้งชื่อใน icustom ไม่ตรงกับชื่อ indy - -''
แต่ผมลองตั้ง TP50/SL50 EUR/USD 1H ช่วง 5dec2012-13dec2-12 มันก็ยังเปิด order ซ้ำอยู่เลยอะครับถึงแม้จะชน TP แล้ว
มันจะเบิ้ลสองครั้งอะครับ เช่นสมมติรอบนี้ขึ้นไป 500pips
0-50pips = ชน TP
51-100pips = ชน TP
แล้วก็หยุดเปิด รอจนเกิดสัญญาณตรงข้าม ..
:'( :'(
-
จากผลการทดสอบที่ผมโพส มันก็มีบ้างนะ เจออยู่บ้างนะแต่เราไม่ทราบว่าค่า อินดี้ตอนที่มันซ้ำเป็นยังไงครับตอบไม่ได้แต่โดยรวมมันก็สลับกันไปมานี่ครับ
-
จากผลการทดสอบที่ผมโพส มันก็มีบ้างนะ เจออยู่บ้างนะแต่เราไม่ทราบว่าค่า อินดี้ตอนที่มันซ้ำเป็นยังไงครับตอบไม่ได้แต่โดยรวมมันก็สลับกันไปมานี่ครับ
ประมาณนี้อะครับ แปลกแฮะ
(http://image.free.in.th/z/td/653untitled.png) (http://pic.free.in.th/id/360a90e852f1e2b81e7defe98342a8f7)
admin เคยเจอมั้ยครับ ถ้าไม่เคยไม่เป็นไรครับ เดี๋ยวผมลองค้นคว้าต่อเอง แค่นี้ก็รบกวนมาหลาย post 555555
ขอบคุณมากครับ
-
เจอครับแต่ไม่กี่ครั้งนะจากตัวที่ผมโพส ตรงนี้ที่มันชื้อซ้ำเพราะตัวล้างค่าโดนล้างแล้วครับมาจาก Indi ที่มัน repaint ได้ครับเลยมีหลุดมั้งผมไม่แน่ใจว่าอินดี้ตัวนี้ถ้ากราฟแรงๆๆมากๆๆมันจะ repaint ค่าได้มากกว่า 1 แท่งเปล่า
-
เจอครับแต่ไม่กี่ครั้งนะจากตัวที่ผมโพส ตรงนี้ที่มันชื้อซ้ำเพราะตัวล้างค่าโดนล้างแล้วครับมาจาก Indi ที่มัน repaint ได้ครับเลยมีหลุดมั้งผมไม่แน่ใจว่าอินดี้ตัวนี้ถ้ากราฟแรงๆๆมากๆๆมันจะ repaint ค่าได้มากกว่า 1 แท่งเปล่า
อ๋ออออออ พอเข้าใจครับ พอมัน repaint มากกว่า 1 แท่งค่า up/down อาจหลุดบ้าง ใช่มั้ยครับ
เดี๋ยวผมลองปรับ speed แล้วนั่งดู indi ก่อนดีกว่า
แต่ยังไงก็ขอบคุณมากคร้าบบบ :D
-
ไม่หลับไม่นอนกันหรือครับ อิอิ