FX取引ルール確立のために

取引方針が定まらぬ臆病者の外国為替証拠金取引の行方。 取引ルールの柱にテクニカルな売買サインを導入中。システム開発状況を全て公開。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

マルチタイムフレーム(時間足)

STのコードをしばらく見ていないと忘れそうなので
米国のフォーラムからマルチタイムフレーム(時間足)のストラテジーをコピーして
勉強してみます
http://forexforums.dailyfx.com/free-trading-strategies/373916-multi-time-frame-emas.html


ストラテジーの仕様:

サブチャートの2本のEMAがフィルターとして働きます
fast>slow で買いモード
fast<slow で売りモード

メインチャートの2本のEMAのクロスでポジションを作ります
fast>slow で買い
fast<slow で売り

手仕舞は
モードによりドテンとフラットがあります

それぞれのチャートの時間足は、ストラテジーを稼働させるチャートで指定します
ソースコードの中では時間足を指定していません



以下がそのソースコードです
コメントを入れてみます

*******************

using System;
using Broker.StrategyLanguage.Function;
namespace Broker.StrategyLanguage.Strategy
{
public class MultiTimeFrameEMACrossover : BaseStrategyAdvisor
{
private ISeries< Double> m_price;
private ISeries< Double> m_price2;
private int m_fastlength = 8;
private int m_slowlength = 89;
private int m_fastlength2 = 13;
private int m_slowlength2 = 144;
private XAverage m_average1;
private XAverage m_average2;
private XAverage m_average3;
private XAverage m_average4;
private SeriesVar< Double> m_fastavg;
private SeriesVar< Double> m_slowavg;
private SeriesVar< Double> m_fastavg2;
private SeriesVar< Double> m_slowavg2;
private bool longertflong;
private bool longertfshort;
private bool shortertflong;
private bool shortertfshort;
private IMarketOrder m_Order0;
private IMarketOrder m_Order1;
private IMarketOrder m_Order2;
private IMarketOrder m_Order3;
public MultiTimeFrameEMACrossover(object ctx) :
base(ctx) {}
private ISeries< Double> price{
get { return m_price; }
}
private ISeries< Double> price2{
get { return m_price2; }
}
[Input]
public int fastlength{
get { return m_fastlength; }
set { m_fastlength = value; }
}
[Input]
public int slowlength{
get { return m_slowlength; }
set { m_slowlength = value; }
}
[Input]
public int fastlength2{
get { return m_fastlength2; }
set { m_fastlength2 = value; }
}
[Input]
public int slowlength2{
get { return m_slowlength2; }
set { m_slowlength2 = value; }
}
protected override void Construct(){
m_average1 = new XAverage(this);
m_average2 = new XAverage(this);
m_average3 = new XAverage(this);
m_average4 = new XAverage(this);
m_fastavg = new SeriesVar< Double>(this);
m_slowavg = new SeriesVar< Double>(this);
m_fastavg2 = new SeriesVar< Double>(this);
m_slowavg2 = new SeriesVar< Double>(this);
m_Order0 =
OrdersFactory.CreateMarketThisBar(new OrdersCreateParams(Lots.Default, "EMALong", OrderAction.Buy));
m_Order1 =
OrdersFactory.CreateMarketThisBar(new OrdersCreateParams(Lots.Default, "EMAShort",
OrderAction.SellShort));
m_Order2 = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "EMALongClose", OrderAction.Sell));
m_Order3 = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "EMAShortClose", OrderAction.BuyToCover));
}
protected override void Initialize(){
m_price = Bars.Close;

// メインチャートの終値をm_priceとしています

m_price2 = BarsOfData(2).Close;

// サブチャートの終値をm_price2としています

m_average1.price = price;
m_average1.length = new SeriesExpression< Int32>(delegate { return fastlength; });
m_average2.price = price;
m_average2.length = new SeriesExpression< Int32>(delegate { return slowlength; });
m_average3.price = price2;

// m_average3はサブチャートの終値に基づいています

m_average3.length = new SeriesExpression< Int32>(delegate { return fastlength2; });
m_average4.price = price2;

// m_average4はサブチャートの終値に基づいています

m_average4.length = new SeriesExpression< Int32>(delegate { return slowlength2; });
m_fastavg.DefaultValue = 0;
m_slowavg.DefaultValue = 0;
m_fastavg2.DefaultValue = 0;
m_slowavg2.DefaultValue = 0;
}
protected override void Destroy() {}
protected override void Execute(){
m_fastavg.Value = m_average1[0];
m_slowavg.Value = m_average2[0];
m_fastavg2.Value = m_average3[0];
m_slowavg2.Value = m_average4[0];

if((Functions.DoubleGreater(BarsOfData(2).CurrentBar, 1) && (Functions.CrossesOver(this, m_fastavg2, m_slowavg2)))){
longertflong = true;}
else{
longertflong = false;}

  //  BarsOfData(2).CurrentBarのところでサブチャートを選択しています
// m_fastavg2, m_slowavg2はサブチャートのEMAを意味しています



if (longertflong && ((Functions.DoubleGreater(Bars.CurrentBar, 1) && Functions.CrossesOver(this, m_fastavg, m_slowavg)))){
m_Order0.Generate();}

// Bars.CurrentBarのところでメインチャートを選択しています
// m_fastavg, m_slowavgはメインチャートのEMAを意味しています



if ((Functions.DoubleGreater(BarsOfData(2).CurrentBar, 1) && (Functions.CrossesUnder(this, m_fastavg2, m_slowavg2)))){
longertfshort = true;}
else{
longertfshort = false;}


  //  BarsOfData(2).CurrentBarのところでサブチャートを選択しています
// m_fastavg2, m_slowavg2はサブチャートのEMAを意味しています



if (longertfshort && ((Functions.DoubleGreater(Bars.CurrentBar, 1) && Functions.CrossesUnder(this, m_fastavg, m_slowavg)))){
m_Order1.Generate();}

// Bars.CurrentBarのところでメインチャートを選択しています
// m_fastavg, m_slowavgはメインチャートのEMAを意味しています



if(StrategyInfo.MarketPosition > 0){
if((Functions.DoubleGreater(Bars.CurrentBar, 1) && Functions.CrossesUnder(this, m_fastavg, m_slowavg))){
m_Order2.Generate();}}

if(StrategyInfo.MarketPosition < 0){
if((Functions.DoubleGreater(Bars.CurrentBar, 1) && Functions.CrossesOver(this, m_fastavg, m_slowavg))){
m_Order3.Generate();}}

}
}}



[当サイトで使っている自動売買システム]

FXCMはMT4よりも優れていると言っています

中身の分からないストラテジーがいやで
自分でストラテジーを作って運営しています

初めての方はこちらから
ストラテジートレーダー超入門 自動売買プログラミング編

Strategy Trader 紹介ビデオ 取扱説明 関連サイト

ストラテジートレーダー概要

ストラテジートレーダーβ版利用ガイド

日本語フォーラム
ST日本語フォーラム

[他の自動売買サイトを探す]

人気blogランキング






[相場の流れは]
FX ポータル
スポンサーサイト

コメント

初めまして。このようにソースコードの解説があるブログは初めてです。とてもすばらしいです。私が唯一苦手としている分野で、ちょっとした改良くらいしかできません。しかも全て試行錯誤です。^^; 独自ルールのインジケーターが必要な時にはまた立ち寄らせていただきます。

  • 2011/04/23(土) 19:19:47 |
  • URL |
  • pipdealer #-
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://fxrun.blog55.fc2.com/tb.php/1809-0dc45dd6
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。