アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog
2013年08月17日
第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
2013年08月17日
第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
2013年08月16日
第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
2013年08月13日
第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
2013年08月13日
第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
2013年08月13日
第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
2013年08月13日
第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
2013年08月12日
第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
2013年08月12日
第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
2013年08月12日
第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
>> 次へ

×

この広告は30日以上新しい記事の更新がないブログに表示されております。