คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
สูตร RSI(14) ในโปรแกรมวิเคราะห์หุ้นทุกโปรแกรม จะเป็น Built in Indicators ที่โปรแกรมวิเคราะห์จะเขียนโค้ดฝังไว้ในตัวโปรแกรมเลย เพื่อความสะดวกในการใช้งาน เพราะเป็น Indicators มาตรฐานอยู่แล้ว ตัว Indicators Built in ต่างๆ ยังมีอีกหลายตัว เช่น MACD CCI RSI V ( Volume ) MA EMA PDI MDI ADX ฯลฯ ซึ่งเมื่อเราเขียนโค้ด เพียงกำหนดค่าตัวแปร (Period) โปรแกรมก็จะรู้จักค่า Indicators เหล่านี้และคำนวณตามค่าตัวแปรที่เรากำหนดได้ทันที
ผมไม่ทราบวิธีเขียนโค้ดเพิ่มใน Efin และคิดว่าคงทำไม่ได้เพราะเป็น โปรแกรมที่เราเรียกใช้ดูได้เท่านั้น แต่เขียนโค้ดเพิ่มเติมไม่ได้ ( ผมไม่แน่ใจตรงนี้ ) แต่ผมมีโค้ด สำหรับให้กราฟแสดงราคาหุ้น ณ. ค่า RSI = 30 / 50 / 70 โดยแสดงบนกราฟราคาได้เลย เพื่อความสะดวกในการวิเคราะห์กราฟ สำหรับโปรแกรม Amibroker เท่านั้น แต่หากบางคน ที่มีความรู้ในการเขียนโค้ดโปรแกรม อาจนำไปพัฒนาต่อเพื่อใช้กับโปรแกรมวิเคราะห์อื่นๆ ก็ขึ้นกับแต่ละคนเองนะครับ
//.............................................................
// RSI Bands use a variation of the RSI calculations to figure
// out what price level a stock should be at to be considered
// overbought/oversold.
//
// This sample code was built off the "BuiltInRSIEquivalent"
// sample RSI calculation code found on the AmiBroker website.
_SECTION_BEGIN( "RSI_Bands" );
function BuiltInRSIEquivalent_RSI_Band_Version( period, TargetRSILevel )
{
P = N = 0;
result = Null;
for( i = 1; i < BarCount; i++ )
{
// Standard RSI code
diff = C[ i ] - C[ i - 1 ];
W = S = 0;
if( diff > 0 ) W = diff;
if( diff < 0 ) S = -diff;
if(result[i-1] > C[i-1])
HypotheticalCloseToMatchRSITarget = C[i-1]+P-P*period-((N*period)-N)
*TargetRSILevel/(TargetRSILevel -100);
else
HypotheticalCloseToMatchRSITarget = C[i-1]-N-P+N*period+P*period+(100*P)
/TargetRSILevel-(100*P*period)/TargetRSILevel ;
P = ( ( period -1 ) * P + W ) / period;
N = ( ( period -1 ) * N + S ) / period;
// Store result
if( i >= period )
result[ i ] = HypotheticalCloseToMatchRSITarget ;
}
return result;
}
if (ParamToggle("Show RSI_Bands", "No |Yes", 0))
{
Plot( BuiltInRSIEquivalent_RSI_Band_Version(14,70), "RSIB70",ParamColor( "RSIB70", colorTeal ), styleThick|styleDashed );
Plot( BuiltInRSIEquivalent_RSI_Band_Version(14,50), "RSIB50",ParamColor( "RSIB50", colorWhite ), styleThick|styleDashed );
Plot( BuiltInRSIEquivalent_RSI_Band_Version(14,30), "RSIB30",ParamColor( "RSIB30", colorTeal ),styleThick|styleDashed );
}
_SECTION_END();
//...................................................
ให้ Copy โค้ดทั้งหมด ไปวางต่อท้ายในสูตรของกราฟโดยใช้ Edit formula เปิดโค้ดขึ้นมา แล้ว คลิ้กที่ ปุ่ม Apply Indicator เพื่อยืนยันการเปลี่ยนแปลงสูตรโค้ดกราฟราคาเดิม หลังจากนั้น ให้คลิ้กขวาที่กราฟราคาแล้วเลือก ให้แสดง RSI Bands จากพารามิเตอร์ ก็จะมี RSI Bands ปรากฎขึ้นบนกราฟราคา โดยมีเส้น 3 เส้นเพิ่มขึ้นมา คือ RSI 70 RSI 50 RSI 30 และราคาหุ้นที่ค่า RSI ดังกล่าวอยู่ที่กรอบราคาด้านขวามือ .....
คำแนะนำ ...ค่า RSI(14) ใช้บอกความเร็วของการเปลี่ยนแปลงราคา ( Speed Of Price Change ) โดยค่า RSI(14) = 50 หมายถึง ความเร็วของการเปลี่ยนแปลงราคาขึ้นเฉลี่ย เท่ากับ ความเร็วของการเปลี่ยนแปลงราคาลงเฉลี่ย ในขณะนั้น หรือหมายถึง ราคาจะขึ้นหรือลง ด้วยความเร็วพอๆกัน โอกาสได้เสียเท่ากัน ไม่มีฝ่ายใดได้เปรียบเสียเปรียบ หรือเป็นภาวะ Sideway ซึ่งนักลงทุนจะไม่ชอบในสภาวะแบบนี้ เพราะนักลงทุนที่ฉลาดมักชอบเป็นฝ่ายได้เปรียบอยู่เสมอ (เสี่ยงน้อยได้มาก) ส่วนค่า RSI>=70 จะหมายถึงความเร็วของการเปลี่ยนแปลงราคาขึ้น จะเร็วเป็น 2.33 เท่าหรือมากกว่า ความเร็วของการเปลี่ยนแปลงราคาลง หรือราคาขึ้นเร็วกว่าลงมากกว่าหรือเท่ากับ 2.33 เท่า นั่นเอง ทำให้ฝ่ายซื้อหรือคนที่ถือหุ้นอยู่แล้วได้เปรียบ เพราะถือไว้ราคาขึ้นเร็วกว่าลง คนที่ยังไม่มีหุ้นก้อยากมีหุ้น คนที่มีหุ้นอยู่แล้วก็ยังไม่อยากขายเพราะราคากำลังขึ้นเร็ว ราคาหุ้นจึงมักจะวิ่งขึ้นอย่างรวดเร็วกว่าค่า RSI ในช่วงต่ำๆ ( 50-70 ) แต่ให้จำไว้เสมอว่า ค่า RSI (14) เป็นการเปรียบเทียบในระยะ 14 วันย้อนหลังเท่านั้น ไม่เกี่ยวกับ 30 วัน หรือ 2 เดือนที่แล้วมานะครับ
ยิ่งเขียน ยิ่งยาวเรื่อง เทคนิเคิล 5555 เอาไว้แค่นี้ก่อนนะครับ ...
ผมไม่ทราบวิธีเขียนโค้ดเพิ่มใน Efin และคิดว่าคงทำไม่ได้เพราะเป็น โปรแกรมที่เราเรียกใช้ดูได้เท่านั้น แต่เขียนโค้ดเพิ่มเติมไม่ได้ ( ผมไม่แน่ใจตรงนี้ ) แต่ผมมีโค้ด สำหรับให้กราฟแสดงราคาหุ้น ณ. ค่า RSI = 30 / 50 / 70 โดยแสดงบนกราฟราคาได้เลย เพื่อความสะดวกในการวิเคราะห์กราฟ สำหรับโปรแกรม Amibroker เท่านั้น แต่หากบางคน ที่มีความรู้ในการเขียนโค้ดโปรแกรม อาจนำไปพัฒนาต่อเพื่อใช้กับโปรแกรมวิเคราะห์อื่นๆ ก็ขึ้นกับแต่ละคนเองนะครับ
//.............................................................
// RSI Bands use a variation of the RSI calculations to figure
// out what price level a stock should be at to be considered
// overbought/oversold.
//
// This sample code was built off the "BuiltInRSIEquivalent"
// sample RSI calculation code found on the AmiBroker website.
_SECTION_BEGIN( "RSI_Bands" );
function BuiltInRSIEquivalent_RSI_Band_Version( period, TargetRSILevel )
{
P = N = 0;
result = Null;
for( i = 1; i < BarCount; i++ )
{
// Standard RSI code
diff = C[ i ] - C[ i - 1 ];
W = S = 0;
if( diff > 0 ) W = diff;
if( diff < 0 ) S = -diff;
if(result[i-1] > C[i-1])
HypotheticalCloseToMatchRSITarget = C[i-1]+P-P*period-((N*period)-N)
*TargetRSILevel/(TargetRSILevel -100);
else
HypotheticalCloseToMatchRSITarget = C[i-1]-N-P+N*period+P*period+(100*P)
/TargetRSILevel-(100*P*period)/TargetRSILevel ;
P = ( ( period -1 ) * P + W ) / period;
N = ( ( period -1 ) * N + S ) / period;
// Store result
if( i >= period )
result[ i ] = HypotheticalCloseToMatchRSITarget ;
}
return result;
}
if (ParamToggle("Show RSI_Bands", "No |Yes", 0))
{
Plot( BuiltInRSIEquivalent_RSI_Band_Version(14,70), "RSIB70",ParamColor( "RSIB70", colorTeal ), styleThick|styleDashed );
Plot( BuiltInRSIEquivalent_RSI_Band_Version(14,50), "RSIB50",ParamColor( "RSIB50", colorWhite ), styleThick|styleDashed );
Plot( BuiltInRSIEquivalent_RSI_Band_Version(14,30), "RSIB30",ParamColor( "RSIB30", colorTeal ),styleThick|styleDashed );
}
_SECTION_END();
//...................................................
ให้ Copy โค้ดทั้งหมด ไปวางต่อท้ายในสูตรของกราฟโดยใช้ Edit formula เปิดโค้ดขึ้นมา แล้ว คลิ้กที่ ปุ่ม Apply Indicator เพื่อยืนยันการเปลี่ยนแปลงสูตรโค้ดกราฟราคาเดิม หลังจากนั้น ให้คลิ้กขวาที่กราฟราคาแล้วเลือก ให้แสดง RSI Bands จากพารามิเตอร์ ก็จะมี RSI Bands ปรากฎขึ้นบนกราฟราคา โดยมีเส้น 3 เส้นเพิ่มขึ้นมา คือ RSI 70 RSI 50 RSI 30 และราคาหุ้นที่ค่า RSI ดังกล่าวอยู่ที่กรอบราคาด้านขวามือ .....
คำแนะนำ ...ค่า RSI(14) ใช้บอกความเร็วของการเปลี่ยนแปลงราคา ( Speed Of Price Change ) โดยค่า RSI(14) = 50 หมายถึง ความเร็วของการเปลี่ยนแปลงราคาขึ้นเฉลี่ย เท่ากับ ความเร็วของการเปลี่ยนแปลงราคาลงเฉลี่ย ในขณะนั้น หรือหมายถึง ราคาจะขึ้นหรือลง ด้วยความเร็วพอๆกัน โอกาสได้เสียเท่ากัน ไม่มีฝ่ายใดได้เปรียบเสียเปรียบ หรือเป็นภาวะ Sideway ซึ่งนักลงทุนจะไม่ชอบในสภาวะแบบนี้ เพราะนักลงทุนที่ฉลาดมักชอบเป็นฝ่ายได้เปรียบอยู่เสมอ (เสี่ยงน้อยได้มาก) ส่วนค่า RSI>=70 จะหมายถึงความเร็วของการเปลี่ยนแปลงราคาขึ้น จะเร็วเป็น 2.33 เท่าหรือมากกว่า ความเร็วของการเปลี่ยนแปลงราคาลง หรือราคาขึ้นเร็วกว่าลงมากกว่าหรือเท่ากับ 2.33 เท่า นั่นเอง ทำให้ฝ่ายซื้อหรือคนที่ถือหุ้นอยู่แล้วได้เปรียบ เพราะถือไว้ราคาขึ้นเร็วกว่าลง คนที่ยังไม่มีหุ้นก้อยากมีหุ้น คนที่มีหุ้นอยู่แล้วก็ยังไม่อยากขายเพราะราคากำลังขึ้นเร็ว ราคาหุ้นจึงมักจะวิ่งขึ้นอย่างรวดเร็วกว่าค่า RSI ในช่วงต่ำๆ ( 50-70 ) แต่ให้จำไว้เสมอว่า ค่า RSI (14) เป็นการเปรียบเทียบในระยะ 14 วันย้อนหลังเท่านั้น ไม่เกี่ยวกับ 30 วัน หรือ 2 เดือนที่แล้วมานะครับ
ยิ่งเขียน ยิ่งยาวเรื่อง เทคนิเคิล 5555 เอาไว้แค่นี้ก่อนนะครับ ...
แสดงความคิดเห็น
สงสัยเรื่องการคำนวณ RSI14
โดยที่ RS = AVG.GAIN/AVG.LOSE ตามเว็บอ้างอิงนี้ครับ http://www.investmentory.com/2013/07/indicator-4-rsi.html
เสริม AVG.GAIN แรก = เอาgainมาบวกกัน14แท่ง แล้วหาร14(Close - Prev.Close)
AVG.Lose แรก = เอา lose มาบวกกัน14แท่ง แล้วหาร14(Close - Prev.Close)
AVG.GAIN ต่อไป = (AVG.gainแท่งก่อน*13)+Gainวันนี้ ทั้งหมดหาร14
AVG.Lose ต่อไป = (AVG.Loseแท่งก่อน*13๗+Loseวันนี้ ทั้งหมดหาร14
ทั้งหมดนี้มันอยู่บนเว็บหลายๆเว็บ เว็บที่เอามาแปะเป็นหนึ่งในนั้น
ผมก็เลยเอามาลองใส่ Excel ดู เผื่อว่าในอนาคต สมมติว่าRSI14>50 เป็นปัจจัยสำคัญในการซื้อ แล้วตอนนี้ RSI14=40 อยู่ จะได้คำนวณได้ว่าราคาต้องขึ้นอีกเท่าไหร่ RSI14 จะได้ 50 ตั้งรอซื้อประมาณนั้นครับ
ปัญหาคือ RSI14 ตามที่ผมลองคิดดู มันไม่ตรงกับ RSI14 ของ EFIN ตามรูปครับ
ผมเดาว่าน่าจะมีการปรับให้มัน smooth หรือ ผมทำอะไรผิดก็ไม่รุ้ แต่ทิศทางมันไปในทางเดียวกัน แต่เลขนี่คนละเรื่องเลยครับ
รบกวนท่านทั้งหลาย ไขความกระจ่างให้หน่อยครับ