上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ボラティリティーランナーの定義は次のようになっています
Ⅰ.定義
1.TH = 前日の終値と当日の高値の高い方
2.TL = 前日の終値と当日の安値の低い方
3.値幅 = TH-TL
4.値幅の平均値={前日の値幅の平均値 ×(n-1)+今日の値幅}÷n
4の値幅の平均値の式は、難しそうに書いてありますが普通の平均値の計算と同じです
ここでの値幅は、通常トゥルーレンジと呼ばれています
ストラテジートレイダーには全くそのまま使えるインジケータAverageTrueRange があります
ここでは、ちょっと構造的なところを押さえておきます
インジケータAverageTrueRange は、ファンクションAvgTrueRangeを使っています
そのファンクションAvgTrueRangeは、ファンクションTrueRangeを使っています
そしてファンクションTrueRangeは、ファンクションTrueHighとTrueLowを使っています
以下はファンクションTrueHighのソースコードです
********************
using System;
namespace Broker.StrategyLanguage.Function
{
public class TrueHigh : SimpleFunctionBase
{
private int m_datastream = 1;
public TrueHigh(BaseTechniqueService ctx) :
base(ctx) {}
public TrueHigh(BaseTechniqueService ctx, int data_stream) :
base(ctx, data_stream) { m_datastream = data_stream; }
protected override void Construct() {}
protected override void Initialize() {}
protected override void Destroy() {}
protected override Double Execute(){
Double _This = default(Double);
if (Functions.DoubleGreater(Bars.Close[1], Bars.High[0])){
_This = Bars.Close[1];
}
else{
_This = Bars.High[0];
}
return _This;
}
}
}
**********************
定義にある「前日の終値と当日の高値の高い方」というのが上のファンクションTrueHighです
前日の終値というのがBars.Close[1]で
当日の高値というのがBars.High[0]です
「前日の終値と当日の安値の低い方」というのは、ファンクションTrueLowですが
ソースコードは省略します
このTrueHighとTrueLowを使ってファンクションTrueRangeが出来ています
以下がソースコードです
*******************
using System;
namespace Broker.StrategyLanguage.Function
{
public class TrueRange : SimpleFunctionBase
{
private TrueHigh m_truehigh1;
private TrueLow m_truelow1;
private int m_datastream = 1;
public TrueRange(BaseTechniqueService ctx) :
base(ctx) {}
public TrueRange(BaseTechniqueService ctx, int data_stream) :
base(ctx, data_stream) { m_datastream = data_stream; }
protected override void Construct(){
m_truehigh1 = new TrueHigh(this, m_datastream);
m_truelow1 = new TrueLow(this, m_datastream);
}
protected override void Initialize() {}
protected override void Destroy() {}
protected override Double Execute(){
Double _This = default(Double);
_This = (m_truehigh1[0] - m_truelow1[0]);
return _This;
}
}
}
**************************
値幅の式は、m_truehigh1[0] - m_truelow1[0] となります
これの単純平均値を求めるのがファンクションAvgTrueRangeです
以下がそのソースコードです
**********************
using System;
namespace Broker.StrategyLanguage.Function
{
public class AvgTrueRange : SimpleFunctionBase
{
private ISeries m_length;
private TrueRange m_truerange1;
private int m_datastream = 1;
public AvgTrueRange(BaseTechniqueService ctx) :
base(ctx) {}
public AvgTrueRange(BaseTechniqueService ctx, int data_stream) :
base(ctx, data_stream) { m_datastream = data_stream; }
public ISeries length{
get { return m_length; }
set { m_length = value; }
}
protected override void Construct(){
m_truerange1 = new TrueRange(this, m_datastream);
}
protected override void Initialize() {}
protected override void Destroy() {}
protected override Double Execute(){
Double _This = default(Double);
_This = Functions.Average(m_truerange1, length.Value);
return _This;
}
}
}
**********************
このファンクションAvgTrueRangeの結果をインジケータにしたのが
以下のAverageTrueRangeです
*********************
using System;
using System.Drawing;
using Broker.StrategyLanguage.Function;
namespace Broker.StrategyLanguage.Indicator
{
public class AverageTrueRange : BaseIndicator
{
private int m_atrlength = 14;
private int m_alertlength = 14;
//private int space=10;
private AvgTrueRange m_avgtruerange1;
private HighestBar m_highestbar1;
private LowestBar m_lowestbar1;
private SeriesVar m_atr;
private IPlot Plot1;
public AverageTrueRange(object ctx) :
base(ctx) {}
[Input]
public int atrlength{
get { return m_atrlength; }
set { m_atrlength = value; }
}
[Input]
public int alertlength{
get { return m_alertlength; }
set { m_alertlength = value; }
}
protected override void Construct(){
m_avgtruerange1 = new AvgTrueRange(this);
m_highestbar1 = new HighestBar(this);
m_lowestbar1 = new LowestBar(this);
m_atr = new SeriesVar(this);
Plot1 =
AddPlot(new PlotInfo("ATR", ((0)), ColorTranslator.FromWin32(((65535))),
ColorTranslator.FromWin32(((0))), 0, 0, true));
}
protected override void Initialize(){
m_avgtruerange1.length = new SeriesExpression(delegate { return atrlength; });
m_highestbar1.price = m_atr;
m_highestbar1.length = new SeriesExpression(delegate { return alertlength; });
m_lowestbar1.price = m_atr;
m_lowestbar1.length = new SeriesExpression(delegate { return alertlength; });
m_atr.DefaultValue = 0;
}
protected override void Destroy() {}
protected override void Execute(){
m_atr.Value = m_avgtruerange1[0];
m_atr.Value = m_avgtruerange1[0]/(Bars.Point*10);
Plot1.Set(0, m_atr.Value);
if ((m_highestbar1[0] == 0)){
Alerts.Alert("Indicator at high");
}
else{
if ((m_lowestbar1[0] == 0)){
Alerts.Alert("Indicator at low");
}
}
}
}
}
****************************
と言う訳でボラティリティーランナーの定義の「値幅の平均値」は
インジケータAverageTrueRangeを使えばよいことになります
話は違うのですが、このパラメータの atrlengthを1にしてチャートの表示を見ると
現在バーの変化に合わせてインジケータの値が変化します
ということは [0]は現在バーを示すことになります
一方、PriceChannelの表示は、現在バーが高値安値を更新しても変化しません
何が違うのか?????
よく分からなくなってきました
ちなみにストラテジートレイダーには、
インジケータTrueRangeAというのがあるのですが
これは何本か前のバーのレンジを示すインジケータのようです
[当サイトで使っている自動売買システム]
FXCMはMT4よりも優れていると言っています
中身の分からないストラテジーがいやで
自分でストラテジーを作って運営しています
Strategy Trader 紹介ビデオ 取扱説明 関連サイト
ストラテジートレーダー概要
ストラテジートレーダーβ版利用ガイド
[他の自動売買サイトを探す]
人気blogランキング


[相場の流れは]


西原さん ユーロドルの下落に注意
松田さん ユーロはやっぱり売り
今井さん ドル円は戻り売り
吉田さん ECB利上げと財政危機の綱引き
陳さん ユーロ高は中国が
スポンサーサイト