|
Post by g0duck on Jun 8, 2016 13:54:03 GMT 7
อันนี้ผมกรองเทรนโดยใช้ ema แต่อยากทราบว่าจะเช็คว่าราคาได้ไปพักตัวที่กลุ่มเส้น ema แล้วเบรคออกมา ผมไม่รู้ว่าจะเขียนเป็น condition ได้อย่างไรครับ (ในกรอบสีแดง) ขอบคุณครับ
|
|
|
Post by Xa Em on Jun 8, 2016 15:09:59 GMT 7
int ma_signal()
{
int sum;
double ma10=iMA(Symbol(), 0, 10,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma20=iMA(Symbol(), 0, 20,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma30=iMA(Symbol(), 0, 30,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma40=iMA(Symbol(), 0, 40,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma50=iMA(Symbol(), 0, 50,0, MODE_LWMA, PRICE_TYPICAL, 1);
if(ma10 < ma20 && ma20 < ma30 && ma30 < ma40 && ma40 < ma50)
{
if(iClose(Symbol(),0,1) < ma30)
{
sum=1 // ส่งค่า 1 เพื่อ BUY }
}
else if(ma10 > ma20 && ma20 > ma30 && ma30 > ma40 && ma40 > ma50)
{
if(iClose(Symbol(),0,1) > ma30)
{
sum=-1 // ส่งค่า -1 เพื่อ Sell }
}
else
{
sum=0; // ส่งค่า 0 ไม่ออกออเดอ }
return(sum);
}
เอาไปลองดูครับ
|
|
|
Post by g0duckGuest on Jun 8, 2016 19:34:33 GMT 7
int ma_signal()
{
int sum;
double ma10=iMA(Symbol(), 0, 10,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma20=iMA(Symbol(), 0, 20,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma30=iMA(Symbol(), 0, 30,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma40=iMA(Symbol(), 0, 40,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma50=iMA(Symbol(), 0, 50,0, MODE_LWMA, PRICE_TYPICAL, 1);
if(ma10 < ma20 && ma20 < ma30 && ma30 < ma40 && ma40 < ma50)
{
if(iClose(Symbol(),0,1) < ma30)
{
sum=1 // ส่งค่า 1 เพื่อ BUY }
}
else if(ma10 > ma20 && ma20 > ma30 && ma30 > ma40 && ma40 > ma50)
{
if(iClose(Symbol(),0,1) > ma30)
{
sum=-1 // ส่งค่า -1 เพื่อ Sell }
}
else
{
sum=0; // ส่งค่า 0 ไม่ออกออเดอ }
return(sum);
}
เอาไปลองดูครับ ขอบคุณครับ อันนี้ดูเหมือนว่าพอ ema เรียงกันแล้วดูว่า ราคาปิดอยู่นอก ema ใช่ไหมครับ แต่คือผมอยากเช็คว่า พอเส้น ema มันเรียงกัน แล้วราคากลับเข้าไปอยู่ในกลุ่มเส้น ema แล้วมันเบรคออกมาอะครับ ไม่ทราบว่าพอจะมีวิธีเพิ่มเติมไหมครับ
|
|
|
Post by iamgotzaa on Jun 8, 2016 20:30:01 GMT 7
อ่า ประชุมเพิ่งเสร็จ ช้ากน่อยนะครับ พรุ่งนี้
|
|
|
Post by Xa Em on Jun 8, 2016 20:33:22 GMT 7
โค็ดให้ไปอันแรก ผิดผลาดนะครับ ผมรีบไปหน่อย ช่วงเวลาทำงานพอดี
แต่ต้องรู้ก่อนว่าจะให้ ขึ้นไปถึง ema อันไหน และก็จะให้ย้อนไปกี่แท่งเทียน ลองดูครับ
int ma_signal()
{
int sum;
double ma10=iMA(Symbol(), 0, 10,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma20=iMA(Symbol(), 0, 20,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma30=iMA(Symbol(), 0, 30,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma40=iMA(Symbol(), 0, 40,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma50=iMA(Symbol(), 0, 50,0, MODE_LWMA, PRICE_TYPICAL, 1);
double close0=iClose(Symbol(),0,0);
double close1=iClose(Symbol(),0,1);
double close2=iClose(Symbol(),0,2);
if(ma10 > ma20 && ma20 > ma30 && ma30 > ma40 && ma40 > ma50)
{
if(close2 < ma10 && close2 > ma30 && close1 < ma10 && close1 > ma30 && close0 > ma10)
{
sum=1 // สั่ง Buy
}
}
else if(ma10 < ma20 && ma20 < ma30 && ma30 < ma40 && ma40 < ma50)
{
if(close2 > ma10 && close2 < ma30 && close1 > ma10 && close1 < ma30 && close0 < ma10)
{
sum=-1 //สั่ง Sell
}
}
else
{
sum=0; // ไม่ออกออเดอ
}
return(sum);
}
|
|
|
Post by Xa Em on Jun 8, 2016 20:34:09 GMT 7
อาจารย์ ไปประชุมรึ
|
|
|
Post by g0duckGuest on Jun 8, 2016 20:53:35 GMT 7
โค็ดให้ไปอันแรก ผิดผลาดนะครับ ผมรีบไปหน่อย ช่วงเวลาทำงานพอดี แต่ต้องรู้ก่อนว่าจะให้ ขึ้นไปถึง ema อันไหน และก็จะให้ย้อนไปกี่แท่งเทียน ลองดูครับ int ma_signal()
{
int sum;
double ma10=iMA(Symbol(), 0, 10,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma20=iMA(Symbol(), 0, 20,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma30=iMA(Symbol(), 0, 30,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma40=iMA(Symbol(), 0, 40,0, MODE_LWMA, PRICE_TYPICAL, 1);
double ma50=iMA(Symbol(), 0, 50,0, MODE_LWMA, PRICE_TYPICAL, 1);
double close0=iClose(Symbol(),0,0);
double close1=iClose(Symbol(),0,1);
double close2=iClose(Symbol(),0,2);
if(ma10 > ma20 && ma20 > ma30 && ma30 > ma40 && ma40 > ma50)
{
if(close2 < ma10 && close2 > ma30 && close1 < ma10 && close1 > ma30 && close0 > ma10)
{
sum=1 // สั่ง Buy
}
}
else if(ma10 < ma20 && ma20 < ma30 && ma30 < ma40 && ma40 < ma50)
{
if(close2 > ma10 && close2 < ma30 && close1 > ma10 && close1 < ma30 && close0 < ma10)
{
sum=-1 //สั่ง Sell
}
}
else
{
sum=0; // ไม่ออกออเดอ
}
return(sum);
}
กี่แท่งก็ได้อะครับ แต่ไม่เกิน 5 ครับ แล้วก็ขึ้นไปถึงอันไหนก็ได้ แต่อย่าเกิน 3 เส้น (สามเส้นนี้เป็น ema50 นะครับ H L C)
|
|
|
Post by iamgotzaa on Jun 9, 2016 11:04:54 GMT 7
ผมจะใช้ state machine ช่วยครับ เขียนออกมาเป็นภาพได้ดังนี้ state machine exmaple1กำหนด ค่าเบื้องต้นก่อน #define idle 0 #define watch 100 #define up 200 #define down 300
int state=0; datetime timeout; กำหนดไว้บนสุดเลยนะครับ ที่นี้เข้ามาในโปรแกรม variable state จะมีค่าเป็น 0 หรือว่า สถานะ idle อยู่ เพ่ือให้ง่ายขึ้น เราจะให้ใช้ switch เข้ามาช่วย แทน if switch(state) { case idle: // if(price>yellow line) state=watch; //ย้ายสถานะจาก idle -> watch //price นี่อาจจะเปลี่ยนเป็น Bid Ask Close อะไรก็ได้แล้วแต่สะดวก //หรือ กรณีอื่นๆ เช่น ลงไปน้อยกว่า เส้นอื่นๆ ถ้ามัน อยู่บน break;
case watch: //ที่สถานะนี้ เราจะแค่เฝ้าดู //สังเกตุนะครับว่า if(price>yellow line) จะไม่มีผลใน state นี้ มันจะทำงานเฉพาะ state==idle if(Bid<yellow || Bid>Red) //do nothing if(Close<yellow-4pips) { state=down;// ราคาปิดต่ำเส้นเหลือง สังสัยจะเด้งลงต่อ ย้ายไปโหมด down timeout=TimeCurrent(); //stamp ลงเวลาไว้หน่อย} if(Close>red+4pips) { state=up;// ราคาปิดเหนือเส้นแดง สงสัยจะไปต่อ ย้ายไปโหมด up timeout=TimeCurrent(); //stamp ลงเวลาไว้หน่อย}
//ทั้งนี้ทั้งนั้น อาจจะต้องพิจารณา condition อื่นเพิ่มเติมเช่น // ความหนาของ body candle ไม่เป็น doji มีแท่งยาว เต็ม ไม่มี wick หรือเส้น ยาวๆ //blah blah break;
case up: //มาถึงตรงนี้ได้ อยากให้ทำอะไรต่อก็แล้วแต่เลย // ลองให้คิดว่าถ้า 3 แท่งแล้วก็สมควรกลับไปที่ idle ได้แล้ว
if(TimeCurrent() - timeout > 30 minute) state=idle; //state ก็จะวนกลับไปที่เดิม ใหม่ break; }
ทำนองนี้ครับ ต้องไปลองทำดู หรือ ลองแล้วเอามาลองถกกันในนี้ต่อได้เลย okนะจ๊ะ
|
|
|
Post by Xa Em on Jun 9, 2016 11:45:47 GMT 7
โอ้ว เยี่ยมเลยครับ
|
|
|
Post by iamgotzaa on Jun 9, 2016 16:15:45 GMT 7
ลองประยุกต์ ใช้แบบว่า state ประมาณนี้ดูครับ เวิร์กมา กำหนดพฤติกรรมได้เลย ว่าถ้ามีออเดอร์เดียวทำยังไง สองออเดอร์ทำยังไง
idle Single Order two Order Hedging Martingale
ถ้าผสมผสานไปกับว่า ตอนนี้ มี ออเดอร์ กำไรเยอะด้วย แต่ OB/OS เสี่ยงกลับตัว จะให้ทำยังไง
ถ้าเปิด ออเดอร์แล้ว ราคาไม่วิ่งๆ บวกนิดหน่อย จะปิดเลยไหม? ตั้งเวลาได้
ถ้ามีออเดอร์ แล้วข่าวมา (ร่วมกับ ffcal) จะให้ทำยังไง?
โอย เยอะครับ
|
|
|
Post by Xa Em on Jun 9, 2016 16:34:20 GMT 7
สุดยอดครับ ชอบแบบนี้แหละครับ แต่ว่าผมอาจไม่เข้าใจครับ นิดหน่อยไม่ค่อยมีความรู้
|
|
|
Post by iamgotzaa on Jun 9, 2016 18:54:51 GMT 7
สุดยอดครับ ชอบแบบนี้แหละครับ แต่ว่าผมอาจไม่เข้าใจครับ นิดหน่อยไม่ค่อยมีความรู้ ตอนแรกผมก็ได้แค่state เดียวครับ แต่พอทำอีเอออกมาเรื่อยๆ ก็พบทางสว่าง ต้องลองครับ
|
|
marot
New Member
Posts: 43
|
Post by marot on Jun 10, 2016 10:19:44 GMT 7
ไม่ทราบว่า ตอบตรงคำถามหรือเปล่านะครับ... ผมจะใช้ Stoch ครับ.. ง่ายดี ถ้า ราคาตัด EMA ขึ้น หรือ อยู่เหนือ EMA ตัวล่างสุด... แต่ stoch ตัดเส้น signal ลง ลอง Backtest ก่อนนะครับ... ยังไม่ได้ลองไล่ดูทุก case Attachments:
|
|
|
Post by iamgotzaa on Jun 10, 2016 11:13:55 GMT 7
น่าจะใช้เป็นreference condition ได้นะครับ
|
|