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

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

スポンサーサイト

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

エコトレFXのRBreakerのソースコード

エコトレFXのRBreakerのソースコードを掲載します

正式な名前は、RBreakerS2としました

ストラテジーのバリエーションがいろいろと考えられます
S2の部分を変更して対応します

概要:

安値高値を更新してからすぐに反転した場合にポジションを作ります

損切りの逆指値を直近の安値高値近辺に設定するので
損切り値が比較的小さくなります

その分、負け数が多く成りますが
勝った時の利益を大きくして儲けます

大きく負けたくない人に向きそうです

手仕舞は、逆サインのドテンと経過バー本数によります
他の手仕舞方法があっても良いような気がします

入力項目:

1 plength  PriceChannelの期間(過去の高値安値の期間)
2 ylength  エントリーをさせないための現在バーからのバー本数
       例えばylengthを4にすると、
       過去の高値安値のバーが現在バーから4本以上過去になる場合のみエントリー条件が成立する
これによって、高値安値を連続して更新している場合のドテンが禁止されます
3 exlength ポジションが出来てからこの数のバー本数が経過すると強制的に手仕舞する
4 stopmargin 逆指値を過去の高値安値からstopmarginだけ離して設定する

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

using System;
using System.Drawing;
using Broker.StrategyLanguage.Function.BuiltIn;
using Fx2GoCommon;

namespace Broker.StrategyLanguage.Strategy {
public class RBreakerS2 : BaseStrategyAdvisor {

private int m_plength = 20;

private int m_ylength = 2;

private int m_exlength = 10;

private int m_stopmargin = 100;

private SeriesVar< Double> m_lowerband;

private SeriesVar< Double> m_upperband;

public RBreakerS2(object _ctx):base(_ctx){}

[Input]
public int plength{
get { return m_plength; }
set { m_plength = value; }
}

[Input]
public int ylength{
get { return m_ylength; }
set { m_ylength = value; }
}
[Input]
public int exlength{
get { return m_exlength; }
set { m_exlength = value; }
}
[Input]
public int stopmargin{
get { return m_stopmargin; }
set { m_stopmargin = value; }
}


private IPriceOrder buy_order;

private IPriceOrder sell_order;

private IPriceOrder Exlong_order;

private IPriceOrder Exshort_order;

private IMarketOrder ExitS_order;

private IMarketOrder ExitB_order;

private double m_myvalH;

private int m_mybarH;

private double m_myvalL;

private int m_mybarL;

private int m_value1;

private double m_stopB;

private double m_stopS;

private int m_entrybarB;

private int m_entrybarS;


protected override void Construct() {

m_lowerband = new SeriesVar< Double>(this);

m_upperband = new SeriesVar< Double>(this);

ExitS_order = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default,"ExitS", OrderAction.BuyToCover));

ExitB_order = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default,"ExitB", OrderAction.Sell));

Exshort_order = OrdersFactory.CreateStop(new OrdersCreateParams(Lots.Default,"stopS", OrderAction.BuyToCover));

Exlong_order = OrdersFactory.CreateStop(new OrdersCreateParams(Lots.Default,"stopL", OrderAction.Sell));

sell_order = OrdersFactory.CreateStop(new OrdersCreateParams(Lots.Default,"Sell", OrderAction.SellShort));

buy_order = OrdersFactory.CreateStop(new OrdersCreateParams(Lots.Default,"Buy", OrderAction.Buy));
}
protected override void Initialize() {

m_lowerband.DefaultValue = 0;
m_upperband.DefaultValue = 0;

m_myvalH = 0;
m_mybarH = 0;
m_myvalL = 0;
m_mybarL = 0;
m_value1 = 0;
}


protected override void Execute(){

m_myvalH = Bars.High[1];
m_mybarH = 0;
for (m_value1 = 1; m_value1 <= plength - 1; ++m_value1){
if (Functions.DoubleGreater(Bars.High[m_value1], m_myvalH)){
m_mybarH = m_value1;
}
}

m_myvalL = Bars.Low[1];
m_mybarL = 0;
for (m_value1 = 1; m_value1 <= plength - 1; ++m_value1){
if (Functions.DoubleLess(Bars.Low[m_value1], m_myvalL)){
m_mybarL = m_value1;
}
}

m_lowerband.Value = Functions.Lowest(Bars.Low, plength, 1);
m_upperband.Value = Functions.Highest(Bars.High, plength, 1);


if ((Functions.DoubleGreater( m_lowerband[0],Bars.Close[0]) )
& (Functions.DoubleGreater(m_mybarL, ylength))){
buy_order.Generate(m_lowerband[0]);
m_entrybarB = Bars.CurrentBar;
}

if ((Functions.DoubleGreater(Bars.Close[0],m_upperband[0]) )
& (Functions.DoubleGreater(m_mybarH, ylength))){
sell_order.Generate(m_upperband[0]);
m_entrybarS = Bars.CurrentBar;
}

if (StrategyInfo.MarketPosition > 0){

if (Bars.CurrentBar==(m_entrybarB+1)){
if (Functions.DoubleLess(Bars.Low[0],Bars.Low[1])){
m_stopB=Bars.Low[0];
}
if (Functions.DoubleLessEquals(Bars.Low[1],Bars.Low[0])){
m_stopB=Bars.Low[1];
}
}

if (Functions.DoubleGreater(m_exlength,(Bars.CurrentBar - m_entrybarB))){
Exlong_order.Generate(m_stopB-m_stopmargin*Bars.Point);
}
else {
ExitB_order.Generate();
}
}

if (StrategyInfo.MarketPosition < 0){

if (Bars.CurrentBar==(m_entrybarS+1)){
if (Functions.DoubleGreater(Bars.High[0],Bars.High[1])){
m_stopS=Bars.High[0];
}
if (Functions.DoubleGreaterEquals(Bars.High[1],Bars.High[0])){
m_stopS=Bars.High[1];
}
}

if (Functions.DoubleGreater(m_exlength,(Bars.CurrentBar - m_entrybarS))){
Exshort_order.Generate(m_stopS+m_stopmargin*Bars.Point);
}
else {
ExitS_order.Generate();
}
}
}
}

}


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

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

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

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

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

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

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

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

人気blogランキング






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

コメント

コメントの投稿


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

トラックバック

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

FC2Ad

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