Multi_Lot_Scalperの解読3

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の作成方法

コメント (6)

こんばんは。

ちょっとお聞きしたいのですが、記憶用の変数に注文約定時の足でのある指標の数値を記憶させるにはどのようにすればいいのでしょうか?
例えばBBバンドのlowerを記憶させたい場合、単にstart関数内に
double kioku = iBands(NULL,0,21,2,0,0,MODE_lower,0)
と書くと足が変わる毎に数値も変わっちゃいますよね。

注文が約定した時の指標の値を記憶させたいです。よろしくお願いします。

投稿者:red sauce |2008年1月17日 22:42

こんばんは。

早速このEAを取り上げていただきありがとうございます。ただいま仕事が忙しく殆ど手付かづですが後ほど、このブログを参考に解析したいと思います。もし宜しければ、その際に生じた疑問点などにお答えてしていただければ幸いです。

投稿者:nao |2008年1月17日 23:39

>sauceさん
おはようございます。

注文が約定した時の指標の値を記憶させる場合は、パラメータの次辺りに

double kioku;

と記憶用の変数を宣言しますよね!

そして、start関数内に

int ticket;

というように注文番号を代入する整数変数を一つ宣言します。

そして

ticket=Ordersend(・・・);
if(ticket>0) kioku = iBands(・・・);

というようにオーダーを出した後、注文が約定した(ticket>0)場合のみ代入するといった書き方でいけると思います。

また、何かありましたら教えてくださいね!


>naoさん
おはようございます。
そうですね。このプログラムは、あれ?ってゆうところが何ヶ所かあったので、疑問点などなんでも聞いてくださいね!

投稿者:慶次 |2008年1月18日 08:09

こんばんは。

早速のご回答ありがとうございます。

なるほどOrdersend関数は注文番号を返すんですね、注文するだけだと思ってました。

投稿者:red sauce |2008年1月19日 22:53

いつも参考にさせていただいております。
ご質問なのですが、HPアップされている
移動平均の売買を見ながら試行錯誤しているのですがどうしてもうまくいかないのでよろしければ少しご教授していただきたいのですが・・・よろしくお願いします。
初心者ですのであまり理解出来ておりません。

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

長文で申し訳ないのですがどうしても何回もポジションをもったり、グラフでみると移動平均を抜けた箇所から離れた箇所からポジションを持っています。

お時間があればご教授頂けると助かります。

投稿者:xyz__ |2008年1月19日 23:09

>sauceさん
こんにちわ。
参考になりましたでしょうか?
また分からないこととかありましたら、何でもきいてくださいね!

>xyz__さん
こんにちわ。
新しく、記事にしましたので、参考にしてください。また、分からない箇所とかありましたら、聞いてくださいね!

投稿者:慶次 |2008年1月20日 13:13

コメントを投稿する

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)






画像の中に見える文字を入力してください。

Captchaの認証で入力ミスがありますと、コメントが消えてしまいますのでご注意ください。
コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。