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

広告

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

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog
2013年07月26日
第6回 指数平滑移動平均線
(1) 指数平滑移動平均線の計算式

本日の移動平均=α × 本日の終値+(1-α) × 前日の移動平均
α=2 / (周期+1)


コンピュータで効率的に計算するためこの式を変形すると下記のとおりです。

本日の移動平均 = (2 × 本日の終値 + (周期 - 1) × 前日の移動平均) / (周期 + 1)

(2) 指数平滑移動平均線の計算

Private 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


指数平滑移動平均線算出の関数です。
入力引数はデータ配列, 周期, 実表示本数です。
データ配列は終値配列です。元データ400本をそのまま渡します。これは画面に表示されないデータも計算対象になるからです。
周期は何本の平均をとるかの指定です。21とか13等の数値です。プロパティシートで設定します。
実表示本数は画面に表示する本数です。データが400本あってもすべて表示するわけではないので100とか200とかの数値です。プロパティシートで設定します。

出力は指数平滑移動平均配列です。

(3) 指数平滑移動平均線の表示
(4) 複数の指数平滑移動平均線の表示
(5) Y軸の設定

単純移動平均線と同様です。 こちら をご参照下さい。

(6) プロパティシート




指数平滑移動平均線のB列をTRUEにしてC列以降に周期を入力して下さい。何本でも指数平滑移動平均線を表示することができます。
使用方法は単純移動平均線と同様です。 こちら をご参照下さい。



エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 14:04 | この記事のURL
2013年07月25日
第5回 単純移動平均線
(1) 単純移動平均線の表示

n = 最終行取得(wss)
終値配列 = wss.Range(wss.Cells(2, データの終値), wss.Cells(n, データの終値)).Value
移動平均線配列 = 単純移動平均線算出(終値配列, 周期, 実表示本数)

Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 移動平均線配列
sr.Name = "移動平均線" & 周期


wss はデータシートをあらわす Worksheet オブジェクトです。
ch Chart オブジェクトです。
sr Series オブジェクトです。
終値配列は元の4本値データから終値だけを抜き出して配列にしたものです。

終値配列から移動平均配列を計算します。
Chart オブジェクトの SeriesCollection NewSeries を行って新しい Series オブジェクトを取得します。移動平均線は折線なので Series オブジェクトの ChartType xlLine をセットします。 Series オブジェクトの Values に計算した移動平均配列をセットします。

(2) 複数の単純移動平均線の表示

n = 最終行取得(wss)
終値配列 = wss.Range(wss.Cells(2, データの終値), wss.Cells(n, データの終値)).Value

If BOOLプロパティ取得("単純移動平均線") Then
    i = 2
    周期 = 配列プロパティ取得("単純移動平均線", i)

    While 周期 > 0
     移動平均線配列 = 単純移動平均線算出(終値配列, 周期, 実表示本数)

     Set sr = ch.SeriesCollection.NewSeries
     sr.ChartType = xlLine
     sr.Values = 移動平均線配列
     sr.Name = "移動平均線" & 周期

     i = i + 1
     周期 = 配列プロパティ取得("単純移動平均線", i)
    Wend
End If


まず単純移動平均線を表示するかどうか if ... End if で判断し、While ... Wend で複数の単純移動平均線を表示します。

(3) Y軸の設定

If ch.ChartGroups.Count > 1 Then ch.Axes(xlValue, xlSecondary).MinimumScale = Y軸最小値
If ch.ChartGroups.Count > 1 Then ch.Axes(xlValue, xlSecondary).MaximumScale = Y軸最大値


Y軸は価格を表します。
Y軸最小値とY軸最大値はローソク足を表示する際に計算した値です。

ローソク足のチャートは第1Y軸(左端のY軸)(xlPrimary)になり、移動平均線は第2Y軸(右端のY軸)(xlSecondary)になります。第1Y軸と第2Y軸の最大値と最小値は同じ値にしなくてはなりません。
移動平均線を表示しない場合もあるので条件付の設定になります。移動平均線を表示したかどうかは ChartGroups Count を調べればわかります。ローソク足が1番目の ChartGroup になり移動平均線が2番目の ChartGroup になります。移動平均線を表示しなければ ChartGroups Count は1です。

(4) 単純移動平均線の計算

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


単純移動平均線算出の関数です。
入力引数はデータ配列, 周期, 実表示本数です。
データ配列は終値配列です。元データ400本をそのまま渡します。これは画面に表示されないデータも計算対象になるからです。
周期は何本の平均をとるかの指定です。21とか13等の数値です。プロパティシートで設定します。
実表示本数は画面に表示する本数です。データが400本あってもすべて表示するわけではないので100とか200とかの数値です。プロパティシートで設定します。

出力は単純移動平均配列です。

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 15:21 | この記事のURL
2013年07月25日
第4回 サンプルチャートの使用方法
(1) プロパティシート



プロパティシートの値を変更後、チャートシートを表示すると変更された値に従ってチャートが再描画されます。

(1-1) 通貨ペア

USDJPY、EURJPY、EURUSD、AUDJPYのいずれかを入力して下さい。半角です。

(1-2) 足種類

現在は日足のデータがセットされています。

(1-3) 表示本数

各通貨ペアのデータは400本セットされています。400までの数字を入力できます。

(1-4) 単純移動平均線

B列

   単純移動平均線を表示するかしないかの設定です。
   TRUEかFALSEを入力して下さい。
   FALSEの代わりに空白でもOKです。
   FALSEの代わりに数字のゼロでもOKです。
   TRUEの代わりに1以上の数字でもOKです。

C列以降

   移動平均の日数を入力して下さい。
   D列も入力すると2番目の移動平均線を表示します。
   E列も入力すると3番目の移動平均線を表示します。
   同様にして何本でも移動平均線を表示することができます。

(2) チャートシート



A1セルのチャート表示をクリックすると現在のWindowサイズに合わせてチャートを表示します。
A2セルのチャート消去をクリックするとチャートを消去します。

(3) データシート

データシートとしてUSDJPY、EURJPY、EURUSD、AUDJPY の各シートがあります。



シートの名前はUSDJPY等の通貨ペアの名称です。プロパティシートの通貨ペア項目とこのシート名が対応します。
は日時、始値、高値、安値、終値の順番です。
は1行目は見出行です。2行目以降は日時の昇順です。

上記の規則に従っていれば他の通貨ペアのデータシートをいくらでも追加することができます。

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 13:00 | この記事のURL
2013年07月25日
第3回 X軸とY軸の設定
(1) X軸の設定

Set wss = ThisWorkbook.Worksheets(通貨ペア)
Set wsd = ThisWorkbook.Worksheets("チャート")
Set chobj = wsd.ChartObjects.Add(x, y, 幅, 高さ)
Set ch = chobj.Chart

Set x軸 = wss.Range(wss.Cells(開始行, データの日時), wss.Cells(終了行, データの日時))

ch.Axes(xlCategory).CategoryNames = x軸
ch.Axes(xlCategory).CategoryType = xlCategoryScale
ch.Axes(xlCategory).TickLabelSpacing = 実表示本数 / 20


x軸には日時を表示します。X軸に対応するオブジェクトは Chart オブジェクトの Axes(xlCategory) になります。このオブジェクトの CategoryNames range オブジェクトのX軸をセットします。 CategoryType には xlCategoryScale をセットします。TickLabelSpacing には何本おきに日時を表示するかを指定します。

(2) Y軸の設定

ch.Axes(xlValue).HasMajorGridlines = True

y軸最大値最小値算出 最大値, 最小値, Y軸最大値, Y軸最小値

ch.Axes(xlValue, xlPrimary).MinimumScale = Y軸最小値
ch.Axes(xlValue, xlPrimary).MaximumScale = Y軸最大値


Y軸には価格を表示します。Y軸に対応するオブジェクトは Chart オブジェクトの Axes(xlValue) になります。このオブジェクトの HasMajorGridlines をTrueにすると価格の横線が表示されます。

Chart オブジェクトの Axes(xlValue, xlPrimary) オブジェクトの MinimumScale に最小価格をセットします。これがグラフの底になります。 MaximumScale に最大価格をセットします。これがグラフの天井になります。y軸最大値最小値算出ルーチンで計算します。

(3) Y軸の計算

Private Sub y軸最大値最小値算出(最大値, 最小値, Y軸最大値, Y軸最小値)

値幅 = 最大値 - 最小値
値幅 = 値幅 / 5
倍率 = 1
単位 = 1

While 値幅 < 1
  倍率 = 倍率 * 10
  単位 = 単位 / 10
  値幅 = 値幅 * 10
Wend

Y軸最大値 = Fix(最大値 * 倍率) * 単位
Y軸最小値 = Fix(最小値 * 倍率) * 単位
Y軸最大値 = Y軸最大値 + 単位 * 2
Y軸最小値 = Y軸最小値 - 単位 * 2

End Sub


y軸最大値最小値算出ルーチンです。
入力引数は最大値と最小値とです。価格の最大値と最小値を渡します。
出力引数はY軸最大値とY軸最小値です。

USDJPY、EURUSD 等を考慮して小数点以下何桁目がキリのいい値か計算し、若干の余白を加えて出力します。

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 11:55 | この記事のURL
2013年07月25日
第2回 極大値極小値の表示
(1) 極大値の表示

Set sr = ch.SeriesCollection("高値")
sr.HasDataLabels = True
sr.DataLabels.Position = xlLabelPositionAbove


極大値はDataLabelsオブジェクトで表示します。
高値のSeriesオブジェクトのHasDataLabelsプロパティをTrueにします。
ローソク足の上に表示するためDataLabels.Position = xlLabelPositionAboveとします。

v = sr.Values
極大値配列 = 極大値配列算出(v, 最小間隔)

For i = 1 To UBound(v)
  If 極大値配列(i) = "極大値" Then
    sr.DataLabels(i).Text = v(i)
  Else
    sr.DataLabels(i).Text = ""
  End If
Next


DataLabels Text に価格をセットします。極大値でないものは""をセットします。

(2) 極大値の算出

Private Function 極大値配列算出(データ配列, 最小間隔)

n = UBound(データ配列)
ReDim a(1 To n)

For i = 1 To n
  開始行 = i - 最小間隔
  終了行 = i + 最小間隔
  If 開始行 < 1 Then 開始行 = 1
  If 終了行 > n Then 終了行 = n

  For j = 開始行 To 終了行
   If データ配列(j) > データ配列(i) Then Exit For
  Next j
  If j > 終了行 Then a(i) = "極大値"
Next i

極大値配列算出 = a

End Function


極大値配列を算出する関数です。
入力引数はデータ配列と最小間隔です。
出力は極大値配列です。該当配列要素に"極大値"とセットされます。

近傍で最大のものが極大値になります。近傍の半径を最小間隔で与えています。
データ配列は高値配列です。

フォントサイズ = sr.DataLabels.Font.Size
チャート幅 = ch.Axes(xlCategory).Width
最小間隔 = Fix(フォントサイズ * 3 / (チャート幅 / 実表示本数)) + 1
If 最小間隔 < 6 Then 最小間隔 = 6


2つの極大値が重ならないように最小間隔を計算しています。"103.734" "1.34153" 等の数値を考えると極大値の最大文字数は7文字となります。その後半部分は3文字になります。最小間隔の計算においてフォントサイズ * 3をおこなっているのはそのためです。最後に最小間隔が小さくなり過ぎないように最小の最小間隔を6としています。最小間隔は近傍半径なので近傍直径は11になります。11=(6-1)*2+1です。

(3) 極小値の表示

Set sr = ch.SeriesCollection("安値")
sr.HasDataLabels = True
sr.DataLabels.Position = xlLabelPositionBelow


極大値と同様です。安値配列を対象としていることとローソク足の下に表示するため DataLabels.Position = xlLabelPositionBelow としているのが相違点です。

(4) 極小値の計算

Private Function 極小値配列算出(データ配列, 最小間隔)

n = UBound(データ配列)
ReDim a(1 To n)

For i = 1 To n
  開始行 = i - 最小間隔
  終了行 = i + 最小間隔
  If 開始行 < 1 Then 開始行 = 1
  If 終了行 > n Then 終了行 = n

 For j = 開始行 To 終了行
   If データ配列(j) < データ配列(i) Then Exit For
  Next j
  If j > 終了行 Then a(i) = "極小値"
Next i

極小値配列算出 = a

End Function


極小値配列を算出する関数です。
入力引数はデータ配列と最小間隔です。
出力は極小値配列です。該当配列要素に"極小値"とセットされます。
データ配列は安値配列です。

計算方法は極大値と同様です。

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 10:14 | この記事のURL
2013年07月24日
第1回 VBAでFXチャートを作成
エクセルのVBAを使用してFXチャートを作成してみようと思います。自分でチャートを作成することによりオリジナルなテクニカル分析もできます。ごく基本的な部分から始めたいと思います。今回の目標はこのチャートです。



(1) ローソク足の表示

Set wsd = ThisWorkbook.Worksheets("チャート")
Set chobj = wsd.ChartObjects.Add(x, y, 幅, 高さ)

Set ch = chobj.Chart
ch.SeriesCollection.Add Source:=データ範囲, Rowcol:=xlColumns
ch.ChartWizard gallery:=xlStockOHLC, Format:=2


データ範囲は4本値のrangeオブジェクトで、下記のものです。
Set データ範囲 = wss.Range(wss.Cells(開始行, データの始値), wss.Cells(終了行, データの終値))

Chart オブジェクトの ChartWizard を使用して gallery:=xlStockOHLC, Format:=2 を行うとローソク足のチャートが表示されます。

(2) ローソク足の表示の修正

表示されたチャートは白黒で足と足の間隔がかなり開いているの修正します。

For Each g In ch.ChartGroups
If g.HasUpDownBars Then
    g.UpBars.Interior.Color = RGB(255, 0, 0)
    g.DownBars.Interior.Color = RGB(0, 0, 255)
    g.GapWidth = 20
    Exit For
End If
Next g


UpBars が陽線です。色を赤にします。DownBars が陰線です。色を青にします。
GapWidth が足と足の間隔です。初期値が150なので20にします。

エクセルファイルです。

    ダウンロード



Posted by vbafan at 12:54 | この記事のURL
<< 前へ

×

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