検索結果

タグ検索

FX自動売買「Dr.EAのブログ」で“PipMaker”タグの付いているブログ記事

下記のエントリー(記事)が検索結果となります。

PipSHakerのアルゴリズム2



今回は、前回の記事「PipSHakerのアルゴリズム1」のつづきです。


でわ、さっそく

オーダー部分です。

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 以上のとき、
 それをクローズ。

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

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

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

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

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


といった感じです。

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


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

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

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


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

void CloseWin()

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

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


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

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


でわ、このへんで。

タグ

2008年6月 1日|コメント (17)

カテゴリー:EAの作成方法

PipSHakerのアルゴリズム1



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

まずは、パラメータですが、内容は過去記事の「PipShakerOne」を参照して確認してください。


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を決定します。


今日は、このへんで。
次回は、この続きでオーダーの部分からです。

タグ

2008年5月31日|コメント (1)

カテゴリー:EAの作成方法

PipShakerOne



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

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


PipShakerOne.zip(ex4ファイル)


パラメータ

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

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

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

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

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

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


使用上の注意

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


基本的な動き

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

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


でわ、このへんで。

タグ

2008年5月26日|コメント (11)

カテゴリー:MetaTrader EA

PipShakerV4誕生!!


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

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

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


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


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

PipShakerV2の1999-2007年バックテスト結果

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

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

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


1999年
PipShakerV4の1999年バックテスト結果年利:188%


2000年
PipShakerV4の2000年バックテスト結果年利:442%


2001年
PipShakerV4の2001年バックテスト結果年利:167%


2002年
PipShakerV4の2002年バックテスト結果年利:242%


2003年
PipShakerV4の2003年バックテスト結果年利:1590%!


2004年
PipShakerV4の2004年バックテスト結果年利:3429%!!


2005年
PipShakerV4の2005年バックテスト結果年利:1572%!


2006年
PipShakerV4の2006年バックテスト結果年利:270%


2007年
PipShakerV4の2007年バックテスト結果年利:48%^^;


早速、デモ開始です。


でわでわ。

タグ

2008年4月16日|コメント (12)

カテゴリー:MetaTrader EA

PipMakerを改造


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

改造した点

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

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


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

→EURUSDのテスト結果

→USDJPYのテスト結果


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

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

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


でわこのへんで。

タグ

2008年4月 7日|コメント (15)

カテゴリー:MetaTrader EA

聖杯EAの原石の原石!?PipMaker


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

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

PMsimple.zip(mq4ファイル)

また、報告お願い致しますm(..)m

タグ

2008年3月28日|コメント (20)

カテゴリー:MetaTrader EA

聖杯EAの原石!!PipMaker


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

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

PipMakerV9-1.zip(mq4ファイル)


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

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

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

PipMakerV9-1トレイリング(日足ベース14日ATRの三倍のストップ)

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


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


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

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

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


でわ、このへんで。

ありがとうございます。

タグ

2008年3月26日|コメント (31)

カテゴリー:MetaTrader EA