完全自動売買への道のりのメニューは右サイドにあります→

2008年06月01日

PipSHakerのアルゴリズム2


今回は、前回のつづきです。


でわ、さっそく

オーダー部分です。

TrendSignが1の時

ロットの大きさを決めて、

買いロット合計がMaxTotalLots以内なら

買いオーダー送信。約定されたらtrade1をtrueに。


TrendSignが-1の時

同様に売りのオーダーです。


続いてクローズの部分です。

double WinTotal=BuyWinTotal+SellWinTotal;
double HighPoint = MathMax(HighestBuy, HighestSell);
double LowPoint = MathMin(LowestBuy, LowestSell);
double MidPoint = (HighPoint + LowPoint) / 2;


と変数の宣言をします。

WinTotal 利益が出ているポジションの利益合計
HighPoint 保持ポジションの中の最高値
LowPoint 保持ポジションの中の最安値
MidPoint HighPointとLowPointの中間値

といった感じです。


いよいよ、ここからがPipShakerのシンズイです!


@買いポジションを2つ保持、売りポジション無しで、
最安値の方の買いポジションの利益が ProfitTarget 以上のとき、
 それをクローズ。

A売りポジション無し、かつ、買いポジションが1つ以外で
 買いポジションで利益が出ているものの利益合計と、一番高く買ったポジションの損益との和が ProfitTarget 以上のとき、
一番高く買ったポジションをクローズ。
利益が出ているもの全部をクローズ。(←CloseWin()という関数を作って実行しています)

B買いポジション無し、売りポジション2つ保持で、
最高値の方の売りポジションの利益が ProfitTarget 以上のとき、
 それをクローズ。

C買いポジション無し、かつ、売りポジションが1つ以外で
 売りポジションで利益が出ているものの利益合計と、一番安く売ったポジションの損益との和が ProfitTarget 以上のとき、
一番安く売ったポジションをクローズ。
利益が出ているもの全部をクローズ。

D合計ポジション数が1より大きい(2以上の)とき
買値がMidPoint(保持ポジションの中間値)より上の場合で、
利益が出ているものの利益合計と、一番安く売ったポジションの損益との和が ProfitTarget 以上のとき、
 一番安く売ったポジションをクローズ。
利益が出ているもの全部をクローズ。

売値がMidPoint(保持ポジションの中間値)より下の場合で、
利益が出ているものの利益合計と、一番高く買ったポジションの損益との和が ProfitTarget 以上のとき、
 一番高く買ったポジションをクローズ。
利益が出ているもの全部をクローズ。


といった感じです。

@〜Cはディテールでより効率よく取引するためのもの。
DはPipMakerに似てますが、利益が出ているポジション全体で一番離れているポジションを相殺するようにしてあります。


次に、オブジェクト部分、ストップロス、トレイリングストップ
と続きます。
これらは、特に変わったことが無いので省略します。

トレイリングストップの部分で
if(OrdersTotal()==1 && trailingpips!=0)

if(BuyOrders + SellOrders==1 && trailingpips!=0)
に変えたほうがいいですね^^;


スタート関数を閉じた後に、

void CloseWin()

として、CloseWin()関数を作っています。

これは、利益が出ているポジション全てをクローズするといった関数になっています。


これで、おしまいですね。

サラッとだけでしたので、分からないところとかは、コメントでよろしくお願いします^^;


でわ、このへんで。
posted by 慶次 at 19:41 | Comment(15) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング

2008年05月31日

PipSHakerのアルゴリズム1


今回は、PipShakerOneのコードを使って、アルゴリズムをみていきましょう!
PipShakerV4はPipShakerOneのエントリ部分が違う感じですが、あとは大体同じです。
PipShakerOneのコードを入手できなかった人は、コードをイメージしながら読んでみてください^^;



まずは、パラメータですが、内容は

http://samuraifx.seesaa.net/article/98000697.html

こちらの記事で確認してください。


double lotstep;
int lotsizing;

など記述がございますが、今回は関係ありません。
複利機能のなごり(消し忘れ)です^^;


続いて、start関数の中を見てみましょう!

double BuyLots, SellLots;
int BuyOrders = 0, SellOrders = 0;
double LowestBuy = 999, HighestBuy = 0.0001, LowestSell = 999, HighestSell = 0.0001;
double Profit, BuyProfit, SellProfit, BuyWinTotal, SellWinTotal;
int HighestBuyTicket, LowestBuyTicket, HighestSellTicket, LowestSellTicket;
double HighestBuyProfit, LowestBuyProfit, HighestSellProfit, LowestSellProfit;



変数の宣言です。

BuyLots, SellLots; 買いのロット合計,売りのロット合計
BuyOrders, SellOrders; 買いのポジション数,売りのポジション数
LowestBuy, HighestBuy; 買いポジションの中で最安値と最高値
LowestSell, HighestSell; 売りポジションの中で最安値と最高値
Profit; ポジションの損益を代入するためだけの便利変数^^;
BuyProfit, SellProfit; 買いの損益合計,売りの損益合計
BuyWinTotal, SellWinTotal; 買いの利益合計,売りの利益合計
HighestBuyTicket,LowestBuyTicket,HighestSellTicket,LowestSellTicket;
売り買いのポジションの最安値最高値のチケットナンバー
HighestBuyProfit,LowestBuyProfit,HighestSellProfit,LowestSellProfit;
売り買いのポジションの最安値最高値の損益


という感じです。

PipShakerでは、使わない変数もいくつかありますが、
改造する時とかに使えるものもあるかもですね。


つづいての73行目から128行目までのfor文は
現在保持しているポジションの情報を各変数に代入する
ための文です。

一つずつ丁寧に調べて代入!って感じです。


次に、シグナル部分に入ります。
変数の宣言int TrendSign,TradeSpace;
TrendSign シグナル
TradeSpace ←不要ですので削除してください

Trend に現在のバーの移動平均
TrendPrev に一つ前のばーの移動平均

を代入します。


シグナルの条件

if(BuyOrders + SellOrders <1 && TimeCurrent()>=Date1 && trade1==false)
{
if (buy0sell1==0) TrendSign=1;
if (buy0sell1==1) TrendSign=-1;
}


ポジションが無くて、Date1以降でtrade1がfalseの場合、
buy0sell1==0 のとき TrendSignに1を代入。
buy0sell1==1 のとき TrendSignに-1を代入。



if(BuyOrders + SellOrders >0 && TrendPrev != 0)
{


もし、ポジションがあり、TrendPrevが0ではない場合


// BUY Trade Criteria
if (TrendPrev < Trend)
{
if (Ask < LowestBuy - (Spacing * Point) || Ask > HighestBuy + (Spacing * Point))  TrendSign=1;
if(BuyOrders ==1 && SellOrders==0 && Ask > HighestBuy )  TrendSign=0;
}


移動平均が上昇の場合で、
現在の買値が買いポジションの最安値よりSpacing ピプス低いか、
現在の買値が買いポジションの最高値よりSpacing ピプス高いとき、
TrendSignに1を代入。
もし、買いポジションを1つだけ持っていて、売りポジションをもっていなくて、現在の買値が買いポジションより高いとき、
TrendSignを0にする。


// SELL Trade Criteria
if (TrendPrev > Trend)
{
if (Bid < LowestSell - (Spacing * Point) || Bid > HighestSell + (Spacing * Point))  TrendSign=-1;
if(BuyOrders ==0 && SellOrders==1 && Bid < LowestSell )
TrendSign=0;
}
}


移動平均が下降の場合、

同じ感じでTrendSignを決定します。


今日は、このへんで。
次回は、この続きでオーダーの部分からです。
posted by 慶次 at 19:40 | Comment(1) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング

2008年05月26日

PipShakerOne


今回は、PipShakerの単発版、PipShakerOneというEAを作ってみました!

PipShakerの最初のエントリ(日時と売り買い)をパラメータで決定、その後PipShaker作動し、ポジションがなくなれば終了。
といった感じです。


→PipShakerOne.ex4


パラメータ

第一取引設定
Date1 最初のエントリの時間
buy0sell1 最初のエントリの売りか買いか
(「買い」は0、「売り」は1を入力)

最少単位での設定
MaxLotSize 最大ロット数
LotSize 最初のエントリのロット数
LotIncrement 買い増し時、売り増し時のロット増加数
MaxTotalLots 1方向の合計ロット数の上限
ProfitTarget 目標利益(単位は口座通貨と同じ)

Spacing ポジショニング用スペース(単位:ピプス)

移動平均線設定
TrendTimeFrame 平均線の時間足(1・5・15…)
TrendPeriods 平均線の計算期間

EA設定
comment コメント
MagicNumber マジックナンバー

trailingpips トレイリングストップ(単位:ピプス)
stoploss 損切り値(単位:ピプス)


使用上の注意

EA作動開始から、移動平均線の計算期間分は買い増し売り増しを行なわないので、開始からエントリの間に余裕を持たせてください。


基本的な動き

価格から一番遠いポジションを利益が出ているポジション全体で相殺する感じです。
ポジションが一つになったら、トレイリングで追っかける感じです。

いろいろ試してみてください。


でわ、このへんで。
posted by 慶次 at 09:22 | Comment(11) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング

2008年04月16日

PipShakerV4誕生!!



PipMakerはポジション同士のチームワークで利益を上げていきます。
これは、最大の特徴で強みですが、場合によっては弱点でもあります。

弱点をカバーするために、保有可能ポジション数を少なくすると、
かえってチームワークが機能しなくなり利益が出ません。

なので、ある程度ポジション数は保有できるように、資金量が必要です。
ですが、Micro Lot(0.01ロット)単位なら、必要資金も10分の1になるのでPipMakerを使うには向いているかと思います。


今回は、PipMakerを改造して、『PipShaker』というものを作ることに成功しました!


Micro Lot最少単位での取引(1999〜2007)

StrategyTester(PSV21999-2007m).gif



9年間での最大ドローダウンが$651.55なので、Micro Lotでも最低資金数十万円は必要のようですね!



さらに、年末の仕掛け的な動きにダマされることが多いようなので、
12月はお休みする『PipShakerV4』を作りました。

リスクを大きめにとって複利での1年ごとのバックテスト結果↓


1999年
StrategyTester(PSV41999m2000).gif年利:188%


2000年
StrategyTester(PSV42000m2000).gif年利:442%


2001年
StrategyTester(PSV42001m2000).gif年利:167%


2002年
StrategyTester(PSV42002m2000).gif年利:242%


2003年
StrategyTester(PSV42003m2000).gif年利:1590%!


2004年
StrategyTester(PSV42004m2000).gif年利:3429%!!


2005年
StrategyTester(PSV42005m2000).gif年利:1572%!


2006年
StrategyTester(PSV42006m2000).gif年利:270%


2007年
StrategyTester(PSV42007m2000).gif年利:48%^^;


早速、デモ開始です。


でわでわ。
posted by 慶次 at 11:38 | Comment(12) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング

2008年04月07日

PipMakerを改造



今回は、PipMakerを改造したもののバックテストをアップしたいと思います。

改造した点

トレンド方向へ動いた時の無駄を無くす等、細かなところを効率化しました。
(トレイリングなど)

常にポジションを持っているのではなく、出来るだけ損切りをしなくてすむような状況を狙い撃ちして、ポジションをとるようにしました。
(フィルタをつけました)


パラメータは同じで、最少ロットでテストしました。

→EURUSDのテスト結果

→USDJPYのテスト結果


まだまだ、良くなりそうですね!
もう少し、研究を続けたいと思います!



また、PMsimpleのパラメータを説明しますね。
MaxLotSize 最大ロット数
LotSize 最少ロット数
Lotincrement 増加ロット数
ProfitTarget 目標利益
TrendProfitTarget トレンド方向の目標利益
Spacing 買い増し売り増しするときの必要ピプス
TrendSpacing トレンド方向のSpacing
TrendTimeFrame 移動平均の使用時間足
TrendPeriods 移動平均の計算期間

といった感じです。
PipMakerV9-1には、ポジションサイジングなどのパラメータがありますがややこしくなってしまいますので、
無くしました^^;


でわこのへんで。
posted by 慶次 at 10:04 | Comment(15) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング

2008年03月28日

聖杯EAの原石の原石!?

前回紹介しました、PipMakerですが、エラーが出てしまうといった報告がありました。

まだ、原因が分かってませんが、PipMakerV9-1のいろいろな機能を削って骨の部分だけのものを作りました。

→PMsimple.mq4ダウンロード

また、報告お願い致しますm(..)m
posted by 慶次 at 19:10 | Comment(16) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング

2008年03月26日

聖杯EAの原石!!

http://www.forex-tsd.com/expert-advisors-metatrader-4/8126-pipmaker-v1-price-action-based-ea.html

で、無料公開されているEA、PipMakerV9-1をデモ取引で試してみました!

→PipMakerV9-1.mq4ダウンロード


ものすごい勢いで残高が増えて行きます。
デモで体験してみてください!

バックテスト結果を見ると、時々塩漬け状態になるポジションが発生しますが、他のポジションで相殺する感じですね。ポジション同士のチームワークで勝ち続けるシステムです。なので、ある程度の残高が必要になります。

しかし、相殺できないときがありドローダウンが大きくなりすぎると破産します。
そうならないために、掲示板ではいろいろなバージョンがありますが、PipMakerV9-1にランダムエントリーでも利益を出すあのトレイリング(日足ベース14日ATRの三倍のストップ)を付け加えてみました!

TesterGraph(PM9TR3).gif

2000年から2007年のUSDJPY1分足(データはMeta Quates)でのバックテストのグラフです。
(1分足なのでModelling Qualityは25%です)


http://codebase.mql4.com/en/2595
のような1分足のバックテストの特異性を利用したものではないです^^;


8年間で数回(数年に1度の割合)、数ヵ月分の大きな損失が発生しました。

まだ、コードをしっかりと解読していないので、なんともいえませんが、
ほとんどの通貨ペア、時間足で有効なので、
ポジションサイズ、塩漬けの相殺方法または損切り方法次第で最強の聖杯になると思います。

今後、PipMakerのコード解読、戦略研究をしていきたいと思います!


でわ、このへんで。

ありがとうございます。
posted by 慶次 at 09:14 | Comment(19) | PipMaker戦略研究
Ranking of FX→ FXシステムトレード派 人気ブログランキング 人気fxブログランキング