2008年1月の記事一覧

コメントの不具合


昨日いただいたコメントがブログに反映されないといった不具合が生じております。

現在サーバーサイドに問い合わせ中なので記事で紹介させていただきたいと思います。


さかやんさん
あの田平さんのロジックを自動売買化されたのですね? このソースは公表されないのでしょうか?

そうですね^^;
田平さんのロジックは中・長期取引になっていて取引回数が非常に少なく自動売買にしなくても大丈夫そうでした。
でも、短期売買にも応用できる部分がありますので、参考になる基本的な手法だと思います。
ロジックの公開は著作権の問題もございますので控えたいと思います。
ゴメンなさい^^;


h-riverさん
こんにちは 今日はじめてこちらのブログを拝見しました。 さて、わたしはMetaTrader4での取引を始めようかと考えています。なかでもMulti_Lot_Scalperによる自動売買にかなり興味があります。 ひとつ不明な点があるので、教えてください。 Multi_Lot_Scalperは、日本円口座にて行おうと思っていますが、これをそのまま使用しても大丈夫なのでしょうか? おそらくオリジナルはドル、またはユーロなど日本円口座以外を想定しているかと思いますが、日本円口座ではじめる場合は、なにか変更しなければいけないことがあるのでしょうか? とても初歩的な質問ですいませんが、 よろしくお願いいたします。

こんにちわ。
Multi_Lot_ScalperをEURUSDの4時間足、日本円口座で取引するという前提で
オリジナルのコードを見ていきましょうか。

if(AccountisNormal == 1)
if(mm != 0)
lotsi = MathCeil(AccountBalance()*risk/10000);
else
lotsi=Lots;
else
// then is mini
if(mm != 0)
lotsi = MathCeil(AccountBalance()*risk / 10000) / 10;
else
lotsi = Lots;

ここで、ロット数が決まるわけです。
パラメータのAccountisNormalが1の場合でmmが0ではないとき
ロット数は口座残高×risk÷10000
mmが0のときロット数はパラメータのLots
パラメータのAccountisNormalが1ではない場合でmmが0ではないとき
ロット数は口座残高×risk÷10000÷10
mmが0のときロット数はパラメータのLots

ここで決まったロット数というのは第一取引のロット数です。
このシステムはナンピンシステムなので
仮に0.1ロット(1ロット=10万通貨なのでこの場合1万通貨)と計算された場合、
次は0.2ロット、その次は0.4、0.8、1.6、3.2ロットとなって行きます。
MaxTradesの数が7だとすると合計12.7ロットになり、第一取引のロット数の127倍の通貨で取引することになります。

例えば最大レバレッジ100倍、残高100万円、EURUSDで取引するとして、第一取引のロット数を0.1ロットになるようにした場合、
第一取引の必要証拠金は現在で1万6000円前後。5個目までの合計ロット数が3.1ロットなので、必要証拠金は約50万円。
ナンピンピプスを10ピプスに設定したとき、この時点での含み損は約6万円。20ピプスにしたときはその倍の約12万円。
6個目は証拠金不足でオリジナルのシステムでは取引しないようになってます。

このようなシステムということは十分にご理解ください。

ということで、
口座残高100万円でAccountisNormal が 1 のとき risk が 10 で
第一取引のロット数が0.1になるように変えてみましょうか。

lotsi = MathCeil(AccountBalance()*risk/10000);

のところを

lotsi = NormalizeDouble(AccountBalance()*risk/100000000,1);

ですね。
残高×リスクが1000万になるわけですから、1億で割ってあげれば0.1になりますね!

AccountisNormal が 1 以外のときのほうは10億で割ってあげましょうか。

mmが0のときは、ロット直接入力なのでそのままでいいですね。


一応、Multi_Lot_Scalperの改造版MetatoreLotScalperV2に口座切り替え機能を付け加えたのでアップしますね!

MetatoreLotScalperV3.zip

常にポジションを持つバージョン
MetatoreLotScalperV4.zip

ご使用は自己責任でお願い致します。

他に不明な点がありましたら、聞いてくださいね!


jpyuserさん
VolAve今月100ピプス行きましたね! ありがとうございます!

VolAveの調子がよくてよかったです^^;
実は、MetatoreADXというEURUSD5分足使用のEAのダウンロードリンクを3日前まで設置していましたが気づきましたでしょうか?
そちらは、まだデモ検証段階ですが今月は200ピプス取れてます。
また、プレゼント企画が出来そうです!

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

カテゴリー:その他

Multi_Lot_Scalperの改造


今回も、Multi_Lot_Scalperの解読のつづきです。

前回作ったものを、少し改良しました!

MetatoreLotScalperV2.zip(mq4ファイル)


今回の改良点

このシステムは、資産が多ければ多いほど有利なシステムなので、
ロット数を少なめにするようにしました。(ドル口座での計算です)

手仕舞いしたバーでは取引しないようにし、
資産のパーセンテージで利食い、損切りできるようにしました。

手仕舞いしたバーでも取引するバージョン
MetatoreLotScalperV4.zip(mq4ファイル)

パラメータで

ProfitPer

は含み益が資産の何%に達したら利食いするという値。

LossPer

は含み損が資産の何%になったら損切りするという値です。

Pips

は何ピプス損失方向に動いたらナンピンするという値です。

xlot

はナンピン時のロット数を、前回の何倍にするかという値です。


シグナルの部分はそのままなのでフィルタをつけるなどして試してみてくださいね。

シグナルはMACDなので、フィルタはストキャスなどのオシレーター系が良いかと思います。


今回は、コードの説明は無いですが、気になる部分などありましたらコメントしてくださいね!


でわ、手短ですがこのへんで^^;


応援お願い致します!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング

タグ

2008年1月27日|コメント (10)

カテゴリー:MetaTrader EA

Multi_Lot_Scalperの解読4


今回はMulti_Lot_Scalperの解読の続きを見ていきましょうね!


続きはここから

Profit = 0;
LastTicket = 0;
LastType = 0;
LastClosePrice = 0;
LastLots = 0;


あれれ?
start関数の中で初めて出てきましたね。

ここで、0を代入するってことは特に記憶用ではなさそうですね^^;


つぎを見てみましょう。

//----
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{

です。
何回も出てきているお決まりのパターンなので、もうわかりますよね?

インデックス0のものから順に実行していくやつですね。


でわ次。


LastTicket = OrderTicket();
//----
if(OrderType() == OP_BUY)
LastType = OP_BUY;
//----
if(OrderType() == OP_SELL)
LastType = OP_SELL;
LastClosePrice = OrderClosePrice();
LastLots = OrderLots();


です。内容は

LastTicketに選択したポジションの注文番号を代入。
もし、ポジションが買いなら、LastType に OP_BUY を代入。
もし、ポジションがうりなら、LastType に OP_SELL を代入。
LastClosePrice に今ポジションを手仕舞いする場合の値を代入。
LastLots にポジションのロット数を代入。

です。
for文を閉じた後には、最後に代入されたものが残るわけですね。


次見てみましょうか。


//----
if(LastType == OP_BUY)
{
if(OrderClosePrice() < OrderOpenPrice())
Profit = Profit - (OrderOpenPrice() - OrderClosePrice())*OrderLots() / Point;
//----
if(OrderClosePrice() > OrderOpenPrice())
Profit = Profit + (OrderClosePrice() - OrderOpenPrice())*OrderLots() / Point;
}
//----
if(LastType==OP_SELL)
{
if(OrderClosePrice() > OrderOpenPrice())
Profit = Profit - (OrderClosePrice() - OrderOpenPrice())*OrderLots() / Point;
//----
if(OrderClosePrice() < OrderOpenPrice())
Profit = Profit + (OrderOpenPrice() - OrderClosePrice())*OrderLots() / Point;
}
 }
}

です。
内容は、

もし、LastType が OP_BUY の場合、
もし、現在の売値がエントリー値より小さいとき、
Profit に 「Profit - (エントリー値 - 現在の売値)* ロット数のピプス表示」を代入。
もし、現在の売値がエントリー値より大きいとき、
Profit に 「Profit + (現在の売値 - エントリー値)* ロット数のピプス表示」を代入。

もし、LastType が OP_SELL の場合、
もし、現在の買値がエントリー値より大きいとき、
Profit に 「Profit - (現在の買値 - エントリー値)* ロット数のピプス表示」を代入。
もし、現在の売値がエントリー値より大きいとき、
Profit に 「Profit +(エントリー値 - 現在の買値) * ロット数のピプス表示」を代入。

です。

なんだか、遠回りしてるような気がしますが^^;
Profit には、合計損益が代入されていることになります。


でわ、次です。

Profit = Profit*PipValue;
text2 = "Profit: $" + DoubleToStr(Profit,2) + " +/-";

です。内容は

Profit に Profit * PipValue を代入する。
text2 に 「Profit: $ 」と Profit の小数点以下2ケタまでを文字列にしたものと「 +/-」を
並べたものを代入する。

といった感じです。

ここで、DoubleToStrは小数を文字列に変換するときに使います。この場合は、小数点以下3桁目を
四捨五入した数字を文字列にしてあります。

パラメータのPipValueは損益をドルに換算するときに使うみたいですね。
これは、パラメータでそのつど変更するよりもプログラムのなかで計算した方が
よさそうな気がしますが^^;


でわ、次見てみましょう。

//----
if(OpenOrders >= (MaxTrades - OrderstoProtect) && AccountProtection == 1)
if(Profit >= SecureProfit)
{
OrderClose(LastTicket, LastLots, LastClosePrice, slippage, Yellow);
ContinueOpening = False;
return(0);
}


です。内容は

もし、OpenOrders がMaxTrades - OrderstoProtect 以上で AccountProtection が1の場合
もし、Profit が SecureProfit以上の時
取引番号LastTicketのものを手仕舞いにして、
ContinueOpening を False にする。
そして、終了。

といった感じです。

MaxTrades,OrderstoProtect,AccountProtection,SecureProfitの4つはパラメータ用の変数ですね。

条件が満たされて、合計利益がSecureProfit以上になったら、手仕舞いにする感じですね。
ここで一つ手仕舞いされると、前に出てきたコードで全てのポジションを手仕舞いにするという
ところにたどり着くわけですね。


でわ、次です。

//----
if(!IsTesting())
{
if(myOrderType == 3)
text="No conditions to open trades";
else
text=" ";
Comment("LastPrice=", LastPrice, " Previous open orders=", PreviousOpenOrders,
"\nContinue opening=", ContinueOpening, " OrderType=", myOrderType, "\n",
text2, "\nLots=", lotsi, "\n", text);
}

です。内容は

もし、テストではない場合、
もしmyOrderType が3ならば、textに「No conditions to open trades」を代入。
その他ならば、textに「 」を代入。
チャートに
「LastPrice=」 LastPriceの数値 「 Previous open orders=」 PreviousOpenOrdersの数値 改行
「Continue opening=」 ContinueOpeningの真偽 「OrderType=」 myOrderTypeの数値 改行
text2の文字列 改行
「Lots=」 lotsiの数値 改行
textの文字列
を表示させる。

といった感じです。

知りたい情報をチャートに表示させるときは、Commentを使いますね。


でわ、次です。


//----
if(myOrderType == 1 && ContinueOpening)
{
if((Bid - LastPrice) >= Pips*Point || OpenOrders < 1)
{
SellPrice = Bid;
LastPrice = 0;
//----
if(TakeProfit == 0)
tp = 0;
else
tp = SellPrice - TakeProfit*Point;
//----
if(InitialStop == 0)
sl = 0;
else
sl = SellPrice + InitialStop*Point;


です。内容は

もし、myOrderType が1で ContinueOpening がtrueの場合
もし、現在の売値 - LastPrice が Pipsピプス以上、または OpenOrders が1より小さい(0の)時、
SellPrice に現在の売値を代入。
LastPrice に0を代入。
もし、TakeProfit が0のとき、tp に0を代入。
その他の時は、tp に SellPrice から TakeProfitピプス引いた値を代入。
もし、InitialStop が0のとき、 sl に0を代入。
その他の時は、 sl に SellPrice と InitialStopピプスを足した値を代入。

といった感じです。

前回のエントリー値よりPipsピプス以上値上がりした時か、ポジションが無いときに
売りポジションを持つときの利食い値、損切り値を計算する感じですね。


そして、

//----
if(OpenOrders != 0)
{
mylotsi = lotsi;
//----
for(cnt = 1; cnt <= OpenOrders; cnt++)
if(MaxTrades > 12)
mylotsi = NormalizeDouble(mylotsi*1.5, 1);
else
mylotsi = NormalizeDouble(mylotsi*2, 1);
   }
   else
   mylotsi=lotsi;


です。内容は

もし、OpenOrders が0じゃない場合
mylotsi に lotsiを代入。
cntが1から OpenOrders の値の数値以下の間、次のことを実行して
cntに1を足すというのを繰り返す。
もし、MaxTrades が12より大きいときは mylotsi に mylotsi の1.5倍を小数点以下1桁にしたものを
代入。その他のときは、 mylotsi に mylotsi の1.5倍を小数点以下1桁にしたものを代入。

その他(OpenOrders が0)の場合
mylotsi に lotsi の値を代入。

という感じです。

ここは、ポジションサイジングですね。
MaxTrades が 12以下を見てみると
ポジションが1つある場合は、ロット数が2倍、
ポジションが2つある場合は、ロット数が2*2の4倍、
ポジションが3つある場合は、ロット数が4*2の8倍。
という感じです。

で、ポジションが無いときは、lotsiをそのまま代入といった感じですね。


でわ次。


  //----
if(mylotsi > 100)
mylotsi = 100;
OrderSend(Symbol(), OP_SELL, mylotsi, SellPrice, slippage, sl, tp, NULL, 0, 0,
Red);
return(0);
}
}

です。内容は

もし、mylotsi が100より大きい時はmylotsi に100を代入。
設定した内容で売り注文を出す。
で、終了。

といった感じです。

ロット数の制限を付け加えてますね。
OrderSend のカッコ内の項目も変数に代入されている値を使っています。


そして、最後


if(myOrderType == 2 && ContinueOpening)
{
if((LastPrice-Ask) >= Pips*Point || OpenOrders < 1)
{
BuyPrice = Ask;
LastPrice = 0;
//----
if(TakeProfit == 0)
tp = 0;
else
tp = BuyPrice + TakeProfit*Point;
//----
if(InitialStop==0)
sl = 0;
else
sl = BuyPrice - InitialStop*Point;
//----
if(OpenOrders != 0)
{
mylotsi = lotsi;
for(cnt = 1; cnt <= OpenOrders; cnt++)
if(MaxTrades > 12)
mylotsi = NormalizeDouble(mylotsi*1.5, 1);
else
mylotsi = NormalizeDouble(mylotsi*2, 1);
}
else
mylotsi = lotsi;
//----
if(mylotsi > 100)
mylotsi = 100;
OrderSend(Symbol(), OP_BUY, mylotsi, BuyPrice, slippage, sl, tp, NULL, 0, 0,
Blue);
return(0);
}
}
//----
return(0);
}

です。今度は買いの注文です。
内容は、売り注文の時と同じですね。

そして、start関数も終了っと。


これで全部です。なかなか分かりづらいですよね^^;

そこで、余分な情報などを削除して、取引部分を再構築してみました!

変数名やコード配置などの変更はありますが、まったく同じ取引をするものを作りました。
ブロックごとに内容をメモしてあるので参考にしてください。

しかし、このままではマネーマネジメントの部分や
損失を抱え込んでしまうなどの難ありなので、
今後改良していきたいと思います。

でわ、ダウンロード

その前に
応援よろしくお願いいたしますm(..)m
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


MetatoreLotScalper.zip(mq4ファイル)

タグ

2008年1月21日|コメント (13)

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

移動平均の交互売買の方法


今回は、xyz__さんからの質問がございましたので、
臨時記事といたしまして、

1.移動平均を上(下)に超えた直後に買い(売り)ポジションを取る。
2.買い(売り)ポジションがある場合は
ポジションを取らない。要はポジションは常に1個
3.移動平均より上(下)でポジションをとった場合は連続でポジションを同じ方向にはとらない。要は買い→売り→買い→売り・・・の法則でのみ
4.買いのポジションで決済されずに売りのポジションを持つ場合は買いを決済して売り
のポジションをもつ

というものを作りましょうか。


まずはパラメータです。

//利食い損切りピプス
extern int TakeProfit = 10;
extern int StopLoss =10;
//ロット数
extern double lots=0.1;
//移動平均の計算期間
extern int maPeriod = 21;

後から設定できる変数ですね。


次に記憶用の変数を宣言します。

int bar,LastType;

いつものように、一つのバーで1回までというようにしたいので
バーの番号を記憶する整数変数 bar と、
買い→売り→買い→売りを交互に注文することを可能にするため
最後におこなった注文を記憶する LastType という変数です。

でわ、
int start()
{
の中身を見ていきましょう!

最初に移動平均線の値を計算します。


//現在の移動平均線の値
double ma0 = iMA(NULL,0,maPeriod,0,MODE_SMA,PRICE_CLOSE,0);
//1つ前の移動平均線の値
double ma1 = iMA(NULL,0,maPeriod,0,MODE_SMA,PRICE_CLOSE,1);


ma0 , ma1 という小数変数を宣言しながら、移動平均線の値を代入しています。
このように変数が初めて出てくるところで宣言してあげても大丈夫なんですね。

今回は、【直後】というキーワードで確定前の一瞬でも超えた時点で
シグナルを出すようにしたため、現在動いている移動平均を使っています。
クロスが確定したときにシグナルを出したいときは、
iMA のカッコ内の最後の数字を1と2にして、
1つ前のバーの移動平均の値と2つ前のバーの移動平均の値を使えばいいですよね。


でわ、つぎにシグナルを出したいと思います。

//シグナル
if(Close[1]<ma1 && Close[0]>ma0) int sign=1;
if(Close[1]>ma1 && Close[0]<ma0) sign=-1;

もし、1つ前のバーの終値が移動平均値がより小さくて、かつ、
今の値が移動平均値より大きい場合は、整数変数 sign に1を代入。
もし、1つ前のバーの終値が移動平均値がより大きくて、かつ、
今の値が移動平均値より小さい場合は、整数変数 sign に-1を代入。

これで、クロスの条件が表現できますね。

1とか-1は勝手に取り決めたものですので、自由です^^;
MT4の取り決めと合わせる場合は買いが0売りが1となると思いますが、個人的に分かり易いものでいいと思います。

if文などの条件内の実行が1行の場合は{}は必要ないですね。


でわ、次です。


// オーダーチェック(ポジションなどのデータ)
int CurrentPosition=-1;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS);
if(OrderMagicNumber() == 123 && OrderSymbol() == Symbol()) CurrentPosition=cnt;
}

この辺は、【完全自動売買への道のり】で詳しく説明してあると思うのでさらっと行きます。

整数変数 CurrentPosition の宣言で初期値は-1です。
cntが0からポジション総数の数値より小さいうちは{}内を実行しcntに1を足すというのを繰り返す。

インデックスcntのポジションを選択
もし、マジックナンバーが123でかつ、通貨ペアがチャートの通貨ペアと同じなら CurrentPosition にcntの数値を代入する。

と言った感じです。
ここで、マジックナンバーと通貨ペアを照合することによって
他のEAでおこなっている取引をカウントしない。
同じEAでおこなっている他通貨での取引をカウントしない。
という効果があります。

そして、照合した結果、マッチするもののインデックスを CurrentPosition に
代入するといった感じになります。


でわ、次行きましょう。

// ポジションチェック ポジション無し
if(CurrentPosition == -1)
{

です。
前の照合結果、CurrentPosition には何も代入されずに初期値のままのときという感じですね。
なので、【このEAでのこの通貨ペアはもっていない場合】ということになります。


//買い条件
if(bar!=Bars && LastType!=1 && sign==1)
{
//買いポジションを取る
int Ticket = OrderSend(Symbol(), OP_BUY,lots, Ask, 3, Ask-(StopLoss*Point), Ask+(TakeProfit*Point), "test", 123, 0, Blue);
if(Ticket>0)
{
bar=Bars;
LastType=1;
}
}

もし、記憶用の変数 bar の値が今のバーの番号と違って、
記憶用の変数 LastType が1じゃなくて、
sign が1の場合は
()内の条件で買い注文を出しつつ、整数変数 Ticket に注文番号を代入する。
そして、注文番号が0より大きい(注文が成立した)とき
barに現在のバーの番号を代入。
LastTypeに1を代入。

こうしてあげれば、同じバーで複数回注文することがなく前回買い注文を出した場合、
今回は買い注文をださないといった感じになります。


//売り条件
if(bar!=Bars && LastType!=-1 && sign==-1)
{
//売りポジションを取る
Ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+(StopLoss*Point), Bid-(TakeProfit*Point), "test", 123, 0, Red);
if(Ticket>0)
{
bar=Bars;
LastType=-1;
}
}

売り注文の場合も同じ様にしてあげましょう。


でわ、次に

}
// ポジション有り
else
{

です。

if(CurrentPosition == -1)のカッコを閉じてelseということは CurrentPosition が -1以外の場合、
すなわち【このEAでのこの通貨ペアはもっている場合】ということになります。


さてここからポジション有りの場合の実行コードになります。


//ポジションの選択
OrderSelect(CurrentPosition,SELECT_BY_POS);

持っているポジションの情報を知りたいときにはまずポジションの選択をしてあげなければいけません。
ここで生きてくるのが先ほどのfor文で代入されたインデックスです。
今、CurrentPositionにはfor文で照合にヒットしたインデックスが代入されているので、
そのインデックスのポジションを選択してあげるわけです。


次に、
//もし買いポジションで売りシグナルがでたら
if(OrderType()==OP_BUY && sign==-1)
{
//手仕舞い
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Green);
//ドテン売り
Ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+(StopLoss*Point), Bid-(TakeProfit*Point), "test", 123, 0, Red);
if(Ticket>0)
{
bar=Bars;
LastType=-1;
}
}

内容は、
もし選択されたポジションが買いで、signが-1の場合
選択されたポジションを手仕舞い。
そして、売り注文を出す。
注文成立したときbarに今のバーの番号、LastTypeに-1を代入。

といった感じです。

この取引のシグナルは一つ前のバーでsignが1になるか-1になるか
決定しているので、
同じバーで反対のシグナルが出ることがありません。
もし、同じバーで反対のシグナルが出るようなシステムでも同じバーでは複数回取引をしないという条件にする場合は、ここの条件でもbar!=Barsというものを付け加えなければなりません。


//もし売りポジションで買いシグナルがでたら
if(OrderType()==OP_SELL && sign==1)
{
//手仕舞い
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Green);
//ドテン買い
Ticket = OrderSend(Symbol(), OP_BUY,lots, Ask, 3, Ask-(StopLoss*Point), Ask+(TakeProfit*Point), "test", 123, 0, Blue);
if(Ticket>0)
{
bar=Bars;
LastType=1;
}
}

売りポジションを持っているときも同じ様にしてあげます。


そして、最後に

}

return(0);
}

elseのカッコを閉じてあげて、start関数を終了させます。


応援お願いします!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


test10.zip(mq4ファイル)のダウンロード


でわ、今回はこの辺で。

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

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

Multi_Lot_Scalperの解読3


さあ、今回も続きを見ていきましょう!


// if we have opened positions we take care of them
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_SELL)
if(TrailingStop > 0)
if(OrderOpenPrice() - Ask >= (TrailingStop + Pips)*Point)
if(OrderStopLoss() > (Ask + Point*TrailingStop))
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + Point*TrailingStop, OrderClosePrice() -
TakeProfit*Point - TrailingStop*Point, 800, Purple);
return(0);
}
if(OrderType() == OP_BUY)
if(TrailingStop > 0)
if(Bid - OrderOpenPrice() >= (TrailingStop + Pips)*Point)
if(OrderStopLoss() < (Bid - Point*TrailingStop))
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Bid - Point*TrailingStop, OrderClosePrice() +
TakeProfit*Point + TrailingStop*Point, 800, Yellow);
return(0);
}
}
}

ここを一気に見てみましょうか。

内容は
//もし保持ポジションがあるならそれらを処理します。
cnt がポジション数の数値から0以上の間は、{}を実行して cnt から1を引くというのを繰り返す。

インデックスcntのポジションを選択。
もしその通貨ペアがチャートの通貨ペアと同じ場合、

もしオーダータイプが売りの時で、
もし TrailingStop が0より大きい時で、
もしエントリー値から現在の買値を引いた値より(TrailingStop + Pips)ピプスの方が小さいか等しい時で、
もし損切り値が現在の買値にTrailingStopピプス足した値の方が大きいなら、
オーダー変更
損切り値を現在の買値にTrailingStopピプス足した値に。
利食い値を現在の買値からTakeProfitピプスとTrailingStopピプスを引いた値に。
有効期限は800秒。
矢印を紫色に。
で、終了。

もしオーダータイプが買いの時で、
もし TrailingStop が0より大きい時で、
もし現在の売値からエントリー値を引いた値より(TrailingStop + Pips)ピプスの方が小さいか等しい時で、
もし損切り値が現在の売値からTrailingStopピプスを引いた値の方が小さいなら、
オーダー変更
損切り値を現在の売値からTrailingStopピプス引いた値に。
利食い値を現在の売値にTakeProfitピプスとTrailingStopピプスを足した値に。
有効期限は800秒。
矢印を黄色に。
で、終了。


という感じです。
とてもややこしいのですが、一言でゆうとトレーリングストップですね^^;

関数Pipsは、トレイリングストップを開始するのをPips分だけ遅らせるといった感じですね。

しかし、このままだと少し変わった取引になります。

初期値の損切り値0なのでそのままで考えてみましょう!

損切り値0ということはトレイリングストップ(利益確定のストップから)が発動するまでは損切りはしないことになります。


まずは、ポジションが買いの場合を考えてみましょう。

値が利益方向に(TrailingStop + Pips)ピプス上がったとき、
今の値よりTrailingStopピプス下に損切り値を持ち上げます。
と同時に、利食い値も今の値より(TakeProfit + TrailingStop)ピプス上に持ち上げます。
上がれば上がるほど利食い損切りともに上がっていきます。
そして、値が下がっているときは利食い損切りともに動かずといった感じです。
なので、買いポジションに関しては常に利確後の損切りで、
利食い値は関係ないということになりますね。
(1tickで利食い値を超えない限り)

次に、ポジションが売りの場合を考えてみましょう。

if(OrderStopLoss() > (Ask + Point*TrailingStop))という条件がありますが、
OrderStopLoss()は損切り値のことで0ですね。
なのでトレイリングストップが発動せず売りポジションには損切り値は発生しません。
なので、売りポジションに関しては利食い値まで持ち続ける感じですね。

もし、損切り値0のときもトレイリングストップを発動させる場合は、

if(OrderStopLoss() > (Ask + Point*TrailingStop) || OrderStopLoss()==0)

みたいな感じで書くと良いかと思います。

また、損切り値を設定した場合は、売り買い共に利食い値は関係なくなりますね。


モデル:Control points で利益が出ているような結果になるのは、
1tickでガツンと来るからですね^^;


まだまだ、先がありますが今日はこの辺で。

応援よろしくお願い致します!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング

タグ

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

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

Multi_Lot_Scalperの解読2


今回は、前回のMulti Lot ScalperというEAのコードの解読の続きです。

ダウンロード元はこちら↓
http://codebase.mql4.com/en/619


でわ、早速見ていきましょう!

//----
if(PreviousOpenOrders > OpenOrders)
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
//----
if(OrderSymbol() == Symbol())
{
if(mode == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Blue);
//----
if(mode == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Red);
return(0);
}
}
PreviousOpenOrders = OpenOrders;

です。内容は

もし PreviousOpenOrders が OpenOrders より大きい場合、
cnt が所持ポジション数の数値から0以上の間は{}内を行い1を引くというのを繰り返す。

インデックスcntのポジションを選択。
mode にそのポジションのオーダータイプ(この場合成行き売りor成行き買い)を代入。
もし、そのポジションの通過ペアと現在のチャートの通貨ペアが同じ時、
もし、mode が OP_BUY ならば、手仕舞い。(矢印は青色)
もし、mode が OP_SELL ならば、手仕舞い。(矢印は赤色)
終了。

PreviousOpenOrders に OpenOrders の値を代入。


といった感じです。

最後の PreviousOpenOrders = OpenOrders; で記憶用変数 PreviousOpenOrders には
現在のポジション数が代入されていますが、
その手前までは変数名どおり記憶されている「以前のポジション数」ということになりますね。

なので、何らかの形(利食いや損切り、手仕舞いなど)でポジション数が減った時は、
PreviousOpenOrders > OpenOrders の条件に当てはまりますね。

そして、インデックスの大きい方から選択して、同じ通貨ペアがあったら手仕舞いして終了。
(実際はインデックスは0から割り当てられているので、インデックス OrdersTotal()-1 というものから実行されます)

ここで、mode を使ってオーダータイプを振り分けているのは
手仕舞いの矢印の色を区別したいからですね^^;
変数 mode の宣言を見て分かるように、 OP_BUY や OP_SELL は人には文字列のようにみえますが、
コンピュータ(MT4)は0や1といったように整数として認識しています。

ここで、一つのポジションが手仕舞いされたら return(0); によって
一旦、 int start の実行は終了です。

また、新たにint start が実行された時、同じ通貨ペアがあった場合はここでまた手仕舞いです。
これを同じ通貨ペアが無くなるまで繰り返すわけですね!

そして、同じ通貨ペアが無くなって PreviousOpenOrders = OpenOrders; までたどり着きます。
この繰り返しの後は PreviousOpenOrders , OpenOrders ともに0となるわけです。


でわ、次を見てみましょう!


//----
if(OpenOrders >= MaxTrades)
ContinueOpening = False;
else
ContinueOpening = True;


です。内容は

もし、OpenOrders が MaxTrades 以上の場合、
ContinueOpening に False を代入。
そうでない場合、
ContinueOpening に True を代入。


です。
ポジションの数を見て、追加エントリー可能かどうかを ContinueOpening に教えてあげてる感じですね。


次を見ましょうか。


//----
if(LastPrice == 0)
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
//----
if(OrderSymbol() == Symbol())
{
LastPrice = OrderOpenPrice();
//----
if(mode == OP_BUY)
myOrderType = 2;
//----
if(mode == OP_SELL)
myOrderType = 1;
}
}

です。内容は

もし LastPrice が0の場合、
cnt が0から OrdersTotal() より小さい間、{}を実行し cnt に1を足すということを繰り返す。

インデックス cnt のポジションを選択し、
mode に オーダータイプを代入。
もしその通貨ペアがチャートの通貨ペアと同じなら、
LastPrice に選択されたポジションのエントリー値を代入。
もし mode が OP_BUY なら、 myOrderType に2を代入。
もし mode が OP_SELL なら、 myOrderType に1を代入。


といった感じです。

ここでは、インデックス0のものから、 LastPrice , myOrderType に数値を代入しますが、
更に次のインデックスのものがある場合は、数値を上書きする感じですね。
そして、最後にエントリーしたポジションのデータを残す感じです。

これは、cnt を OrdersTotal()-1 からはじめて、通貨ペア確認のif文の閉じカッコの前で、
break;(←繰り返し終了の命令文)と入力しても同じですね。


次いってみましょう!


//----
if(OpenOrders < 1)
{
myOrderType = 3;
//----
if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) >
iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 1))
myOrderType = 2;
//----
if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) <
iMACD(NULL,0,14,26,9,PRICE_CLOSE, MODE_MAIN, 1))
myOrderType = 1;
//----
if(ReverseCondition == 1)
if(myOrderType == 1)
myOrderType = 2;
else
if(myOrderType == 2)
myOrderType=1;
}

です。内容は

もし、OpenOrders が1より小さい(0の)場合、

一旦、 myOrderType に3を代入。
もし、現在のMACD(14,26)が一つ前のバーのMACD(14,26)より大きい時は、
myOrderType に2を代入。
もし、現在のMACD(14,26)が一つ前のバーのMACD(14,26)より小さい時は、
myOrderType に2を代入。
もし、ReverseCondition が1の場合で、
もしmyOrderType が1のとき、myOrderType に2を代入。
その他の場合で
もしmyOrderType が2のとき、myOrderType に1を代入。


という感じです。

先ほどは、持っているポジションのうち最後にエントリーしたもので myOrderType を決定しましたが、
今回は、ポジション無しの場合の myOrderType 決定方法ですね。

myOrderType はMACDが上向きなら2、下向きなら1、
また ReverseCondition が1の時はその逆にする、といった感じです。

またまた重要っぽい変数が出てきましたね! LastPrice , myOrderType も戦略材料っぽいですね!


ワクワクしてきたところですが、今回はこの辺で。

次回もこの続きです。


応援お願いいたします!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


ps

メルマガ第1号は今月15日朝発行です!

タグ

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

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

Multi_Lot_Scalperの解読1


今回は、Multi Lot ScalperというEAのコードを見ていきましょうか。

ダウンロード元はこちら↓
http://codebase.mql4.com/en/619


まずは、どんなパラメータがあるかサラッと見ましょう!

extern double TakeProfit = 40;
extern double Lots = 0.1;
extern double InitialStop = 0;
extern double TrailingStop = 20;
extern int MaxTrades = 10;
extern int Pips = 15;
extern int SecureProfit = 10;
extern int AccountProtection = 1;
extern int OrderstoProtect = 3;
extern int ReverseCondition = 0;
extern double EURUSDPipValue = 10;
extern double GBPUSDPipValue = 10;
extern double USDCHFPipValue = 10;
extern double USDJPYPipValue = 9.715;
extern int StartYear = 2005;
extern int StartMonth = 1;
extern int EndYear = 2006;
extern int EndMonth = 12;
extern int EndHour = 22;
extern int EndMinute = 30;
extern int mm = 0;
extern int risk = 12;
extern int AccountisNormal = 0;

変数名で役割がなんとなく分かるものとそうでないものがありますが、
先に進めば役割が分かってきますので、サラッとみます^^;

記憶用の変数もサラッ!と見ましょう。

//----
int OpenOrders = 0, cnt = 0;
int slippage = 5;
double sl = 0, tp = 0;
double BuyPrice = 0, SellPrice = 0;
double lotsi = 0, mylotsi = 0;
int mode = 0, myOrderType = 0;
bool ContinueOpening = True;
double LastPrice = 0;
int PreviousOpenOrders = 0;
double Profit = 0;
int LastTicket = 0, LastType = 0;
double LastClosePrice = 0, LastLots = 0;
double Pivot = 0;
double PipValue = 0;
string text = "", text2 = "";


今のところは、「こんな変数をここで宣言しているんだな~」程度で
良いかと思います。


でわ早速 int start() の中身を見ていきましょう!


if(AccountisNormal == 1)
if(mm != 0)
lotsi = MathCeil(AccountBalance()*risk/10000);
else
lotsi=Lots;
else
// then is mini
if(mm != 0)
lotsi = MathCeil(AccountBalance()*risk / 10000) / 10;
else
lotsi = Lots;
//----
if(lotsi > 100)
lotsi = 100;

個人的にはif文が重なるときは{}があったほうが見やすいのですが^^;

内容は

もし AccountisNormal が1の時で
mm が0ではない場合
lotsi に口座残高* risk /10000 の小数点以下切り上げを代入。
その他(mm が0)の場合
lotsiにLotsを代入。

//ミニの場合
その他の( AccountisNormal が1ではない)時で
mm が0ではない場合
lotsi に口座残高* risk /10000/10 の小数点以下切り上げを代入。
その他(mm が0)の場合
lotsiにLotsを代入。

もしlotsi が100より大きい時
lotsiに100を代入。


という感じです。

ここで MathCeil() はカッコ内の数値を小数点以下繰り上げといった感じです。
繰り上げなので、数値がマイナスの時、たとえば-2.999の時は-2に繰り上がります。

あと、変数 mm はマネーマネジメントのイニシャルという感じですね。

mmをオン(0以外)にした場合、lotsi をロット数にするには大きい感じがしますね。


でわ、次を見てみましょう。


OpenOrders = 0;
//----
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
OpenOrders++;
}


です。内容は

念のため OpenOrders を0にしておいて、

cnt が0から オーダー(この場合は所持ポジション)の総数より小さい内は
{}内を行い cnt に1を足すということを繰り返します。

インデックス cnt のポジションを選択し
もしその通貨ペアが現在のチャートの通貨ペアと同じ場合
OpenOrders に1を足す。


といった感じです。

所持ポジションのうち現在のチャートの通貨ペアの数を OpenOrders で表す感じですね。


続いて


//----
if(OpenOrders < 1)
{
if(TimeYear(CurTime()) < StartYear)
return(0);
//----
if(TimeMonth(CurTime()) < StartMonth)
return(0);
//----
if(TimeYear(CurTime()) > EndYear)
return(0);
//----
if(TimeMonth(CurTime()) > EndMonth )
return(0);
}


ですが、内容は

もし OpenOrders が1より小さい(0の)場合で、

もし、現在の年が StartYear より小さい時、終了。
もし、現在の月が StartMonth より小さい時、終了。
もし、現在の年が EndYear より大きい時、終了。
もし、現在の月が EndMonth より大きい時、終了。


といった感じです。

これは、ちょっと気になりますね・・・。
このままだと、たとえば
StartYear = 2005
StartMonth = 10
EndYear = 2007
EndMonth = 8

とした場合、現在の月が10月より小さい場合は、終了。
現在の月が8月より大きい場合は、終了。
ということは、いつでもここで終了ということになってしまいます。

何年何月~何年何月までというような条件を作る時は

if(TimeYear(CurTime()) < StartYear)
return(0);
//----
if(TimeMonth(CurTime()) < StartMonth && TimeYear(CurTime()) == StartYear)
return(0);
//----
if(TimeYear(CurTime()) > EndYear)
return(0);
//----
if(TimeMonth(CurTime()) > EndMonth && TimeYear(CurTime()) == EndYear)
return(0);

とするとできますね。
今回の条件はまた別の意味があるかもしれませんので
先に進みましょうか^^;


続いては、


//----
if(Symbol() == "EURUSD")
PipValue = EURUSDPipValue;
//----
if(Symbol() == "GBPUSD")
PipValue = GBPUSDPipValue;
//----
if(Symbol() == "USDJPY")
PipValue = USDJPYPipValue;
//----
if(Symbol() == "USDCHF")
PipValue = USDCHFPipValue;
//----
if(PipValue == 0)
{
PipValue = 5;
}


です。

内容は、

もし現在のチャートの通貨ペアがEURUSDの時、PipValue に EURUSDPipValue を代入。
(後の3つも同じ感じ)
もし PipValue が0の時、PipValue に5を代入。


といった感じです。
PipValue が0の時というのは、PipValue に何も代入されていなくて
初期値のままか、0が代入された時というわけですね。
もし PipValue が正の数じゃないとマズい時はif(PipValue <= 0) とした方がいいかもですね。

それにしても、PipValue は何に使うんでしょうね。ワクワクしますね!


このワクワクは、次回まで持ち越しましょうか。

でわ、今回はこの辺で。


応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


ps
メルマガ登録ありがとうございます。
まだ、第1号を発行してないのですが、登録数にビックリしています^^;
第1号は来週あたりを予定しております。お楽しみに!

タグ

2008年1月12日|コメント (2)

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

メルマガ配信のお知らせ


お待たせ致しました!

メルマガ配信の準備が整いました!!

受信希望の方は、右サイド中間にあるメルマガ登録・解除という枠で
メールアドレスを入力し送信ボタンを押してください。

メルマガ発行周期は不定期です。
主な内容は、
●最近の研究内容について
●プレゼント企画告知やヒント、予告など
です。

(2008.1.9以前に登録された方もお手数ですがもう一度登録手続きをお願いいたしますm(..)m)


バックナンバーは第1号のみ閲覧可能となっております。

ご登録お待ちしております!


応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


ps
優良ルールMaDoの改良・最適化完了しました!
詳細はメルマガで報告いたします!

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

カテゴリー:その他

メルマガに関するお詫び



先日より、メルマガ読者募集をしておりましたが、
私の不備により、メルマガ消滅してしまいました。
メルマガ登録してくださった方々、本当に申し訳ございませんm(..)m

再度、メルマガ申請しておりますので、メルマガ発行許可がおりました際は、
お手数ですがもう一度登録をお願いいたします。


ps
VolAveP2008_1は正常に取引しておりますか?
メルマガでは、去年約20%の利益を上げたMaDoのダウンロードを考えております。

2008年1月 9日|コメント (7)

カテゴリー:その他

NewNice戦略トレンド編


今回は、ブログ読者様の幸さんのアイデアをMetaboNewNiceに付け加えてみましょう!

幸さんのアイデア
①100日、300日平均移動線とボリンジャー20日線が同じ方向のみエントリー。
②20日線の角度により、エントリーするか見送りか決める。

ここで、 ②の20日線の角度というのは、表示中のチャートの縦幅によって変わってしまうので、20日線の増減で計るようにしましょうか。

使うコードは、
まずは、パラメータ

extern double MA20upPips=0.1;
extern double MA20downPips=0.1;

として、20日線が一つ前のバーで何ピプス以上動いたらシグナルを出すのかという条件の数値です。

次に

//トレンド用の計算
double ma1001=iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,1);
double ma1002=iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,2);
double ma3001=iMA(NULL,0,300,0,MODE_SMA,PRICE_CLOSE,1);
double ma3002=iMA(NULL,0,300,0,MODE_SMA,PRICE_CLOSE,2);
double ma201=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",0,1);
double ma202=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",0,2);

double ma20updown=(ma201-ma202)/Point;

です。
上から、100日線の一つ前の値と、二つ前の値、300日線の一つ前の値と、二つ前の値、
ボリンジャーの真ん中の線の一つ前の値と、二つ前の値。

そして、ボリンジャーの真ん中の線が何ピプス動いたかを計算します。
ここで、ma20updownの値がプラスなら増、マイナスなら減ということになりますね。

これを、買い条件の前あたりに記入して計算してもらいましょう。


そして、

//買い条件
if(STC[2]<5 && STC[1]>5 && ma1002<ma1001 && ma3002<ma3001 && ma20updown>MA20upPips)
{

//売り条件
if(STC[2]>95 && STC[1]<95 && ma1002>ma1001 && ma3002>ma3001 && -1*ma20updown>MA20downPips)
{

というように前回の条件に&&を使って足してあげましょう。
売り条件の最後の-1*ma20updown>MA20downPips
MA20downPipsよりma20updownのほうが大きく減った場合、という意味ですね。

トレンド方向のみのエントリーのコードは以上を付け足せばOKです。

MetaboNewNiceTrend.zip(mq4ファイル)


今回私がバックテストした結果、有効なパラメータ、通貨や時間足などを見つけることができませんでした。

もし、有効なものが見つかりましたら教えてくださいね^^;


でわ、今回はこの辺で。


応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


ps
メルマガはじめました!
有益情報を配信したいと思います。
メルマガ読者限定プレゼント企画も考えています。
よろしくお願いいたしますm(..)m

タグ

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

カテゴリー:MetaTrader EA

zyx40さんのルール検証3


今回は、zyx40さんのルール検証の続きです。


通貨ペアEURUSDで一時間足(H1)で
zyx40さんのパラメータ
TakeProfit_L=40;
StopLoss_L=134;
TakeProfit_S=26;
StopLoss_S=216;
TradeTime=18;
lot=4;
Orders=3;
MaxOpenTime=168;

を固定し t1, t2, delta_L, delta_S を調べてみました。
(ODLの過去データで検証)

zyx40-2007-10-12.zip(Excelファイル)

やはり、zyx40さんのアイデア部分がないため、同じ動きのものはないようですね^^;


今回はチャンピオンシップのため、大きめのリスクで運用されたと思います。
なので、レバレッジ10倍という条件で2007年のデータで最適化をしてみました。

パラメータ
Leverage=10;
TradeTime=18;
Orders=3;

は固定です。

Zyx40F.zip(mq4ファイル)

zyx40-2007.zip(Excelファイル)


結果から、
取引回数 100回以上
最大ドローダウン 20%以下

というフィルタをかけると7つほどデータが残りました。

プロフィットファクター上位は
TakeProfit_L=44,
StopLoss_L=85,
TakeProfit_S=5,
StopLoss_S=166,
t1=18,
t2=11,
delta_L=15,
delta_S=15,
MaxOpenTime=36,


TakeProfit_L=5,
StopLoss_L=50,
TakeProfit_S=5,
StopLoss_S=114,
t1=9,
t2=1,
delta_L=2,
delta_S=18,
MaxOpenTime=82,

でした。


傾向としては
利食い幅は買いの方が大きい
損切り幅は売りの方が大きい
値動き幅は買いの方が敏感

というような感じです。

これは、2007年は値上がり状態だったので当然ですね。


パラメータが多い分、カーブフィッティングになり易いですが、
ある程度の将来の値動きが予測できる場合は有効かもしれません。

そこのところは、裁量が必要かと思います。


今回はこの辺で。

次回は、MetaboNewNice戦略研究について書こうかと思ってます。


皆様の応援のおかげで→FXシステムトレード派1位になっております!

応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング

タグ

2008年1月 3日|コメント (4)

カテゴリー:MetaTrader EA

プレゼントに関するお知らせ


明けましておめでとうございます!


さて、新年一回目の記事は年越し&お年玉プレゼント終了のお知らせと
今後の記事の予告です。


去年12月29日より始まりました年越し&お年玉プレゼント企画は
明日1月3日夕方頃に終了とさせていただきます。
ダウンロードされてない方は急いで見つけて下さいね!

今回たくさんの反響がありましたので、またプレゼント企画をやりたいと思います!!
次回は、予告なしでまた隠れたダウンロード先を設置いたします。
設置時間は24時間ほどと考えています。お楽しみに!


今回のプレゼントVolAveP2008_1.ex4 の説明をもう一度いたします。


VolAveP2008_1.ex4の説明

利益を保証するものではありません。
取引は、自己責任でお願いいたします。

有効期限は2008年1月末までです。
USDJPYの一時間足を使います。
損小利大ではありません。
損少々利多を目指しております。
統計データに基づいた小さな波をキャッチ。
10ピプスをきっちりゲットを目指します。
取引頻度は平均1回/1日。取引無しの日が続く事もあります。
複利・単利を選べます。(複利はレバレッジ10倍)
コツコツ型ですので、爆発的な利益は望めません。


今後の記事

zyx40さんの戦略研究報告
MetaboNewNice戦略の研究報告
最近気になるブログ人気FXブログランキング現在1位の戦略研究報告

を予定しております。
また、質問・要望などございましたらぜひコメントまたはメールでお願いします。


応援ありがとうございます!
→FXシステムトレード派←現在1位
→rank応援クリック
→人気ブログランキング

2008年1月 2日|コメント (3)

カテゴリー:その他