一定期間更新がないため広告を表示しています
2009.06.28 Sunday
[EA Tip 8] 常に資金の2%で注文する
StopLossを固定しておいて,lotSizeを計算させる方法です。複利でロット数を変化させたい場合です。
int StopLoss = 100; // Pips double Risk = 2.0; // % double tickValue = MarketInfo(Symbol(),MODE_TICKVALUE); // pip value ( example: USD per 1 pip per 1 lot) double lotSize = NormalizeDouble(AccountFreeMargin()*Risk/100/(StopLoss*tickValue),2); ここでのポイントは,MODE_TICKVALUEを使うことです。 tickValueは,1ロットで取引するとき,1 pipが何USDの変動に相当するかを表しています。 私の場合はInstaforexでUSDで決済していますので「USD」と書きましたが,円で決済している口座でも基本的な考え方は同じです。 tickValueは取引業者,決済通貨,レバレッジでも変わりますので,実際にご自分のMetaTraderで確かめてみてください。 ちなみに私の場合,下のような結果でした。Brocoで計算すると,全てのtickValueは10倍になっていると思います(レバレッジ1:100)。 tickValue 通貨ペア (Instaforex,レバレッジ1:100) 1.0000 EURUSD 1.0000 GBPUSD 1.0000 AUDUSD 1.0505 USDJPY (USDJPY=95.19のとき。実際,1/95.19=0.010505) 1.6522 EURGBP (EURGBP=0.8506のとき。説明は省略。) 0.9232 USDCHF (USDCHF=1.0832のとき。実際,1/1.0832=0.9232) で,最初に書いた方法を使うと,リスクに応じたロット数を自動的に計算してくれます。根底にあるのは次の基本式です。 (ストップ幅pip数)×(1ロット,1 pip当たりの決済通貨変動値)×(ロット数)=(余裕資金)×((リスク%)/100) 説明は特に要りませんよね。 逆に,ロット数を固定しておいて,StopLossを変える方法もあります。やりかたはどうあれ,2%のリスクを取るという観点からみればどちらも同じです。 2009.05.30 Saturday
[EA Tip 7] きちんと乱数を初期化する
EAで乱数を使いたいとき、乱数を初期化するにはMathSrand()関数を使います。
乱数を初期化するには、init()関数の中に以下の文を入れます。 MathSrand(GetTickCount()); ここで注意すべき点は、MathSrand()関数のseedにはTimeCurrent()やTimeLocal()は使わないことです。 リアルではどうなるか分かりませんが、バックテストのときにTimeCurrent()やTimeLocal()をseed値として使うと、その後MathRand()で生成される乱数は常に同じパターンになってしまいます。これでは乱数になりません(実際にEAを走らせてみると分かりますが、実証済みです)。 逆に、GetTickCount()関数こそ、システムを起動してからの経過時間なんて何のために使うのか、まさにMathSrand()のためにあるようなものです。 ↓よろしければ是非クリックをお願いします 2009.05.27 Wednesday
[EA Tip 6] AccountProfit()関数を使う
トータルで一定以上の利益が出たら手仕舞いして,利益を確定する方法を紹介します。AccountProfit()関数を使った一例です。
(1)以下のEAを作成する。
(2)例えばUSDJPY15分チャートを作成して,ここで作ったEAを貼り付け稼動させる。 ここで決済通貨に注意してください。私は100<USD>で損益を判定していますが,決済通貨が円であるならばAccountProfit()関数は円で返してくるはずなので,このままtp変数が100<円>のままだと大変です。利益がたった100円乗っただけで全部手仕舞いしてしまいます(笑)。トータル1万円で利確するラインを作るならtp変数を10000.0にするなど,自分で好きな値に変えてください。 (この方法を応用して,例えば一定ラインの損切りラインを超えたら自動的に損切りを確定させることも出来ます。プログラム変更が必要ですけど,簡単ですよね。) 但し,この方法を使うときは注意してください。せっかく利を伸ばそうとしているEAの途中で頭を切っちゃうわけですから。 ↓よろしければ是非クリックをお願いします 2009.05.26 Tuesday
[EA Tip 5] スプレッドが大きいときは注文しないようにする
指標前後やマーケットが閑散なときなど,スプレッドが変動するときがあります。スキャル系EAにとってスプの大きさはとても重要。
そこで,スプレッドが特定の値以上になってしまったときには,注文を行わないようにする方法を紹介します。 (1)EAの最初のほうで,extern変数MaxSpreadを定義しておく。 extern int MaxSpread = 4; // in pips (2)OrderSend直前あたりに,以下のif文を追加する。 if (Ask-Bid < MaxSpread*Point) これで,スプレッドがMaxSpread以上になったとき,注文しないようになります。 ↓よろしければ是非クリックをお願いします 2009.05.19 Tuesday
[EA Tip 4] 携帯からMT4取引を閲覧する
5/4の記事にも書きましたが、携帯電話のブラウザからMetaTraderの取引経過を見たいとき、Publisherで出力するstatement.htmだと重すぎて、全体像が分からなかったりすることがあります。私の場合、statementDetailed.htmの名前を書き換えてstatement.htmにしていますから、特に重くなります(だって、たまにはあのstatementDetailed.htmのグラフを見たいじゃないですか。「あれ」だと分かりませんか?(笑))。
2009.05.17 Sunday
[EA Tip 3] トレイリングストップを追加する
「トレイリングストップ(Trailing Stop)とは?」についてはgoogleで検索してもらうとして…。 EAにトレイリングストップ機能を手作業で追加したいときは、ここはもう深く考えず、先人が作ったものをコピー&ペーストするのが安全です。 一口にトレイリングストップといってもTSDやFFを見るとたくさんのパターンがありますが、ここでは最もポピュラーな手法をご紹介します。私もこれを使うことが多いです(スキャル系EAにはあまり使わないので、最近は本機能を使っていません^^;)。 (1) extern変数に次の2つを用意して、好きな値で初期化する。
なんか、ここまでやるかというくらいNormalizeDouble()関数を多用していますが、念のためです。また、次の項で示すようにTrailingStop変数がゼロのときは呼ばないようにしていますが、将来コピペしたときうっかりこの関数を常時呼んでしまっても正常に動くよう、TrailingStop変数がプラスかどうか内部で再チェックしています。 (3) start()関数の最初のほうで、次の命令を追加する。タイムフィルターの後ろに置くのが妥当でしょう。 if(TrailingStop>0)
見るとおわかりの通り、extern int TrailingStop=0;とゼロに指定すると、トレイリングストップ機能を呼ばなくなります。 2009.05.12 Tuesday
[EA Tip 2] バーが更新するときだけ1回実行する
EAをチャートに張り付けると、MetaTraderは、AskやBidの値が変動するたびにそのEAを呼ぼうとします。そして、他のEAが稼働していなければ、そのEAは実行されます。
2009.05.07 Thursday
[EA Tip 1] 資金管理EA関数・ロット数を計算する
Forex TSDのMetarader Programmingに行くと、dose it posible to creat any function of "mql code" posting in this forum?というスレッドがあります。
このスレッドには、EAを作成するときに、ちょっとした疑問を解決するのに必要なTipsが詰まっています。 ここでは面白そうなTipsを紹介していきたいと思います。 最初は、資金管理の方法など。いわゆる「「ロット数」を何ロットに決めたらよい?」を計算する関数で、無料サンプルEAを見ればたくさんあるんですが、ロット数を固定して運用している人でも、知識は持ってて損はありません。 簡単な資金管理(Money Management)のソースコード some simple MM codes 3通りのロット数計算方法があります。その中身は見れば大体分かるので省略してしまいますが、一番上のシンプルな式がよく使われてますよね。もっとも、ここの管理人newdigital氏がいうとおり、資金管理は千差万別で、EAによってどう調節するか自分で判断すべきだと言っています。 ちなみに私が最近よく使っているロット数計算関数は、無料EA”Your_Lucky"内蔵のGetLots関数です。上の3通りのうち1番目の改良版ですが、スキャル用に少々工夫してあるのと、FX業者で最小ロット数が0.01だったり0.1だったりしますが、関数内部で自動的に考慮してくれていて、たいへん優れモノです。 にほんブログ村 FXランキング 人気ブログランキング |
CATEGORIES
CALENDAR
おすすめリンク
PROFILE
SELECTED ENTRIES
ARCHIVES
RECENT COMMENTS
RECENT TRACKBACK
クリックお願いします
カウンター
SPONSORED LINKS
MOBILE
RECOMMEND
|
(C) 2024 ブログ JUGEM Some Rights Reserved. |