FXやその他投資についてのつれづれです
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
こんにちは(*'-')
仕事が忙しくて更新間隔が開いてしまいました(;'-') 今回から作成したEAのパラメータを色々変更して成績がどうかわるか見てみようと思います(・∀・) リミットとストップを20Pipで固定して、エントリー時間とクローズ時間を1時間ずつずらしてバックテスト してみましたよ(忙しいくせになんて暇なテストを・・・) 結果のPFをとった結果はこちら→ダウンロード(xls) どの時間帯でも損してる・・・(;・∀・) これから見て取れる結果としては・・・ ・13時にエントリーするのが一番成績がいい ・クローズ時間はさほど成績に影響しない(オープンと近いと影響あるけどね) てところですかね 次はリミットとストップも変更してテストするけど、クローズ時間はあんまり考慮しなくてすみそうですね(*'-') PR
こんばんは(*'-')
前回作成したGBPJPY14時エントリーEAにトレーリングストップ機能を追加しました (ついでに、いくつかの設定値をパラメータ化しました) ソースファイルはこれです→ ダウンロード(mq4) EAのパラメータ化は、関数の外に変数を定義して、先頭に extern とつけると、実行時のダイアログにパラメータとして表示されるようになります。 今回パラメータ化したのは ・エントリー時分 ・クローズ時分 ・エントリーするための設定Pip ・リミット値 ・クローズ値 ・スリップページ数 ・ロット数 をパラメータ化しました。 これでバックテストなどをするときにいちいちソースを書き換えて再コンパイル しなくてすむようになります。 次に本題のトレーリングストップ機能ですが、再利用しやすいように 関数化しました。(・∀・) int TralStop() て関数がそれです。 ロジックの解説としては、まずポジションを持ったオーダーを特定します ここはクローズのロジックと同じですね ポジションを持ったオーダーを特定したらトレールするかしないかの判定です 私が理解しているトレールの動作は 「含み益状態のときに、ストップ注文を含み益中の最高値-トレール幅に設定する」 ということなので、まずポジションが含み益状態か判定しています。 これで前半部分はOK 後半の部分は、注文が通った後の最高値を記録していくのは 現在の売値(買値)とストップ値の差がトレール幅を上回ったら、トレール幅におさまる ようストップ値を変更するということにしておきましょう 条件がそろったら、OrderModify関数でストップ値のみ変更して注文をだしております。 ちなみに、この関数をほかのEAに移植するばあい、 extern double dStop=0.2; の変数も一緒にもっていけば移植可能になります。 (この関数自体に改善の余地はたっぷりありますけどねw) これらの追加変更によって、メインのロジックも少し手をくわえました。 まずはトレールする/しないを判定するためのフラグを追加して フラグがtrueだったらトレーリングストップの関数を呼び出します (Tick単位でトレールロジックは稼動するわけですね) また、このEAの参考になったルールではリミット値は設定しないことになっているので dLimitが0だったときはリミット値をつけないように変更しております。 (ついででストップ値もやっちゃいました) トレーリングストップ機能をONに、リミットの設定なしで、前回と同じ条件で バックテストをしてみると・・・・ やっぱり右肩下がり(´・ω・`) でも前回と違って多少持ち直してる部分がでていますね。 とりあえず機能は追加できたのでこのあたりで・・・ 次回は、また機能追加か、このEAで勝てる設定の探りをやってみたいと思います(*'-')
こんばんは(*'-')
とうとう、実際に売買を行うEAを作成しました。 売買ルールの元ネタは某巨大掲示板に乗っていたこんなルールです。 ---------------------------------------------------------------------------------------- んじゃ晒すよ。 前スレから起点から逆指値で注文してリミット10ストップ40ってやり方について調べてたじゃん。 あのやりかたの変型版なんだけど。やり方としては、まず ペアはポン円。起点とする時間は日本時間の14時。14時に逆指値で上下20ピピにLSの注文を入れる。 それで、肝心なのがリミットとストップは入れないこと。っていうかトレールを使う。つまり、利はなるべく伸ばそうってこと。 1時間足のデータ見てると動くときはものすごい勢いで動いてるのがわかったからそういうときに10ピピだともったいないしね。 トレールは最初は25でじょじょにあげていく。 起点が210円だとしたら210.2にLの注文を入れて、トレールは25ピピ。210.55を超えたらトレール30ピピ。 210.70を超えたらトレール35ピピ、210.75以上はトレール40ピピ。 高値からトレール分下がったらストップになる。つまり、負けの場合20でエントリーされて1ピピも上がらずに25下がった場合でスプ入れて-30ピピ。 30まで上がって05まで下がった場合スプ入れて-20ピピの負けになる。 このトレールの数字とか時間、ペアには特に理由があって設定したわけじゃないけど、とりあえずこれで2008年の1月~6月まで1時間足で見てみた。 1月。22日でL19回、S22回エントリー。同値撤退以上の回数がL9回で合計154ピピ。Sが13回で480ピピ。1月トータルで634ピピ 2月。21日でL18回、S18回エントリー。同値撤退以上の回数がL5回で合計-68ピピ。Sが11回で444ピピ。2月トータルで376ピピ 3月。21日でL19回、S18回エントリー。同値撤退以上の回数がL9回で合計32ピピ。Sが5回で-119ピピ。3月トータルで-87ピピ 4月。22日でL19回、S19回エントリー。同値撤退以上の回数がL6回で合計23ピピ。Sが11回で316ピピ。4月トータルで339ピピ 5月。22日でL19回、S18回エントリー。同値撤退以上の回数がL10回で合計274ピピ。Sが8回で-1ピピ。5月トータルで273ピピ 6月。21日でL15回、S17回エントリー。同値撤退以上の回数がL2回で合計-142ピピ。Sが10回で606ピピ。6月トータルで466ピピ 半年合計でLが109回エントリー中41回プラス。合計273ピピ Sが112回エントリー中58回プラス。合計1728ピピ こんな感じの結果です。1月平均300ピピほどでした。 1時間足での検証なので、見えない部分もあり、本当はストップに刈られていたりもあるかもしれないですが。 トレール幅などは適当に決めたので変えれば結果はもっと良くなるかもしれないし、悪くなるかもしれません。 そして、トレールの幅をじょじょに上げていくため、エントリー中はチャートをずっと見て自分で変えていかないといけません。めんどいですが ご意見、質問などあればどんどんどうぞ。 おそらくこれだと思う。俺もこれで今勝ててる ---------------------------------------------------------------------------------------- つまりポン円で日本時間の14時の価格から+-20Pipずつにストップで売買注文を出す というルールですね (トレーリングストップも機能として必要だけど、それは後回しということで・・・) このルールを元にEAを作成しました ソースはこれ→ダウンロード(mq4) これをつかって、ポン円の15分足をつかって2007年1月1日から2008年12月31日までの バックテストをしてみましたよ。 結果はこれ↓ ん~。 見事な右肩下がり(´Д`;)ヾ 次からは、このEAを元にして、トレーリングストップとか色々な機能を付加していきたいと思います(*'-')
こんばんは(*'-')
少し間が空きましたが、今回はポジション解消と注文の取り消しについて、少しスマートなロジック を調べてみます ネットでMT4のことを調べていたら、こんなロジックを見つけたんですよ(・∀・) ----------------------------------------------------------------------------------------------- int total = OrdersTotal(); if(total > 0){ for(int i = total -1; i >= 0; i-- ){ bool selected = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(selected){ int type = OrderType(); switch(type){ case OP_BUY: OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE); break; case OP_SELL: OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE); break; case OP_BUYLIMIT: case OP_BUYSTOP: case OP_SELLLIMIT: case OP_SELLSTOP: OrderDelete(OrderTicket()); break; } OrderPrint(); } } } ----------------------------------------------------------------------------------------------- このロジック、何をしているかって言うと まず int total = OrdersTotal(); で、現在のポジションと注文中の数を調べています。これが1以上であれば 何かしらの注文やポジションが残っていることになります 3行目のfor分では、totalの数だけループするんですが、ここで0からではなく totalのところからiをはじめているのがポイントですね(・∀・) 次にOrderSelectでポジションなり注文を特定します。ここではi番目のオーダーを とってきています(iの値は例えば10から始まって9、8、7と減っていきます) 次に int type = OrderType(); で注文のタイプを取得します。(OP_BUYとかが返ります) switch分でこのtypeを判定してOP_BUYならクローズをするなどを並べてるんですね。 ちなみに、現在有効な注文やポジションが特定できるので、いちいちクローズを判定 する必要がありません。こいつは楽ですね(・∀・) 今までの検証用EAでは、いちいちチケット番号を使ってオーダーを特定していましたが 今あるオーダーを無条件にクローズや注文取消しをするにはこれだけで十分になります というわけで、このロジックを組み込んだ検証用EAがこちら→ダウンロード(mq4) 編集した実行結果はこちら→ダウンロード(csv) になります。結構シンプルなソースになりましたね。 途中にPrintをはさんで状況を表示していますが、#7や#13のオーダーは決済されている ので、あのロジックでは処理されないことがわかりますね。 また成行注文を出したオーダーや途中で指値が通った注文はクローズで決済されて 指値が通っていないオーダーには注文が取り消されていますね(・∀・) for分のiをtotalから使っているので、番号の大きい順から処理されているのもわかります (まあ、クローズした注文に対してPrintした情報にクローズ時間が入らないのは納得できませんが) すでに決済されている注文とかはEA上で扱えないのかな?と調べてみたら こんな関数と指定値を見つけました int OrdersHistoryTotal( ) MODE_HISTORY これらは、注文履歴から情報を取得するための関数らしいです これを最後に組み込んだ検証用EAがこちら→ダウンロード(mq4) 編集した実行結果がこちら→ダウンロード(csv) ちゃんと終了した注文がすべて出てきてますね(・∀・) きっと、12月2日のところでも同じロジックを組み込んでいたら決済された#7や#13の 注文が出てきたんでしょう(´ー`) 今回の現象をわかりやすくするとこんな感じですね(・∀・) Selectした後の関数の仕様はあんまり好みなつくりになっていませんねぇ (C言語的な意味で) 今回はここまで。次は簡単に売買を行えるEAを作って、そこからいろいろを機能を 追加してみたいと思います(*'-')
あけましておめでとうございます。
箱根駅伝は楽しんでいますか(*'-') 12月での投資信託結果報告です
11月から比較すると若干プラスになりました。 積立始めてから、金額ベースでも初めてプラスになりましたよ('∇') 11月、12月と積立時の基準価額があんまり変わらないから、そろそろ底になってきましたかね? それとも更なる下げの前段階なのか・・・ まあ、いつかは上がることを信じて今はコツコツ積立ですね(*'-') |
カレンダー
カウンター
プロフィール
投資は自己責任・自己判断で実施するようお願いいたします。
ここの情報を見て損失が発生しても責任は負えませんのでご注意してください
HN:
Aki
性別:
男性
最新コメント
[06/06 fxjol]
[02/18 FXに人生を賭ける男]
[01/01 Aki]
[01/01 Aki]
[12/31 FXに人生を賭ける男]
最新記事
ブログ内検索
最新トラックバック
アクセス解析
|