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

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

スポンサーサイト

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

トラップリピート売り逆指値注文損切りあり

久々にソースコードを掲載します

今回はトラップリピートの売り専用タイプです

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

エントリーは売りのみ

最大ポジション数は10

エントリー可能価格は10種類

 (最大ポジション数やエントリー可能価格の種類を増やすには
  ソースコードのパターンに従ってコードを追加してください)

売りの逆指値注文なので、価格が下降するときにしかポジションを取得しません

1つ前のバーの終値が注文レベル以上であることがエントリーの条件になります

月曜の始値が大きく下振れして始まる場合などに注文価格から大きく離れて約定することが有ります

ポジションを名前で特定しているタイプです
ポジション価格がずれても特定します

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

パラメータ(入力項目):

1 orderprice1
  一番低いポジション価格
  (ストラテジーをスタートさせる時の現在価格を考慮する必要はない)

2 orderwidth
  ポジション間隔値

3 maxposition
  最大ポジション数

4 shareorposition
  手仕舞の方法

  * shareorposition を 1にするとCurSpecOrdersMode = SpecOrdersMode.perLot;になって
    1つのポジションごとに利益確定します

  * shareorposition を 1以外にするとCurSpecOrdersMode = SpecOrdersMode.perPosition; になって
   総ポジションの損益合計で全ポジション同時に手仕舞します

5 Profit_Target_Amount
  利益額(100円とか1000円とかで入力します)

6 Stop_Amount
  損失額(100円とか1000円とかで入力します)


  実際にストラテジーを動かすには、ストラテジーのプロパティで
  ポジション制限の許可上限を最大ポジション数に合わせておく必要があります


ソースコードは長いので「続きを読む」を参照してください
【“トラップリピート売り逆指値注文損切りあり”の続きを読む】
スポンサーサイト

RBreakerTSのソースコード

パラメータを変更したばかりのRBreakerですが、
以前から動作が不完全だったバー本数での手仕舞のところの
ソースコードを改善しました。

変更点

1  ポジションが出来てからexlengthのバー本数が経過すると強制的に手仕舞する
   仕様になっているのですが、場合によってバー本数を数えることがリセットされて
   ポジション維持が継続することが有りました。
   これを条件文を追加することによって、確実に手仕舞動作するようにしました。
   (ソースコードの赤字部分)

2  トレール動作を追加しました。(ソースコードの青字部分)
   ポジションが出来てから反対側の高値安値ラインを越えると
   指定した量だけストップ注文を変更します

概要:

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

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

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

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

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

入力項目:

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

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


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

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

private int m_plength = 20;

private int m_ylength = 2;

private int m_exlength = 10;

private int m_stopmargin = 100;

private int m_trailstep = 100;

private double m_Profit_Target_Amount = 1000;

private SeriesVar< Double> m_lowerband;

private SeriesVar< Double> m_upperband;

public RBreakerTS(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; }
}
[Input]
public int trailstep{
get { return m_trailstep; }
set { m_trailstep = value; }
}
[Input]
public double Profit_Target_Amount{
get { return m_Profit_Target_Amount; }
set { m_Profit_Target_Amount = 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 (StrategyInfo.MarketPosition <= 0){
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 (StrategyInfo.MarketPosition >= 0){
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(Bars.High[0],m_upperband[0]))
& (Functions.DoubleGreater(m_upperband[0],CurrentPosition.OpenTrades[0].Entry.Price))){
m_stopB = m_stopB+(m_trailstep*Bars.Point);
}



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.DoubleLess(Bars.Low[0],m_lowerband[0]))
& (Functions.DoubleLess(m_lowerband[0],CurrentPosition.OpenTrades[0].Entry.Price))){
m_stopS = m_stopS-(m_trailstep*Bars.Point);
}


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

タートルハンターをソースコード集に掲載

タートルハンターのソースコードをソースコード集に掲載しました

ソースコード集はこちらから

http://fxrun.blog55.fc2.com/blog-entry-1840.html

右上の「ソースコード集」からもアクセスできます

タートルハンター のソースコード

エコトレFXのタートルハンターのソースコードを掲載します

エコトレFXのホームページでの売買ルールの説明に若干曖昧なところがあるので

当方の解釈が入っています


概要:    
レンジの安値高値を更新してから大きく反転して、反対側に抜けた時にポジションを作ります

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

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

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

手仕舞は、反転した量の倍数になります


パラメータの説明:
length
 高値安値ラインを定める期間
 整数値を入力します

marginB
 買いポジションを作る時の高値ラインからの乖離価格
 pips量を入力します

marginS
 売りポジションを作る時の安値ラインからの乖離価格
 pips量を入力します

profitN
 利益値を定める倍数
 整数値を入力します

stopmargin
 損切り価格を定める時の安値高値からの乖離価格
 pips量を入力します

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

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

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

private int m_length = 3;

private int m_marginS = 50;

private int m_marginB = 50;

private int m_stopmargin = 50;

private int m_N = 9;

private SeriesVar< Double> m_lowerband;

private SeriesVar< Double> m_upperband;

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

[Input]
public int length{
get { return m_length; }
set { m_length = value; }
}

[Input]
public int marginB{
get { return m_marginB; }
set { m_marginB = value; }
}

[Input]
public int marginS{
get { return m_marginS; }
set { m_marginS = value; }
}

[Input]
public int profitN{
get { return m_N; }
set { m_N = value; }
}

[Input]
public int stopmargin{
get { return m_stopmargin; }
set { m_stopmargin = value; }
}

private IPriceOrder buy_order;

private IPriceOrder sell_order;

private IPriceOrder Exlongstop_order;

private IPriceOrder Exlongprofit_order;

private IPriceOrder Exshortstop_order;

private IPriceOrder Exshortprofit_order;

private double m_UB;

private double m_AB;

private double m_TR;

private double m_stopB;

private double m_stopS;

private double m_profitB;

private double m_profitS;


protected override void Construct() {

m_lowerband = new SeriesVar< Double>(this);

m_upperband = new SeriesVar< Double>(this);

Exshortprofit_order = OrdersFactory.CreateLimit(new OrdersCreateParams(Lots.Default,"limitS", OrderAction.BuyToCover));

Exlongprofit_order = OrdersFactory.CreateLimit(new OrdersCreateParams(Lots.Default,"limitL", OrderAction.Sell));

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

Exlongstop_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_TR = 0;
m_UB = 0;
m_AB = 0;
}

protected override void Execute(){

m_lowerband.Value = Functions.Lowest(Bars.Low, length, 1);
m_upperband.Value = Functions.Highest(Bars.High, length, 1);
      m_TR = Bars.High[0] - Bars.Low[0] ;
      m_UB = Bars.Close[0] - Bars.Low[0] ;
m_AB = Bars.High[0] - Bars.Close[0] ;

if (StrategyInfo.MarketPosition == 0){

     if (( m_UB > ((m_TR * 3) /5)) & (m_lowerband[0] > Bars.Low[0])) {

buy_order.Generate(m_upperband[0] + m_marginB * Bars.Point );
m_stopB=Bars.Low[0] - m_stopmargin*Bars.Point;
m_profitB = ((m_upperband[0]) - (Bars.Low[0]))*m_N ;
}

  if (( m_AB > ((m_TR * 3) /5)) & (m_upperband[0] < Bars.High[0])) {

sell_order.Generate(m_lowerband[0] - m_marginS * Bars.Point );
m_stopS=Bars.High[0] + m_stopmargin*Bars.Point;
m_profitS = (Bars.High[0] - m_lowerband[0])* m_N ;
}
}

if (StrategyInfo.MarketPosition == 1){

Exlongstop_order.Generate(m_stopB);
Exlongprofit_order.Generate((CurrentPosition.OpenTrades[0].Entry.Price) + m_profitB);
}

if (StrategyInfo.MarketPosition == -1){

Exshortstop_order.Generate(m_stopS);
Exshortprofit_order.Generate((CurrentPosition.OpenTrades[0].Entry.Price) - m_profitS);
}
}
}
}




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

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

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

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

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

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

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

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

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

人気blogランキング






[相場の流れは]
FX ポータル

自動売買ポジション継続ストラテジー

前回、自動売買ポジションを継続させる方法を紹介しました

今回は、ST Ranguage Editorを使って同様の機能を実現すると思われるストラテジーを紹介します

まだ確認作業が完了していませんが、ソースコードを記載しておきます

入力項目は、SetInitialBrokerPosition(EntryLots, EntryPrice, 0)の部分に関連しています

ソースコードの SetInitialBrokerPosition の部分にカーソルを当てると以下の表示がでます

int market_pos, double avg_price, double max_op

int market_posはEntryLots、double avg_priceはEntryPriceに対応します
double max_opは良く分かりませんが、最大利益価格(Maximum Position Profit Amount)だとすると
前回紹介したSTの機能と一致します(未確認です)

とりあえず入力項目を整理すると
************************

EntryPrice: そのポジションの価格を入力します

EntryLots: ロット数を入力します
      買いはプラス、売りはマイナスにします


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

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

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

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

private double entryPrice = 1;
private int entryLots = 1;

[Input]
public double EntryPrice
{
set{entryPrice = value;}
get{return entryPrice;}
}

[Input]
public int EntryLots
{
set{entryLots = value;}
get{return entryLots;}
}

protected override void Construct() {
}

protected override void Initialize() {
}

protected override void Execute(){

SetInitialBrokerPosition(EntryLots, EntryPrice, 0);

}
}
}

****************************
この週末にポジションを持ち越すことになれば
月曜に上記ストラテジーの動作を確認します


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

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

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

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

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

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

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

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

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

人気blogランキング






[相場の流れは]
FX ポータル


現在価格ラインインジケータ

現在価格ラインを表示するインジケータを土日で作ろうかと考えていたら
すでに日本語フォーラム上にソースコードが掲載されていました

良く分かっていらっしゃる方がいるようです

フォーラムのソースコードをコピーすれば良いわけですが
色の自動切換えや水平ラインの引き方の選択などの機能があるため
多少複雑になっています
勉強も兼ねて水平線を引くためのソースコードだけに単純化してみました

以下となります

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

namespace Broker.StrategyLanguage.Indicator{
public class CurrentPriceLineS : BaseIndicator {

public DrwCoordinate myDrwCo;
private SimpleVar< ITrendLineDrw> m_Plot1;
public CurrentPriceLineS(object _ctx):base(_ctx){}

protected override void Construct() {
m_Plot1 = new SimpleVar< ITrendLineDrw>(this);
}

protected override void Initialize() {
m_Plot1.DefaultValue = null;
}

protected override void Execute(){
if( Environment.RealTime == true ) {
myDrwCo = new DrwCoordinate( Bars.Time[0], Bars.Close[0] );

m_Plot1.Value = DrwTrendLine.Create(myDrwCo, myDrwCo );

m_Plot1.Value.ExtLeft = true;

}
}
}
}

**********************************
まとめると
線を引くために以下の3つのキーワードを使っています

ITrendLineDrw

DrwCoordinate

DrwTrendLine.Create


構造は
m_Plot1 = new SimpleVar< ITrendLineDrw>(this);

実際に線を引く部分は
m_Plot1.Value = DrwTrendLine.Create(new DrwCoordinate( Bars.Time[0], Bars.Close[0] ),-------);

となります

2点間を結ぶトレンドラインという機能を使っています
TrendLinesAutomaticというインジケータが搭載されているので何かの手がかりにはなります


Help ContentsのITrendLineDrawings Interfaceには

   ITrendLineDrw Create(DrwCoordinate _start, DrwCoordinate _end);

と書かれています


上記のソースコードに(Bars.Time[0], Bars.Close[0])の部分が2つありますが
startとendにあたります

Bars.Close[0]は、単純に現在バーの終値になります
Openに変更すれば始値になります

Bars.Time[0]は良く分かりません
この部分の0を変えると描かれるラインも変わりますが法則性が不明です

if( Environment.RealTime == true ) を削除すると
全てのバーから水平線が引かれるようになります
つまり現在バーに限定する条件文になります

m_Plot1.Value.ExtLeft = true;は
現在バーからチャートの左側のラインを有効にしています
これを削除するとラインが消えます


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

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

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

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

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

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

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

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

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

人気blogランキング






[相場の流れは]
FX ポータル

StSlowAdxrの改定版のソースコード

StSlowAdxrの改定版のソースコードです

改善点:
利益確定価格、損切り価格を追加しました

入力項目:
stochlength ; 
smoothinglength1 ;
smoothinglength2 ;以上3つはストキャスティックススローのパラメータ
smoothingtype ; 1で単純移動平均、2で指数移動平均
oversold ; 売られ過ぎライン(買いの利益確定ライン)
overbought ; 買われ過ぎライン(売りの利益確定ライン)
length ; Adxrの期間
adxlevel ; Adxrの基準ライン
Profit_Target_Amount :利益確定額(円)
Stop_Amount : 損切り額(円)

売買サイン:

エントリー可能条件
  ADXがADXRよりも大きい
  ADXが基準レベルadxlevelより大きい
  買いの場合、SlowKがoverboughtよりも下にある
  売りの場合、SlowKがoversoldtよりも上にある

エントリー
  SlowKがSlowDを上に抜けたら買い
  SlowKがSlowDを下に抜けたら売り

手仕舞
  SlowKがSlowDを上に抜けたら売りポジションの手仕舞
  SlowKがSlowDを下に抜けたら買いポジションの手仕舞
  SlowKがoversoldを下に抜けたら売りポジションの手仕舞
  SlowKがoverboughtを上に抜けたら買いポジションの手仕舞
  利益額がProfit_Target_Amountになったら手仕舞
  損失額がStop_Amountになったら手仕舞

感想:
通貨ペアによっては、レンジフィルターより成績が良い場合があります
ADXの変化は滑らかで、レンジフィルターの変化は急激です
そこらへんの差が成績に影響しています

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

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

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

private ISeries< Double> m_priceh;

private ISeries< Double> m_pricel;

private ISeries< Double> m_pricec;

private int m_stochlength = 14;

private int m_smoothinglength1 = 3;

private int m_smoothinglength2 = 3;

private int m_smoothingtype = 1;

private double m_oversold = 20;

private double m_overbought = 80;

private Stochastic m_stochastic1;

private double m_value1;

private SeriesVar< Double> m_ofastk;

private SeriesVar< Double> m_ofastd;

private SeriesVar< Double> m_oslowk;

private SeriesVar< Double> m_oslowd;

public Stochastic m_StochasticSlow1;


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

private IMarketOrder m_OrderBuy;

private IMarketOrder m_OrderSell;

private IMarketOrder m_OrderExlong;

private IMarketOrder m_OrderExshort;

private ISeries< Double> priceh{
get { return m_priceh; }
}

private ISeries< Double> pricel{
get { return m_pricel; }
}

private ISeries< Double> pricec{
get { return m_pricec; }
}

[Input]
public int stochlength{
get { return m_stochlength; }
set { m_stochlength = value; }
}

[Input]
public int smoothinglength1{
get { return m_smoothinglength1; }
set { m_smoothinglength1 = value; }
}

[Input]
public int smoothinglength2{
get { return m_smoothinglength2; }
set { m_smoothinglength2 = value; }
}

[Input]
public int smoothingtype{
get { return m_smoothingtype; }
set { m_smoothingtype = value; }
}

[Input]
public double oversold{
get { return m_oversold; }
set { m_oversold = value; }
}

[Input]
public double overbought{
get { return m_overbought; }
set { m_overbought = value; }
}


private int m_length = 14;

private DirMovement m_dirmovement1;

private double m_value2;

private SimpleVar< Double> m_odmiplus;

private SimpleVar< Double> m_odmiminus;

private SeriesVar< Double> m_odmi;

private SeriesVar< Double> m_oadx;

private SeriesVar< Double> m_oadxr;

private SeriesVar< Double> m_ovolty;

[Input]
public int length{
get { return m_length; }
set { m_length = value; }
}

private int m_adxlevel = 20;

private double m_Profit_Target_Amount = 3000;

private double m_Stop_Amount = 1100;

[Input]
public int adxlevel{
get { return m_adxlevel; }
set { m_adxlevel = value; }
}
[Input]
public double Profit_Target_Amount{
get { return m_Profit_Target_Amount; }
set { m_Profit_Target_Amount = value; }
}
[Input]
public double Stop_Amount{
get { return m_Stop_Amount; }
set { m_Stop_Amount = value; }
}

protected override void Construct() {

m_stochastic1 = new Stochastic(this);
m_ofastk = new SeriesVar< Double>(this);
m_ofastd = new SeriesVar< Double>(this);
m_oslowk = new SeriesVar< Double>(this);
m_oslowd = new SeriesVar< Double>(this);

m_OrderBuy = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "BUY", OrderAction.Buy));
m_OrderSell =
OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "SELL", OrderAction.SellShort));
m_OrderExlong = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "EXL", OrderAction.Sell));
m_OrderExshort = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "EXS", OrderAction.BuyToCover));

m_dirmovement1 = new DirMovement(this);
m_odmiplus = new SimpleVar< Double>(this);
m_odmiminus = new SimpleVar < Double>(this);
m_odmi = new SeriesVar< Double>(this);
m_oadx = new SeriesVar< Double>(this);
m_oadxr = new SeriesVar< Double>(this);
m_ovolty = new SeriesVar< Double>(this);
}

protected override void Initialize() {

m_priceh = Bars.High;
m_pricel = Bars.Low;
m_pricec = Bars.Close;
m_stochastic1.priceh = priceh;
m_stochastic1.pricel = pricel;
m_stochastic1.pricec = pricec;
m_stochastic1.stochlength = new SeriesExpression< Int32>(delegate { return stochlength; });
m_stochastic1.length1 = new SeriesExpression< Int32>(delegate { return smoothinglength1; });
m_stochastic1.length2 = new SeriesExpression< Int32>(delegate { return smoothinglength2; });
m_stochastic1.smoothingtype = new SeriesExpression< Int32>(delegate { return smoothingtype; });
m_stochastic1.ofastk = m_ofastk;
m_stochastic1.ofastd = m_ofastd;
m_stochastic1.oslowk = m_oslowk;
m_stochastic1.oslowd = m_oslowd;
m_value1 = default(double);
m_ofastk.DefaultValue = 0;
m_ofastd.DefaultValue = 0;
m_oslowk.DefaultValue = 0;
m_oslowd.DefaultValue = 0;

m_dirmovement1.priceh = Bars.High;
m_dirmovement1.pricel = Bars.Low;
m_dirmovement1.pricec = Bars.Close;
m_dirmovement1.length = new SeriesExpression< Int32>(delegate { return length; });
m_dirmovement1.odmiplus = m_odmiplus;
m_dirmovement1.odmiminus = m_odmiminus;
m_dirmovement1.odmi = m_odmi;
m_dirmovement1.oadx = m_oadx;
m_dirmovement1.oadxr = m_oadxr;
m_dirmovement1.ovolty = m_ovolty;
m_value2 = default(double);
m_odmiplus.DefaultValue = 0;
m_odmiminus.DefaultValue = 0;
m_odmi.DefaultValue = 0;
m_oadx.DefaultValue = 0;
m_oadxr.DefaultValue = 0;
m_ovolty.DefaultValue = 0;
}

protected override void Execute(){

m_value1 = m_stochastic1[0];
m_value2 = m_dirmovement1[0];

if (Functions.DoubleGreater(Bars.CurrentBar, 2)){

if ( Functions.CrossesOver(this, m_oslowk, m_oslowd) ){
m_OrderExshort.Generate();
}

if ( Functions.CrossesUnder(this, m_oslowk, m_oslowd) ){
m_OrderExlong.Generate();
}

if (( Functions.DoubleGreater( m_oslowk[0], m_overbought))
&&(Functions.DoubleGreater( m_overbought,m_oslowk[1] ))){
m_OrderExlong.Generate();
}

if ((Functions.DoubleGreater( m_oversold,m_oslowk[0]))
&&( Functions.DoubleGreater(m_oslowk[1],m_oversold))){
m_OrderExshort.Generate();
}

if ((Functions.DoubleGreater(m_oadx[0],m_oadxr[0]))
&& (Functions.DoubleGreater(m_oadx[0],m_adxlevel ))){

if((Functions.DoubleGreater(m_oslowd[0],m_oversold))
&&(Functions.CrossesUnder(this, m_oslowk, m_oslowd))){
m_OrderSell.Generate();
  }

if((Functions.DoubleGreater(m_overbought,m_oslowd[0]))
&&(Functions.CrossesOver(this, m_oslowk, m_oslowd))){
m_OrderBuy.Generate();
}
}

if (Functions.DoubleGreater(Profit_Target_Amount, 0)){
GenerateProfitTarget(Profit_Target_Amount);
}
if (Functions.DoubleGreater(Stop_Amount, 0)){
GenerateStopLoss(Stop_Amount);
}
}
}
}
}


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

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

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

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

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

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

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

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

人気blogランキング






[相場の流れは]
FX ポータル

StSlowRangeHigh改定版ソースコード

StSlowRangeHigh 改定版

改善点:
利益確定価格、損切り価格を追加しました
avglevelのパラメータ設定をPoint数に変更しました

入力項目:
stochlength ; 
smoothinglength1 ;
smoothinglength2 ;以上3つはストキャスティックススローのパラメータ
smoothingtype ; 1で単純移動平均、2で指数移動平均
oversold ; 売られ過ぎライン(買いの利益確定ライン)
overbought ; 買われ過ぎライン(売りの利益確定ライン)
length ; レンジフィルターの期間
avglength ; レンジフィルターの平均期間
avglevel ; レンジフィルターの基準ライン
Profit_Target_Amount :利益確定額(円)
Stop_Amount : 損切り額(円)

売買サイン:

エントリー可能条件
  AvgRangeがavglevelよりも大きい
  rangeがavgrangeよりも大きい
  買いの場合、SlowKがoverboughtよりも下にある
  売りの場合、SlowKがoversoldtよりも上にある

エントリー
  SlowKがSlowDを上に抜けたら買い
  SlowKがSlowDを下に抜けたら売り

手仕舞
  SlowKがSlowDを上に抜けたら売りポジションの手仕舞
  SlowKがSlowDを下に抜けたら買いポジションの手仕舞
  SlowKがoversoldを下に抜けたら売りポジションの手仕舞
  SlowKがoverboughtを上に抜けたら買いポジションの手仕舞
  利益額がProfit_Target_Amountになったら手仕舞
  損失額がStop_Amountになったら手仕舞

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

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

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

private ISeries< Double> m_priceh;

private ISeries< Double> m_pricel;

private ISeries< Double> m_pricec;

private int m_stochlength = 14;

private int m_smoothinglength1 = 3;

private int m_smoothinglength2 = 3;

private int m_smoothingtype = 1;

private double m_oversold = 20;

private double m_overbought = 80;

private Stochastic m_stochastic1;

private double m_value1;

private SeriesVar< Double> m_ofastk;

private SeriesVar< Double> m_ofastd;

private SeriesVar< Double> m_oslowk;

private SeriesVar< Double> m_oslowd;

public Stochastic m_StochasticSlow1;


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

private IMarketOrder m_OrderBuy;

private IMarketOrder m_OrderSell;

private IMarketOrder m_OrderExlong;

private IMarketOrder m_OrderExshort;

private ISeries< Double> priceh{
get { return m_priceh; }
}

private ISeries< Double> pricel{
get { return m_pricel; }
}

private ISeries< Double> pricec{
get { return m_pricec; }
}

[Input]
public int stochlength{
get { return m_stochlength; }
set { m_stochlength = value; }
}

[Input]
public int smoothinglength1{
get { return m_smoothinglength1; }
set { m_smoothinglength1 = value; }
}

[Input]
public int smoothinglength2{
get { return m_smoothinglength2; }
set { m_smoothinglength2 = value; }
}

[Input]
public int smoothingtype{
get { return m_smoothingtype; }
set { m_smoothingtype = value; }
}

[Input]
public double oversold{
get { return m_oversold; }
set { m_oversold = value; }
}

[Input]
public double overbought{
get { return m_overbought; }
set { m_overbought = value; }
}


private int m_length = 20;
private int m_avglength = 40;
private double m_avglevel = 600;

private double m_avgrange;

private SeriesVar< Double> m_lowerband;

private SeriesVar< Double> m_upperband;

private SeriesVar< Double> m_range;

private double m_Profit_Target_Amount = 5000;

private double m_Stop_Amount = 1100;

[Input]
public int length{
get { return m_length; }
set { m_length = value; }
}
[Input]
public int avglength{
get { return m_avglength; }
set { m_avglength = value; }
}

[Input]
public double avglevel{
get { return m_avglevel; }
set { m_avglevel = value; }
}
[Input]
public double Profit_Target_Amount{
get { return m_Profit_Target_Amount; }
set { m_Profit_Target_Amount = value; }
}
[Input]
public double Stop_Amount{
get { return m_Stop_Amount; }
set { m_Stop_Amount = value; }
}

protected override void Construct() {

m_stochastic1 = new Stochastic(this);
m_ofastk = new SeriesVar< Double>(this);
m_ofastd = new SeriesVar< Double>(this);
m_oslowk = new SeriesVar< Double>(this);
m_oslowd = new SeriesVar< Double>(this);

m_OrderBuy = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "BUY", OrderAction.Buy));
m_OrderSell = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "SELL", OrderAction.SellShort));
m_OrderExlong = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "EXL", OrderAction.Sell));
m_OrderExshort = OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "EXS", OrderAction.BuyToCover));

m_lowerband = new SeriesVar< Double>(this);
m_upperband = new SeriesVar< Double>(this);
m_range = new SeriesVar< Double>(this);
}

protected override void Initialize() {

m_priceh = Bars.High;
m_pricel = Bars.Low;
m_pricec = Bars.Close;
m_stochastic1.priceh = priceh;
m_stochastic1.pricel = pricel;
m_stochastic1.pricec = pricec;
m_stochastic1.stochlength = new SeriesExpression< Int32>(delegate { return stochlength; });
m_stochastic1.length1 = new SeriesExpression< Int32>(delegate { return smoothinglength1; });
m_stochastic1.length2 = new SeriesExpression< Int32>(delegate { return smoothinglength2; });
m_stochastic1.smoothingtype = new SeriesExpression< Int32>(delegate { return smoothingtype; });
m_stochastic1.ofastk = m_ofastk;
m_stochastic1.ofastd = m_ofastd;
m_stochastic1.oslowk = m_oslowk;
m_stochastic1.oslowd = m_oslowd;
m_value1 = default(double);
m_ofastk.DefaultValue = 0;
m_ofastd.DefaultValue = 0;
m_oslowk.DefaultValue = 0;
m_oslowd.DefaultValue = 0;

m_lowerband.DefaultValue = 0;
m_upperband.DefaultValue = 0;
m_range.DefaultValue = 0;
m_avgrange = 0;
}

protected override void Execute(){

m_value1 = m_stochastic1[0];

m_lowerband.Value = Functions.Lowest(Bars.Low, length, 0);
m_upperband.Value = Functions.Highest(Bars.High, length, 0);
m_range.Value = m_upperband.Value - m_lowerband.Value ;
m_avgrange = Functions.Average(m_range, avglength);


if (Functions.DoubleGreater(Bars.CurrentBar, 2)){

if ( Functions.CrossesOver(this, m_oslowk, m_oslowd) ){
m_OrderExshort.Generate();
}

if ( Functions.CrossesUnder(this, m_oslowk, m_oslowd) ){
m_OrderExlong.Generate();
}

if (( Functions.DoubleGreater( m_oslowk[0], m_overbought))
&&(Functions.DoubleGreater( m_overbought,m_oslowk[1] ))){
m_OrderExlong.Generate();
}

if ((Functions.DoubleGreater( m_oversold,m_oslowk[0]))
&&( Functions.DoubleGreater(m_oslowk[1],m_oversold))){
m_OrderExshort.Generate();
}


if ((Functions.DoubleGreater(m_avgrange, m_avglevel*Bars.Point))

&&(Functions.DoubleGreater(m_range[0], m_avgrange))){

if((Functions.DoubleGreater(m_oslowd[0],m_oversold))
&&(Functions.CrossesUnder(this, m_oslowk, m_oslowd))){
m_OrderSell.Generate();
  }

if((Functions.DoubleGreater(m_overbought,m_oslowd[0]))
&&(Functions.CrossesOver(this, m_oslowk, m_oslowd))){
m_OrderBuy.Generate();
  
}
}
if (Functions.DoubleGreater(Profit_Target_Amount, 0)){
GenerateProfitTarget(Profit_Target_Amount);
}
if (Functions.DoubleGreater(Stop_Amount, 0)){
GenerateStopLoss(Stop_Amount);
}
}
}
}
}


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

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

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

ソースコードは右上の「稼働ストラテジー」から参照できます

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

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

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

人気blogランキング






[相場の流れは]
FX ポータル

トラップリピートイフダン売りのソースコード

トラップリピートイフダンの売りバージョンのソースコードです

かなり長いので「続きを読む」を参照してください


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

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

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

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

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

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

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

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

人気blogランキング






[相場の流れは]
FX ポータル
吉田さん ドルは売られ過ぎ
陳さん  有事のドル
西原さん オージーは注意、逃避通貨はスイス
松田さん ユーロはチキン
今井さん 中東情勢で円安が反転 欧州通貨は乱高下? 【“トラップリピートイフダン売りのソースコード”の続きを読む】

エコトレ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 ポータル
次のページ

FC2Ad

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