式化したルールを、MetaQuoteLanguageII(MQLII)という言語でプログラミングしましょう。MQLIIについてはMQLIIのページで少しずつ説明をしていきますので、ここではこんな感じのものかというのをつかむ程度でいいと思います。プログラミングはSBFXのMetaEditorで行います。File>Newから新規エキスパートを作成して下さい。(詳しくは「MetaEditor入門」)以下のように記入します。いう定数をセットしました。しておくと、後から期間を変更するのが容易になります。自分で決める変数(定数以外)は全て、「var:」で宣言しておく必要があります。iMA(期間,MODE_SMA,0)で現在の単純移動平均の値が出ます。最後の数字を1に変えると一本前の値、2にすると二本前の値が得られます。今回は終値ベースのため、一本前と二本前の値を使用します。close[0]で現在の値、close[1]でチャート上で1本前の終値(直近の終値)、close[2]だと2本前の終値。この部分は/*~*/で括られているので実行されません。TotalTradeは保有ポジションの数。(未約定のオーダーも含める)ただし、異なる通貨も同時に運用していた場合、そのポジション数も全てカウントされてしまうので、現在の通貨のポジションだけを取り出して調べる。OrderValue(ポジション番号,VAL_TYPE)で保有ポジションのタイプが得られる。SetOrder()で売りや買い。CloseOrder()でポジションを閉じる。売買ルール【売買ルールを決める】さて、いよいよシステム作りに入ります。本で見た方法、ふと思いついたものをどんどん試してみるほうが面白いと思います。それで見込みがありそうなら、さらに磨いていけば良いでしょう。[採用ルール概要]ここでは、以前ファンドマネージャーをされていたある方がちらりとおっしゃっていた、移動平均を使う手法を試してみることにします。それは、基本中の基本、移動平均の長期線、短期線のゴールデンクロス(GC)とデッドクロス(DC)に多少手を加えるもので、GCやDCになる少し前に仕掛けて、GC,DCになった時点で手仕舞うというやり方です。「GCやDCになる少し前」というのは具体的に言うと、直近の終値が短期線と長期線の間に入り込んだ時です。それだけだと『だまし』が非常に多くなるので、様子を見て一工夫が必要だとのことでした。様子見や工夫の仕方が思いつかないので、とりあえずどのくらいだまされるものか、やってみてそれから考えることにしましょう。[ルールの式化]ルールが決まったところで、プログラミングしやすいよう、式に置き換えてみます。GCやDCは以下のように定義してみました。「GCやDCになる少し前」は、このようにします。直近の終値)そしてルールはこうなります。「GCになる前」が発生したら買い「DCになる前」が発生したら売り買いや売りの保有するポジションは1つまで。はじめにそれでは為替ロボット、略してカワロボを作ってみましょう。ここでは、FXCMのデモ口座でカワロボの運用を開始するまでの手順を紹介します。以下のソフトをダウンロード、インストールして下さい。全てフリーソフトです。http://www.vector.co.jp/soft/dl/win95/net/se155232.html(メールサーバー)HyperOrder(以下、HO)はダウンロード前にフォーラムへの登録(無料)が必要です。3.8.3」をダウンロードして下さい。HOはメールサーバからメールを受信し、そのメールの内容に沿ってFXCMにオーダーを自動的に出す機能を持っています。売買シグナル発生時にSBFXがメールを送り、HOで受信して売買注文を実行します。BlackJumboDogはメールサーバーとして、SBFXとHOの仲介をしてもらいます。http://www.metatrader4.com/(以下、MT4)というフリーソフトがありますが、バックテスト機能がまだ使えません。MT4のバックテスト機能が使えるようになり次第、SBFXと入れ替える予定です。(MT4はSBFXの元?となっているMetaTrader3の後継です。そのため画面構成や使い方はSBFXと非常によく似ています。MT4にはシグナルをメールで送信する機能があり、売買シグナルをメール配信したり、モブログで売買履歴を公開したりという使い方もできます。早くバックテストができるようになるといいのですが。取引に使用するFXCMのデモ口座を作っておきます。こちらのページから登録しますとIDとパスワードがメールで届きます。トラックバック2005年06月27日SBFXとHyperOrderの連携方法これまで、FXCMの取引を自動化するにはMetaTrader4とHyperOrderの組み合わせを使うことにしていましたが、SBFXとHyperOrderの組み合わせでも使える方法がわかりました。詳しくは為替ロボット入門で書いていきますが、SBFXのファイル読み書き機能を使って、メールサーバーの受信ボックスに直接、メールを書き出すという方法になります。これまではSBFXはテスト用、MT4が本番用と考えていましたが、MT4のバックテスト機能が実装されるまでは、MT4でもバックテストできるようになりました。更新記事SBFXをメインにする方向で行きたいと思います。当サイトは現在のところ、内容の更新や準備に手一杯のため、コメントや質問をいただきましてもリアクションできない場合があります。スルーしてもどうか怒らないで下さい。(文章を書くのが驚くほど遅く、負担が大きいもので。全て目は通して、新しい記事の参考にさせていただきます。)リンクやトラックバックは大歓迎です!リンク報告なんてものは不要です。勝手にどんどん、貼っていただけると嬉しいです。こちらですlivedoorからの引越しが終わりまして、当サイトが為替ロボット公式サイト(?)になりました。為替ロボット研究所しばらくはlivedoor版為替ロボットのほうも平行して更新していくつもりです。*「為替ロボット」で検索してみるとリンクを貼ってくださっているサイトがいくつか見つかりました。注目度アップを狙いたいところです。Stop)FXCMなどのブローカーで採用されているトレイリングストップ(トレーリングストップ)機能について。トレイリングは「追いかける」の意味。ストップ値が追いかけてくる。時価での利益が一定値に達する度にストップ値を自動的に引き上げる(売りポジの場合は引き下げ)仕組み。これにより、オーダーしたまま放置していてもある程度の利益を確保できるようになります。(リミット達成ぎりぎりまで行ったのに値動きが反転、気がついたら儲けが0になっていた。いうのを防ぐ)また、うまくトレンドに乗っているときは利益確定でポジションを閉じよりも、トレイリングストップを使って様子見するほうが、結果的に利益が大きくなる可能性があります。1.2550に達したら、ストップが自動的に50pips引き上げられて1.2450になる。それ以降も50pips上がるごとにストップも50pips引き上げられる。一度引き上げられたストップを下げることはしない。期間とシフトの単位(Bar)移動平均などで期間を指定する場合、その単位は、チャートのBar1本分の時間。日足なら1本1日30分足なら1本30分。iMA(5,MODE_SMA,0)とした場合、Bar5本分の移動平均となるので、チャートが日足なら5日移動平均になり、チャートが1時間足なら5時間移動平均になる。シフトは指定したBar数ぶん前の値を得たい時に利用する。iは5日移動平均の現在値。(MACDチャートの各値を得る)MACDの各値を返す。書式:iMACD(短期,長期,シグナル,モード,シフト);短期、長期、シグナル=期間。単位はチャートの時間単位による。モード=MODE_MAINでMACD値、MODE_SIGNALはシグナル。シフト=指定した数(Bar数)ぶん前の値を得る。(移動平均の算出)移動平均の値を返す。書式:iMA(期間,モード,シフト);期間=移動平均の期間。単位はチャートの時間単位による。シフト=指定した数(Bar数)ぶん前の値を得る。トラックバックPoint(1ポイントの値を得る)チャートのシンボル(通貨組み合わせ)の1ポイント(1pip)に相当。経過秒数で表したもの。経過秒数で表したもの。-LastTradeTimeで算出される。トラックバックTotalTrades(ポジション数)保有ポジションと未約定のオーダーの合計数。OrderValue(cnt,VAL_LOTS);};のようにする。トラックバックOrderValue(オーダーの様々な値を得る)保有ポジションや未約定オーダーの様々な値を得る。書式:OrderValue(ポジション番号,モード)ポジション番号=保有ポジションのオープン時刻(未約定の場合はオーダー時刻)の古いものから順に番号が振られる(1番古いものが1)。ポジション状況などの変化により随時ふりなおされる。クローズ時刻(?)(クローズ値やクローズ時刻などはポジションが閉じられるまで値が入らない。トラックバックCloseOrder(ポジションを閉じる)ポジションを閉じる。書式:CloseOrder(チケット番号,ロット数,閉じ値,スリッページ,マークの色)チケット番号=全てのオーダーに与えられている通し番号。ポジション番号と違い、一度付いたら変化しない。OrderValue(p,VAL_TICKET);ロット数=閉じたいポジションのロット数を入力。ロットの一部のみ閉じることはできない。OrderValue(p,VAL_LOTS);閉じ値=クローズ価格。指値的な使い方はできない。閉じたいポジションが買いポジションなら売値Bidを、売りポジならBidを指定。スリッページ=3で固定しておけば問題なし。マークの色=クローズオーダーをチャート上で表示する時の色。トラックバックSetOrder(売買オーダーを出す)売買オーダーを出す。売買は現在のシンボルのみ。指値売り(指値以上で売り実行)売買値=指値。成り行きならAsk(買い値)やBid(売り値)を。スリッページ=許容スリッページ。3固定で問題なしストップ、リミット値=指定しないなら0矢印の色=チャート上に表示する時の矢印の色。例://成り行き買い、買い値-50pipsでストップ、リミットは無し、//ロット数はLotsで指定されている値。トラックバックPrint(文字を表示する)SBFXのJournal欄に文字列を表示する。書式:Print(文字列)文字列=文字列を直接入れるときは"でくくる("abc"でabcと表示)。変数と文字列の結合も可。結合は「,」か「+」。トラックバック条件式If文やWhile文などで使用する。結果が真(TRUE)か偽(FALSE)となる式。条件式どうしをand(&)やor(|)でつなげて複雑な条件式にすることもできる。