Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6544 / 13646 ツリー ←次へ | 前へ→

【44629】RCI系指数をVBAで minarai 06/11/25(土) 1:02 質問[未読]
【44630】Re:RCI系指数をVBAで ichinose 06/11/25(土) 8:16 発言[未読]
【44632】Re:RCI系指数をVBAで minarai 06/11/26(日) 9:27 お礼[未読]
【44635】Re:RCI系指数をVBAで minarai 06/11/26(日) 18:23 お礼[未読]

【44629】RCI系指数をVBAで
質問  minarai  - 06/11/25(土) 1:02 -

引用なし
パスワード
   以下のEXCELシートをマクロで自動計算式できますか
宜しくお願いします
新日鉱HD

日付順位  終値  価格順位   順位差平方  RCI
B4     C4    D4      E4      F4
5      800   1      
B5     C5    D5      E5      F5
4      788   4
B6     C6    D6      E6      F6
3      779   5
B7     C7    D7      E7      F7
2      795   3
B8     C8    D8      E8      F8
1      797   2
 
>>参考の出展先です
>例として5日間の RCI を求めることにします。以下の(表1)をご覧ください。これ>はある株銘柄の5日間の価格(終値)の変動を表にしたものです:


>>表1 日付 日付順位 終値 価格順位 順位差平方 RCI
2006/01/17  11,545   
2006/01/18  11,520   
2006/01/19  11,539   
2006/01/20  11,528   
2006/01/23  11,439   


この表に順位を書き加えたものが(表2)です。日付については新しい順に、価格については高い順に順序付けをします。


表2 日付 日付順位 終値 価格順位 順位差平方 RCI
2006/01/17   5  11,545   1  
2006/01/18   4  11,520   4  
2006/01/19   3  11,539   2  
2006/01/20   2  11,528   3  
2006/01/23   1  11,439   5  


この2つの順位の差を平方(2乗)した結果をそれぞれ求めます。例えば 2006/01/17 の場合は 5 - 1 = 4 の2乗で 16 になりました(表3)。


[ 1 − 6 × (順位差平方の合計) ÷ { N × ( N × N − 1 ) } ] × 100
という式で求めることができます。

今回は N = 5 で、順位差平方の合計は 16 + 0 + 1 + 1 + 16 = 34 ですからこれを代入すると、2006/01/23 は RCI = -70.0% になります(表4)。


表4 日付 日付順位 終値 価格順位 順位差平方 RCI
2006/01/17 5 11,545 1 16 
2006/01/18 4 11,520 4 0 
2006/01/19 3 11,539 2 1 
2006/01/20 2 11,528 3 1 
2006/01/23 1 11,439 5 16 -70.0%


これが RCI の求め方です。


表5 日付 日付順位 終値 価格順位 順位差平方 RCI
2006/01/17  11,545   
2006/01/18 5 11,520 3 4 
2006/01/19 4 11,539 1 9 
2006/01/20 3 11,528 2 1 
2006/01/23 2 11,439 5 9 -70.0%
2006/01/24 1 11,466 4 9 -60.0%


        

【44630】Re:RCI系指数をVBAで
発言  ichinose  - 06/11/25(土) 8:16 -

引用なし
パスワード
   ▼minarai さん:
おはようございます。
RCIの説明は非常にわかりやすかったですよ!!

こんなデータでRCIの算出を考えます。

     A      B    C
 1   日付     終値   RCI
 2  2006/1/17  11,545    
 3  2006/1/18  11,520    
 4  2006/1/19  11,539    
 5  2006/1/20  11,528    
 6  2006/1/23  11,439    
 7  2006/1/24  11,466    

上記のデータでN=5でRCIをC列に算出します。
尚、書式は A列は日付 B列は、通貨に設定されているとします。
C列は、標準に設定しておいて下さい

標準モジュールに
'=====================================================
Sub main()
  Dim rng As Range
  Dim rw As Long
  Dim N As Long
  Dim add1 As String, add2 As String
  N = 5 '←Nの変更はここ
  Set rng = Range("a" & Rows.Count).End(xlUp)
  Do Until rng.Row - N + 1 <= 1
    With rng
     add1 = .Offset(1 - N).Resize(N).Address
     add2 = .Offset(1 - N, 1).Resize(N).Address
     
     .Offset(, 2).Value = Evaluate("=1-6*SUMSQ(RANK(" & _
         add1 & "," & add1 & ")-RANK(" & _
         add2 & "," & add2 & "))/(" & N & _
         "*(" & N & "*" & N & "-1))")
     .Offset(, 2).NumberFormatLocal = "0%"
     End With
    Set rng = rng.Offset(-1)
    Loop
End Sub


として、mainを実行してみて下さい。

     A      B    C
 1   日付     終値   RCI
 2  2006/1/17  11,545    
 3  2006/1/18  11,520    
 4  2006/1/19  11,539    
 5  2006/1/20  11,528    
 6  2006/1/23  11,439   -70%       
 7  2006/1/24  11,466   -60%

こんな結果を得ることができます。

試してみて下さい。

【44632】Re:RCI系指数をVBAで
お礼  minarai  - 06/11/26(日) 9:27 -

引用なし
パスワード
   ▼ichinose さん:
お答え有難うございました、私も自動記録で作ってみました、日付け順位を価格順位に関数ランクでつくりましたが引数が見つかりませんになりエラーで全体のVBAが動かなくなりました、下のランク関数を入れない後からのは大体動きました、ランク関数を使ってランダムな株価に価格順位付ける方法がよく判りません。昨晩は夜勤で、今から出かけますので、帰りましたらシンプルに作っていただきましたRCI指数を試してみます。


RCI系指数                            
銘柄名    新日鉱HD                                
日付      日付順位  終値  価格順位           順位差平方            
2006/11/17    5    800    1    4    4    16            
2006/11/20    4    788    4    0    0    0        132    
2006/11/21    3    779    5    -2    -2    4        120    
2006/11/22    2    795    3    -1    -1    1        1.1    
2006/11/24    1    797    2    -1    -1    1    順位差平方の合計(d)22    -0.1    RCI(%)-10

Sub オシレータ系RCI指数()
'
' Macro1 Macro
' マクロ記録日 : 2006/11/25 
'

'
  Range("E4").Select
  ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-1]"
  Range("F4").Select
  ActiveCell.FormulaR1C1 = "=RC[-4]-RC[-2]"
  Range("G4").Select
  ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
  Range("E5").Select
  ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-1]"
  Range("F5").Select
  ActiveCell.FormulaR1C1 = "=RC[-4]-RC[-2]"
  Range("G5").Select
  ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
  Range("E6").Select
  ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-1]"
  Range("F6").Select
  ActiveCell.FormulaR1C1 = "=RC[-4]-RC[-2]"
  Range("G6").Select
  ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
  Range("E7").Select
  ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-1]"
  Range("F7").Select
  ActiveCell.FormulaR1C1 = "=RC[-4]-RC[-2]"
  Range("G7").Select
  ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
  Range("E8").Select
  ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-1]"
  Range("G7").Select
  Selection.Copy
  Range("G8").Select
  Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
  Range("F8").Select
  ActiveCell.FormulaR1C1 = "=RC[-4]-RC[-2]"
  Range("H8").Select
  Selection.FormulaR1C1 = "="
  ActiveCell.FormulaR1C1 = "=SUM(R[-4]C[-1]:RC[-1])"
  Range("I5").Select
  ActiveCell.FormulaR1C1 = "=6*R[3]C[-1]"
  Range("I6").Select
  ActiveCell.FormulaR1C1 = "=5*(25-1)"
  Range("I7").Select
  ActiveCell.FormulaR1C1 = "=R[-2]C/R[-1]C"
  Range("I8").Select
  ActiveCell.FormulaR1C1 = "=1-R[-1]C"
  Range("J8").Select
  ActiveCell.FormulaR1C1 = "=RC[-1]*100"
  Range("J9").Select
End Sub
>おはようございます。
>RCIの説明は非常にわかりやすかったですよ!!
>
>こんなデータでRCIの算出を考えます。
>
>     A      B    C
> 1   日付     終値   RCI
> 2  2006/1/17  11,545    
> 3  2006/1/18  11,520    
> 4  2006/1/19  11,539    
> 5  2006/1/20  11,528    
> 6  2006/1/23  11,439    
> 7  2006/1/24  11,466    
>
>上記のデータでN=5でRCIをC列に算出します。
>尚、書式は A列は日付 B列は、通貨に設定されているとします。
>C列は、標準に設定しておいて下さい
>
>標準モジュールに
>'=====================================================
>Sub main()
>  Dim rng As Range
>  Dim rw As Long
>  Dim N As Long
>  Dim add1 As String, add2 As String
>  N = 5 '←Nの変更はここ
>  Set rng = Range("a" & Rows.Count).End(xlUp)
>  Do Until rng.Row - N + 1 <= 1
>    With rng
>     add1 = .Offset(1 - N).Resize(N).Address
>     add2 = .Offset(1 - N, 1).Resize(N).Address
>     
>     .Offset(, 2).Value = Evaluate("=1-6*SUMSQ(RANK(" & _
>         add1 & "," & add1 & ")-RANK(" & _
>         add2 & "," & add2 & "))/(" & N & _
>         "*(" & N & "*" & N & "-1))")
>     .Offset(, 2).NumberFormatLocal = "0%"
>     End With
>    Set rng = rng.Offset(-1)
>    Loop
>End Sub
>
>
>として、mainを実行してみて下さい。
>
>     A      B    C
> 1   日付     終値   RCI
> 2  2006/1/17  11,545    
> 3  2006/1/18  11,520    
> 4  2006/1/19  11,539    
> 5  2006/1/20  11,528    
> 6  2006/1/23  11,439   -70%       
> 7  2006/1/24  11,466   -60%
>
>こんな結果を得ることができます。
>
>試してみて下さい。

【44635】Re:RCI系指数をVBAで
お礼  minarai  - 06/11/26(日) 18:23 -

引用なし
パスワード
   ichinose さん
うーんすごーい完璧でした。
このソフトのRCI振幅指数を売買のテクニカル参考
の一部に使います有難うございました。

6544 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free