|
広告
この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
第26回 GMMA
今回は GMMA (Guppy Multi Moving Average、複合型移動平均線) についてです。 メーンチャートに12本の指数平滑移動平均線を表示します。 (1) GMMA の計算式短期組として6本の指数平滑移動平均線を引きます。周期は 3、5、8、10、12、15 です。 長期組として6本の指数平滑移動平均線を引きます。周期は 30、35、40、45、50、60 です。 (2) GMMA の計算指数平滑移動平均線の計算になります。 こちら を参照して下さい。 (3) GMMA の表示(3-1) GMMA の表示Sub GMMA表示(ch, 終値配列, 実表示本数) j = 2 For i = 1 To 6 周期 = 配列プロパティ取得("GMMA", j) If 周期 = 0 Then Exit For 配列 = 指数平滑移動平均線算出(終値配列, 周期, 実表示本数) Set sr = ch.SeriesCollection.NewSeries sr.ChartType = xlLine sr.Values = 配列 sr.Name = "EMA" & 周期 sr.Border.Weight = 1 sr.Border.Color = RGB(0, 0, 255) j = j + 1 Next i j = 8 For i = 1 To 6 周期 = 配列プロパティ取得("GMMA", j) If 周期 = 0 Then Exit For 配列 = 指数平滑移動平均線算出(終値配列, 周期, 実表示本数) Set sr = ch.SeriesCollection.NewSeries sr.ChartType = xlLine sr.Values = 配列 sr.Name = "EMA" & 周期 sr.Border.Weight = 1 sr.Border.Color = RGB(255, 0, 255) j = j + 1 Next i End Sub短期組の6本は青で表示します。長期組の6本はピンクで表示します。 Series オブジェクトの Border の Color で色を指定します。 12本の移動平均線を表示するため、細い線で表示します。 Series オブジェクトの Border の Weight を 1 にします。 (3-2) 指数平滑移動平均線算出Function 指数平滑移動平均線算出(データ配列, 周期, 実表示本数)
n = UBound(データ配列) ReDim a(1 To 実表示本数, 1 To 1) 表示開始行 = n - 実表示本数 + 1 移動平均 = データ配列(1, 1)
j = 1 For i = 1 To n   移動平均 = (2 * データ配列(i, 1) + (周期 - 1) * 移動平均) / (周期 + 1)
  If i >= 表示開始行 Then      a(j, 1) = 移動平均      j = j + 1   End If Next i
指数平滑移動平均線算出 = a
End Function(4) プロパティシートの設定B16セルを TRUE にするとGMMAを表示します。FALSE で非表示です C16セルからH16セルは短期組の周期です I16セルからN16セルは長期組の周期です エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 11:11
| この記事のURL
第25回 MACD
今回はMACD (Moving Average Convergence Divergence、移動平均収束拡散法) についてです。 メーンチャートの下に補助チャートとして表示します。 MACD線とシグナル線の2本の線を引きます。シグナル線が下から上に抜ければ買いサイン、上から下に抜ければ売りサインです。下図では青線がMACD線、赤がシグナル線です。 (1) MACD の計算式MACD = 短期(n日)の指数平滑移動平均 - 長期(m日)の指数平滑移動平均 シグナル = MACDのs日の指数平滑移動平均 (2) MACD の計算指数平滑移動平均線の計算が主になります。 こちら を参照して下さい。 (3) MACD の表示(3-1) MACD の表示Sub MACD表示(終値配列, 実表示本数)
Set ch = 補助チャート追加("MACD")
短周期 = 配列プロパティ取得("MACD", 2) 短期配列 = 指数平滑移動平均線算出(終値配列, 短周期, 実表示本数)
長周期 = 配列プロパティ取得("MACD", 3) 長期配列 = 指数平滑移動平均線算出(終値配列, 長周期, 実表示本数)
MACD配列 = 配列差計算(短期配列, 長期配列) Set sr = ch.SeriesCollection.NewSeries sr.ChartType = xlLine sr.Values = MACD配列 sr.Name = "MACD"
シグナル周期 = 配列プロパティ取得("MACD", 4) シグナル配列 = 指数平滑移動平均線算出(MACD配列, シグナル周期, 実表示本数) Set sr = ch.SeriesCollection.NewSeries sr.ChartType = xlLine sr.Values = シグナル配列 sr.Name = "Signal" & シグナル周期
補助チャート後処理 ch
End Sub(3-2) 指数平滑移動平均線算出Function 指数平滑移動平均線算出(データ配列, 周期, 実表示本数)
n = UBound(データ配列) ReDim a(1 To 実表示本数, 1 To 1) 表示開始行 = n - 実表示本数 + 1 移動平均 = データ配列(1, 1)
j = 1 For i = 1 To n   移動平均 = (2 * データ配列(i, 1) + (周期 - 1) * 移動平均) / (周期 + 1)   If i >= 表示開始行 Then      a(j, 1) = 移動平均      j = j + 1   End If Next i
指数平滑移動平均線算出 = a
End Function(3-3) 配列差計算Private Function 配列差計算(a, b)
n = UBound(a) ReDim c(1 To n, 1 To 1)
For i = 1 To n c(i, 1) = a(i, 1) - b(i, 1) Next i
配列差計算 = c
End Function(4) プロパティシートの設定B15セルを TRUE にするとMACDを表示します。FALSE で非表示です C15セルは短期周期です D15セルは長期周期です E15セルはシグナル周期です エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 10:21
| この記事のURL
第24回 サマータイム
MT4から分足や時間足のデータを取得する際にはタイムゾーンが違うので東京時間に変換しなくてはなりません。その際にサマータイムを考慮する必要があります。 今回はサマータイムルーチンについて書いてみます。 (1) 東京時間に変換(1-1) 東ヨーロッパMT4ではこのタイムゾーンのデータプロバイダが多い。 東京時間=東ヨーロッパ時間+ 6時間 (ロンドンがサマータイムのとき) 東京時間=東ヨーロッパ時間+ 7時間(1-2) ニューヨーク東京時間=ニューヨーク時間+ 13時間 (ニューヨークがサマータイムのとき) 東京時間=ニューヨーク時間+ 14時間(1-3) ロンドン東京時間=ロンドン時間+ 8時間 (ロンドンがサマータイムのとき) 東京時間=ロンドン時間+ 9時間(2) ロンドンのサマータイム判定3月最終日曜日午前1時から 10月最終日曜日午前2時までがロンドンのサマータイムです。 ロンドンでは3月最終日曜日午前1時になったら時計を1時間進め、10月最終日曜日午前2時になったら時計を1時間戻すということになります。 Function   Isロンドン夏時間(ロンドン日時)
Select Case Month(ロンドン日時)   Case 1, 2, 11, 12: Exit Function   Case 4, 5, 6, 7, 8, 9: Isロンドン夏時間 = True: Exit Function End Select
月初日 = DateSerial(Year(ロンドン日時), Month(ロンドン日時), 1)
If Month(ロンドン日時) = 3 Then     Select Case Weekday(月初日)       Case 1: 開始日 = 29    '日曜       Case 2: 開始日 = 28    '月曜       Case 3: 開始日 = 27    '火曜       Case 4: 開始日 = 26    '水曜       Case 5: 開始日 = 25    '木曜       Case 6: 開始日 = 31    '金曜       Case 7: 開始日 = 30    '土曜     End Select
   If Day(ロンドン日時) > 開始日 Then Isロンドン夏時間 = True    If Day(ロンドン日時) = 開始日 Then       If Hour(ロンドン日時) >= 1 then Isロンドン夏時間 = True    End If End If
If Month(ロンドン日時) = 10 Then     Select Case Weekday(月初日)       Case 1: 終了日 = 29    '日曜       Case 2: 終了日 = 28    '月曜       Case 3: 終了日 = 27    '火曜       Case 4: 終了日 = 26    '水曜       Case 5: 終了日 = 25    '木曜       Case 6: 終了日 = 31    '金曜       Case 7: 終了日 = 30    '土曜     End Select
    If Day(ロンドン日時) < 終了日 Then Isロンドン夏時間 = True     If Day(ロンドン日時) = 終了日 Then       If Hour(ロンドン日時) < 2 then Isロンドン夏時間 = True     End If
End If
End Function入力引数はロンドン日時(yyyy/mm/dd hh:mm)です 出力はロンドンがサマータイムならばTrue、そうでないならばFalseです (3) ニューヨークのサマータイム判定3月第2日曜日午前2時から 11月第1日曜日午前2時までがニューヨークのサマータイムです。 ニューヨークでは3月第2日曜日午前2時になった1時間時計を進め、11月第1日曜日午前2時になったら1時間時計を戻すということになります。 Function   Isニューヨーク夏時間(ニューヨーク日時)
Select Case Month(ニューヨーク日時)   Case 1, 2, 12: Exit Function   Case 4, 5, 6, 7, 8, 9, 10: Isニューヨーク夏時間 = True: Exit Function End Select
月初日 = DateSerial(Year(ニューヨーク日時), Month(ニューヨーク日時), 1)
If Month(ニューヨーク日時) = 3 Then     Select Case Weekday(月初日)       Case 1: 開始日 = 8      '日曜       Case 2: 開始日 = 14    '月曜       Case 3: 開始日 = 13    '火曜       Case 4: 開始日 = 12    '水曜       Case 5: 開始日 = 11    '木曜       Case 6: 開始日 = 10    '金曜       Case 7: 開始日 = 9      '土曜     End Select
   If Day(ニューヨーク日時) > 開始日 Then Isニューヨーク夏時間 = True    If Day(ニューヨーク日時) = 開始日 Then        If Hour(ニューヨーク日時) >= 2 Then Isニューヨーク夏時間 = True    End If
End If
If Month(ニューヨーク日時) = 11 Then     Select Case Weekday(月初日)       Case 1: 終了日 = 1    '日曜       Case 2: 終了日 = 7    '月曜       Case 3: 終了日 = 6    '火曜       Case 4: 終了日 = 5    '水曜       Case 5: 終了日 = 4    '木曜       Case 6: 終了日 = 3    '金曜       Case 7: 終了日 = 2    '土曜     End Select
    If Day(ニューヨーク日時) < 終了日 Then Isニューヨーク夏時間 = True     If Day(ニューヨーク日時) = 終了日 Then        If Hour(ニューヨーク日時) < 2 Then Isニューヨーク夏時間 = True     End If
End If
End Function入力引数はニューヨーク日時(yyyy/mm/dd hh:mm)です 出力はニューヨークがサマータイムならばTrue、そうでないならばFalseです エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 12:41
| この記事のURL
第23回 日経平均チャート
MT4からデータを取得して日経225先物チャートを表示します。 ダウ平均を提供しているプロバイダは多いのですが、日経平均はあまり多くありません。 今回は GCI のデモデータを使用します。 (1) MT4のカスタムインディケータ 前回 作成した UCSV を使用します。 (2) チャートへカスタムインディケータを貼り付けるナビゲーターの カスタムインディケータから UCSV を 日経平均チャートにドラッグして貼り付けて下さい。日経平均チャートの足種類はデータを取得したい足種類にして下さい。以上でMT4の準備作業は終了です。 (3) プロパティシートの設定B1 セルの通貨ペアを日経平均のシンボル名に設定して下さい。 ここではシンボル名を Nikkei_225 に設定していますがプロバイダによりシンボル名は異なりますので、ご自分のプロバイダのシンボル名に設定して下さい。B2 セルの足種類を設定して下さい。ここで設定する足種類は(2)と一致していなくてはなりません B4 セルはMT4のデータを取得するフォルダ名です。今回はGCIのフォルダを設定しています。 B5 セルはタイムゾーンです。MT4のデータプロバイダは「 東ヨーロッパ」が多いのですが、今回の場合は「 ニューヨーク」になります。 MT4タイムゾーンとしては下記のいづれかを入力して下さい。 東ヨーロッパ、ニューヨーク、ロンドン(5) ワークシートの追加日経平均のシンボル名のワークシートを追加して下さい。 ここではシンボル名を Nikkei_225 に設定していますがプロバイダによりシンボル名は異なりますので、ご自分のプロバイダのシンボル名のワークシートを追加して下さい。(6) MT4を起動します(7) MT4の画面でCSVファイル取得完了のメッセージが表示されるのを待ちますUCSV ... initialized の次に UCSV ... finished All updated が表示されればOKです。 MT4のカスタムインディケータをセットしたチャートにも finished All updated が表示されます。 (8) エクセルでデータ更新ボタンを押しますA3セルの データ更新ボタンを押すとデータの取込を行い、日経平均チャートを表示します。 エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 23:26
| この記事のURL
第22回 ダウ平均チャート
MT4からデータを取得してダウ工業株30種平均先物チャートを表示します。 (1) MT4のカスタムインディケータダウ平均用に下記のカスタムインディケータ UCSV を作ります。 //******************************************************************* // // UCSV // // CopyRight 2013 VBAFAN. // //******************************************************************* #property indicator_chart_window //---- input parameters extern int OutputBars = 1000;
int timecounter=0;
//******************************************************************* // init //******************************************************************* int init() {      quote_write();      return(0); }
//******************************************************************* // start //******************************************************************* int start() {      if (Minute()==timecounter) return(0);      timecounter=Minute();      quote_write();      return(0); }
//******************************************************************* // quote_write //******************************************************************* int quote_write() {      datetime dt;      bool flag;      string str;      string symbol;
     Comment("start");
     symbol=Symbol();
     dt=outputCSV("USDJPY");      flag=true;
     if (outputCSV(symbol)!=dt) flag=false;
     str=TimeToStr(dt,TIME_DATE)+" "+TimeToStr(dt,TIME_MINUTES)+" finished";      if (flag) str=str+" All updated";
     Comment(str);      Print(str);
     return(0); }
//******************************************************************* // outputCSV //******************************************************************* datetime outputCSV(string symbol) {      int handle;      bool ret;      int period;
     period=Period();
     handle=FileOpen(symbol+period+".csv",FILE_CSV|FILE_WRITE,',');      if(handle<1) return(0);
     for(int i=0;i < OutputBars;i++)      {        ret = FileWrite(handle,        TimeToStr(iTime(symbol,period,i),TIME_DATE),        TimeToStr(iTime(symbol,period,i),TIME_MINUTES),        iOpen(symbol,period,i),        iHigh(symbol,period,i),        iLow(symbol,period,i),        iClose(symbol,period,i),        iVolume(symbol,period,i) );
       if(ret<1) return(0);      }
     FileClose(handle);
     return(iTime(symbol,period,0)); }MT4からダウ平均のCSVファイル取得するインディケータです。上記のコードをコピーしてMT4フォルダ下の experts フォルダの indicators フォルダにファイル名 UCSV.mq4 で保存して下さい。 (2) カスタムインディケータのコンパイルMT4の ツールメニューの メタエディターをクリックするとメタエディターが起動します。 file メニューから UCSV.mq4 を open して下さい。 メニューの compile ボタンをクリックして下さい。 0 error(s),0 warning(s) と表示されればOKです。 terminal ボタンを押すとメタエディターが終了します。 コンパイル後の実行可能ファイル名は UCSV.ex4 になります。ソースファイルと同じフォルダに作成されます。 (3) チャートへカスタムインディケータを貼り付けるコンパイルが完了すると ナビゲーターの カスタムインディケータに UCSV が表示されます。 ダウ平均チャートにドラッグして貼り付けて下さい。 ダウ平均チャートの足種類はデータを取得したい足種類にして下さい。以上でMT4の準備作業は終了です。 (4) プロパティシートの設定B1 セルの通貨ペアをダウ平均のシンボル名に設定して下さい。 ここではシンボル名を _US30 に設定していますがプロバイダによりシンボル名は異なりますので、ご自分のプロバイダのシンボル名に設定して下さい。B2 セルの足種類を設定して下さい。ここで設定する足種類は(3)と一致していなくてはなりません (5) ワークシートの追加ダウ平均のシンボル名のワークシートを追加して下さい。 ここではシンボル名を _US30 に設定していますがプロバイダによりシンボル名は異なりますので、ご自分のプロバイダのシンボル名のワークシートを追加して下さい。(6) MT4を起動します(7) MT4の画面でCSVファイル取得完了のメッセージが表示されるのを待ちますUCSV ... initialized の次に UCSV ... finished All updated が表示されればOKです。 MT4のカスタムインディケータをセットしたチャートにも finished All updated が表示されます。 (8) エクセルでデータ更新ボタンを押しますA3セルの データ更新ボタンを押すとデータの取込を行い、ダウ平均チャートを表示します。 エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 19:36
| この記事のURL
第21回 分足チャート、時間足チャート
いままでに、日足、週足、月足、5分足のデータ取得とチャート表示について書いてきました。今回はそれ以外の足について説明します。 (1) MT4のカスタムインディケータ 前回 作成した UCSV28 を使用します。 (2) チャートへカスタムインディケータを貼り付けるナビゲーターの カスタムインディケータから UCSV28 を データを取得したい足のチャートにドラッグして貼り付けて下さい。 どれか1つのチャートにセットすれば必要な通貨ペアのCSVをすべてを取得することができます。 以上でMT4の準備作業は終了です。 (3) プロパティシートの設定B2セルの足種類を設定して下さい。下記のいずれかを指定して下さい。 分足、5分足、15分足、30分足、時間足、4時間足、日足、週足、月足(2)でドラッグして貼り付けたものと一致していなくてはなりません。 (4) MT4を起動します(5) MT4の画面でCSVファイル取得完了のメッセージが表示されるのを待ちますUCSV28 ... initialized の次に UCSV28 ... finished All updated が表示されればOKです。 MT4のカスタムインディケータをセットしたチャートにも finished All updated が表示されます。 (6) エクセルでデータ更新ボタンを押しますA3セルの データ更新ボタンを押すとデータの取込を行い、チャートを表示します。 エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 17:23
| この記事のURL
第20回 5分足チャート
MT4からデータを取得して5分足チャートを表示します。 (1) MT4のカスタムインディケータ5分足用に下記のカスタムインディケータ UCSV28 を作ります。 //******************************************************************* // // UCSV28 // // CopyRight 2013 VBAFAN. // //******************************************************************* #property indicator_chart_window //---- input parameters extern int OutputBars = 1000;
int timecounter=0;
//******************************************************************* // init //******************************************************************* int init() {      quote_write();      return(0); }
//******************************************************************* // start //******************************************************************* int start() {      if (Minute()==timecounter) return(0);      timecounter=Minute();      quote_write();      return(0); }
//******************************************************************* // quote_write //******************************************************************* int quote_write() {      datetime dt;      bool flag;      string str;
     Comment("start");
     dt=outputCSV("USDJPY");      flag=true;
     if (outputCSV("EURJPY")!=dt) flag=false;      if (outputCSV("GBPJPY")!=dt) flag=false;      if (outputCSV("AUDJPY")!=dt) flag=false;      if (outputCSV("NZDJPY")!=dt) flag=false;      if (outputCSV("CHFJPY")!=dt) flag=false;      if (outputCSV("CADJPY")!=dt) flag=false;
     if (outputCSV("EURUSD")!=dt) flag=false;      if (outputCSV("GBPUSD")!=dt) flag=false;      if (outputCSV("AUDUSD")!=dt) flag=false;      if (outputCSV("NZDUSD")!=dt) flag=false;      if (outputCSV("USDCHF")!=dt) flag=false;      if (outputCSV("USDCAD")!=dt) flag=false;
     if (outputCSV("EURGBP")!=dt) flag=false;      if (outputCSV("EURAUD")!=dt) flag=false;      if (outputCSV("EURNZD")!=dt) flag=false;      if (outputCSV("EURCHF")!=dt) flag=false;      if (outputCSV("EURCAD")!=dt) flag=false;
     if (outputCSV("GBPAUD")!=dt) flag=false;      if (outputCSV("GBPNZD")!=dt) flag=false;      if (outputCSV("GBPCHF")!=dt) flag=false;      if (outputCSV("GBPCAD")!=dt) flag=false;
     if (outputCSV("AUDNZD")!=dt) flag=false;      if (outputCSV("AUDCHF")!=dt) flag=false;      if (outputCSV("AUDCAD")!=dt) flag=false;
     if (outputCSV("NZDCHF")!=dt) flag=false;      if (outputCSV("NZDCAD")!=dt) flag=false;
     if (outputCSV("CADCHF")!=dt) flag=false;
     str=TimeToStr(dt,TIME_DATE)+" "+TimeToStr(dt,TIME_MINUTES)+" finished";      if (flag) str=str+" All updated";
     Comment(str);      Print(str);
     return(0); }
//******************************************************************* // outputCSV //******************************************************************* datetime outputCSV(string symbol) {      int handle;      bool ret;      int period;
     period=Period();
     handle=FileOpen(symbol+period+".csv",FILE_CSV|FILE_WRITE,',');      if(handle<1) return(0);
     for(int i=0;i < OutputBars;i++)      {        ret = FileWrite(handle,        TimeToStr(iTime(symbol,period,i),TIME_DATE),        TimeToStr(iTime(symbol,period,i),TIME_MINUTES),        iOpen(symbol,period,i),        iHigh(symbol,period,i),        iLow(symbol,period,i),        iClose(symbol,period,i),        iVolume(symbol,period,i) );
       if(ret<1) return(0);      }
     FileClose(handle);
     return(iTime(symbol,period,0)); }MT4から5分足のCSVファイル取得するインディケータです。取得する通貨ペアは主要通貨ペア28種類です。上記のコードをコピーしてMT4フォルダ下の experts フォルダの indicators フォルダにファイル名 UCSV28.mq4 で保存して下さい。 (2) カスタムインディケータのコンパイルMT4の ツールメニューの メタエディターをクリックするとメタエディターが起動します。 file メニューから UCSV28.mq4 を open して下さい。 メニューの compile ボタンをクリックして下さい。 0 error(s),0 warning(s) と表示されればOKです。 terminal ボタンを押すとメタエディターが終了します。 コンパイル後の実行可能ファイル名は UCSV28.ex4 になります。ソースファイルと同じフォルダに作成されます。 (3) チャートへカスタムインディケータを貼り付けるコンパイルが完了すると ナビゲーターの カスタムインディケータに UCSV28 が表示されます。 いずれか1つの5分足チャートにドラッグして貼り付けて下さい。 以上でMT4の準備作業は終了です。 (4) プロパティシートの設定B2セルの足種類を 5分足にして下さい (5) MT4を起動します(6) MT4の画面でCSVファイル取得完了のメッセージが表示されるのを待ちますUCSV28 ... initialized の次に UCSV28 ... finished All updated が表示されればOKです。 MT4のカスタムインディケータをセットしたチャートにも finished All updated が表示されます。カスタムインディケータは どれか1つの5分足チャートにセットすれば必要な通貨ペアのCSVをすべてを取得することができます。 (7) エクセルでデータ更新ボタンを押しますA3セルの データ更新ボタンを押すとデータの取込を行い、5分足チャートを表示します。 エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 16:18
| この記事のURL
第19回 出来高
MT4から出来高を取得できるので、補助チャートに表示してみます。 (1) 出来高の表示Sub 出来高表示(出来高配列, 実表示本数)
Set ch = 補助チャート追加("出来高")
Set sr = ch.seriescollection.NewSeries sr.ChartType = xlColumnClustered sr.Values = 出来高算出(出来高配列, 実表示本数) sr.Name = "出来高"
sr.Format.Fill.Solid sr.Format.Fill.ForeColor.RGB = RGB(255, 0, 0) sr.Format.Fill.Transparency = 0.2
ch.ChartGroups(1).GapWidth = 0
補助チャート後処理 ch
End Sub series オブジェクトの ChartType を xlColumnClustered にします。縦棒グラフの指定です。 縦棒を密着させるため ChartGroup オブジェクトの GapWidth をゼロにします。 横の基準線が隠れてしまわないようにするため series オブジェクトの Fill オブジェクトの Transparency を 0.2 にし、すこし透明にします。 series オブジェクトの ForeColor.RGB で色を指定します。 (2) プロパティシートの設定B10セルをTRUE にすると出来高を表示します。FALSE で非表示です エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 12:53
| この記事のURL
第18回 スローストキャスティックス
今回はスローストキャスティックスについてです。 0%から100%までの値をとる指標です。%DとSDの2本の線を表示します。 メーンチャートの下に補助チャートとして表示します。 %Dは80%を上回ると買われすぎ、20%を下回ると売られすぎをあらわします。 %DがSDを下から上に抜けると買いのサインです。 %DがSDを上から下に抜けると売りのサインです。 (1) スローストキャスティックス の計算式本日の%D=分子×100÷分母 分母=過去n日間のなかで最高値−過去n日間のなかで最安値 分子=本日の終値 n日間の値幅に対して本日の終値の位置を%であらわす指標です。 本日の終値がn日間の最高値のときは100、最安値のときは0になります。 ストキャスティックスの%Dと同じです。 本日のSD=%Dの単純移動平均=過去m日間の%Dの合計÷m (2) スローストキャスティックス の計算(2-1) %Dの計算Private Function ストキャスティックス算出(データ配列, 周期, 実表示本数)
n = UBound(データ配列) ReDim a(1 To 実表示本数, 1 To 1)
j = 1 For i = n - 実表示本数 + 1 To n   開始行 = i - 周期 + 1   If 開始行 < 1 Then 開始行 = 1     終了行 = i
  高値 = データ配列(i, データの高値)   安値 = データ配列(i, データの安値)   終値 = データ配列(i, データの終値)
  For k = 開始行 To 終了行 - 1    If 高値 < データ配列(k, データの高値) Then 高値 = データ配列(k, データの高値)    If 安値 > データ配列(k, データの安値) Then 安値 = データ配列(k, データの安値)   Next k
  分子 = 終値 - 安値   分母 = 高値 - 安値   If 分母 > 0 Then a(j, 1) = 分子 * 100 / 分母
  j = j + 1 Next i
ストキャスティックス算出 = a
End Functionストキャスティックスの計算です。 入力引数のデータ配列は4本値の配列です。 入力引数の周期は3等の期間です。プロパティシートで設定します。 入力引数の実表示本数はチャートに表示する本数です。 出力は%Dの配列です。 (2-2) SDの計算Function 単純移動平均線算出(データ配列, 周期, 実表示本数)
n = UBound(データ配列) ReDim a(1 To 実表示本数, 1 To 1)
j = 1 For i = n - 実表示本数 + 1 To n   開始行 = i - 周期 + 1   終了行 = i   If 開始行 < 1 Then 開始行 = 1     合計 = 0   For k = 開始行 To 終了行    合計 = 合計 + データ配列(k, 1)   Next k   件数 = 終了行 - 開始行 + 1   a(j, 1) = 合計 / 件数   j = j + 1 Next i
単純移動平均線算出 = a
End Function単純移動平均の計算です。 入力引数のデータ配列は%Dの配列です。 入力引数の周期は3等の期間です。プロパティシートで設定します。 入力引数の実表示本数はチャートに表示する本数です。 出力はSDの配列です。 (3) スローストキャスティックス の表示Sub スローストキャスティックス表示(データ配列, 実表示本数)
Set ch = 補助チャート追加("スローストキャスティックス") D周期 = 配列プロパティ取得("スローストキャスティックス", 2) D配列 = ストキャスティックス算出(データ配列, D周期, 実表示本数) Set sr = ch.seriescollection.NewSeries sr.ChartType = xlLine sr.Values = D配列 sr.Name = "%D" & D周期 SD周期 = 配列プロパティ取得("スローストキャスティックス", 3) SD配列 = 単純移動平均線算出(D配列, SD周期, 実表示本数) Set sr = ch.seriescollection.NewSeries sr.ChartType = xlLine sr.Values = SD配列 sr.Name = "SD" & SD周期 ch.Axes(xlValue, xlPrimary).MinimumScale = 0 ch.Axes(xlValue, xlPrimary).MaximumScale = 100 ch.Axes(xlValue, xlPrimary).MajorUnitIsAuto = False ch.Axes(xlValue, xlPrimary).MajorUnit = 50 補助チャート後処理 ch
水平線表示 ch, 20, RGB(255, 0, 0) 水平線表示 ch, 80, RGB(255, 0, 0)
End Sub%D線はストキャスティクス線です。 SD線は単純移動平均線です。 20%と80%の位置に横線を引きます。 (4) プロパティシートの設定B13セルをTRUE にするとストキャスティックスを表示します。FALSE で非表示です C13セルは%Dの周期です。 D13セルはSDの周期です。 エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 12:15
| この記事のURL
第17回 ストキャスティックス
今回はストキャスティックスについてです。 0%から100%までの値をとる指標です。%Dと%Kの2本の線を表示します。 メーンチャートの下に補助チャートとして表示します。 %Dは80%を上回ると買われすぎ、20%を下回ると売られすぎをあらわします。 %Dが%Kを下から上に抜けると買いのサインです。 %Dが%Kを上から下に抜けると売りのサインです。 (1) ストキャスティックス の計算式本日のストキャスティックス=分子×100÷分母 分母=過去n日間のなかで最高値−過去n日間のなかで最安値 分子=本日の終値 n日間の値幅に対して本日の終値の位置を%であらわす指標です。 本日の終値がn日間の最高値のときは100、最安値のときは0になります。 期間を変えて2本の線%Dと%Kを引きます。 %Dは3日等の期間、%Kは%Dよりも長い期間で5日等をとります。 (2) ストキャスティックス の計算Private Function ストキャスティックス算出(データ配列, 周期, 実表示本数)
n = UBound(データ配列) ReDim a(1 To 実表示本数, 1 To 1)
j = 1 For i = n - 実表示本数 + 1 To n   開始行 = i - 周期 + 1   If 開始行 < 1 Then 開始行 = 1     終了行 = i
  高値 = データ配列(i, データの高値)   安値 = データ配列(i, データの安値)   終値 = データ配列(i, データの終値)
  For k = 開始行 To 終了行 - 1    If 高値 < データ配列(k, データの高値) Then 高値 = データ配列(k, データの高値)    If 安値 > データ配列(k, データの安値) Then 安値 = データ配列(k, データの安値)   Next k
  分子 = 終値 - 安値   分母 = 高値 - 安値   If 分母 > 0 Then a(j, 1) = 分子 * 100 / 分母
  j = j + 1 Next i
ストキャスティックス算出 = a
End Function入力引数のデータ配列は4本値の配列です。 入力引数の周期は3や5等の期間です。プロパティシートで設定します。 入力引数の実表示本数はチャートに表示する本数です。 出力はストキャスティックス の配列です。 (3) ストキャスティックス の表示Sub ストキャスティックス表示(データ配列, 実表示本数)
Set ch = 補助チャート追加("ストキャスティックス")
D周期 = 配列プロパティ取得("ストキャスティックス", 2) 配列 = ストキャスティックス算出(データ配列, D周期, 実表示本数) Set sr = ch.seriescollection.NewSeries sr.ChartType = xlLine sr.Values = 配列 sr.Name = "%D" & D周期 K周期 = 配列プロパティ取得("ストキャスティックス", 3) 配列 = ストキャスティックス算出(データ配列, K周期, 実表示本数) Set sr = ch.seriescollection.NewSeries sr.ChartType = xlLine sr.Values = 配列 sr.Name = "%K" & K周期 ch.Axes(xlValue, xlPrimary).MinimumScale = 0 ch.Axes(xlValue, xlPrimary).MaximumScale = 100 ch.Axes(xlValue, xlPrimary).MajorUnitIsAuto = False ch.Axes(xlValue, xlPrimary).MajorUnit = 50 補助チャート後処理 ch
水平線表示 ch, 20, RGB(255, 0, 0) 水平線表示 ch, 80, RGB(255, 0, 0)
End Sub%D線と%K線を表示します。 20%と80%の位置に横線を引きます。 (4) プロパティシートの設定B12セルをTRUE にするとストキャスティックスを表示します。FALSE で非表示です C12セルは%Dの周期です。 D12セルは%Kの周期です。 エクセルファイルです。    ダウンロード前へ    次へ
Posted by vbafan at 09:33
| この記事のURL
|