◎ 注意事項

右中央部に「シグナル配信」として、チャートを載せていますが、自動更新できるか? 表示速度は? などのTESTに使用しているだけです。
本ブログの掲載情報に基づいて取引を行い、被った損害について本ブログ及び管理人は一切の責任を負えませんのでご了承下さい。


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
バックテストのやり方

売買シグナルを出すインディケーター「MA_cross.mq4」と
そのシグナルを元に自動売買を行うEA「【EA】MA_cross.mq4」を作成しました。
今回は、この自動売買で過去の値動きを元にどのくらいの損益を出すか調べたいと思います。

[バックテストのやり方]の続きを読む
スポンサーサイト
プログラム入門その5

前回、売買シグナルを表示するインディケーターを作成しました。

期間の異なる移動平均線ので売買シグナルを表示するプログラム

#property indicator_chart_window
#property indicator_buffers 4

//---- バッファー
double Fa_Buf[];
double Sl_Buf[];
double Buy_Buf[];
double Sell_Buf[];

//---- 期間の変数
extern int Fa_Period=10;
extern int Sl_Period=20;

//初期化
int init()
{
//---- バッファのインディケーターへの割り当て
SetIndexBuffer(0,Fa_Buf);
SetIndexBuffer(1,Sl_Buf);
SetIndexBuffer(2,Buy_Buf);
SetIndexBuffer(3,Sell_Buf);

//---- インディケーターの種類の設定
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1, Red);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1, Blue);
SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 1, Blue);
SetIndexArrow(2,233);
SetIndexEmptyValue(2,0);
SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, 1, Red);
SetIndexArrow(3,234);
SetIndexEmptyValue(3,0);
return(0);
}

//処理
int start()
{
int i, limit = Bars-IndicatorCounted();

for(i=limit-1; i>=0; i--)
{
Fa_Buf[i] = iMA(NULL,0,Fa_Period,0,MODE_SMA,PRICE_CLOSE,i);
Sl_Buf[i] = iMA(NULL,0,Sl_Period,0,MODE_SMA,PRICE_CLOSE,i);

if(Fa_Buf[i+1] <= Sl_Buf[i+1] && Fa_Buf[i] > Sl_Buf[i]) Buy_Buf[i] = Low[i];
if(Fa_Buf[i+1] >= Sl_Buf[i+1] && Fa_Buf[i] < Sl_Buf[i]) Buy_Buf[i] = High[i];
}

return(0);
}

[プログラム入門その5]の続きを読む
5分足
2009_01_27_m05_24.gif

15分足
2009_01_27_m15_24.gif

マネーパートナーズにて取引。

ポジション:117.80(22:56) LONG
利益確定:117.95(23:22)
Stop : 117.57
Trailing Stop : なし

トレード経緯
・本日の方向性は上げだったが、1時間足のトレンドラインを下に割っている為、下げと判断。
・5分足で21:30頃からこう着状態(放れた方に乗っかる)
・15分足のMACDがゴールデンクロス
・続いて平均足も反転した為、LONGポジションを持つ。
・下げトレンド中の押し目と判断した為、目先の利食いポイントは118.25(50%戻し)

今回の反省
・ポジションを持った後、バンドウォークを始めたが、ADXは上がらず・・・
・118.15まで行ったが勢いがない為、ボリンジャーバンドの2シグマ割れで利食いに変更
・118.10で割れを確認
・ボタンをクリックする時に一瞬の迷いがあり、ワンテンポ遅れる
・気づくと117.95まで下落・・・決済

今回得た事
・トレードの筋書きが出来たのであれば、迷う事なく従う事。
・利食いをした後、利益が乗る事があるが、そこは勉強不足と思い相場感を養う事に専念する。
5分足
2009_01_16_m5_24.gif
15分足
2009_01_16_m15_24.gif

マネーパートナーズにて取引。

ポジション:120.22(23:39) SHORT
利益確定:120.17(0:06)
Stop : 120.75
Trailing Stop : なし

トレード経緯
・5分足のMACDがデットクロス
・15分足でダブルトップになりそうだった。
・平均足も変換していた

今回の反省
結果としては、読み通り119.15まで押し目を作った形になり、入りのタイミングとしては良かったと思うのだか、恐怖感が先に出た。
16日は完全な上昇トレンドだったので、売りサインは無視、早めに手仕舞いで望んだ。

・高値圏である
・ダブルトップになりそう
という点でポジションを持ってしまった。

・120.10~119.95のラインが堅く、なかなか割れずにいた。
・一旦は120を割ったが5分足でくみ上げが続き、その後下落。
・120.20~120.00のラインでコマ足になりここで利確

今回得た事
自信のない、値ごろ感で入ったように感じてしまったのだが、読みは当たっていた。
・手仕舞いをする時は、ポジションを持った根拠が崩れた時!!
今回の利確までの経緯
・120.00が割れそうにない
        ↓
・コマ足になった
        ↓
・まずい、逆に行きそうだな?!
         ↓
・利益が少しでもあるうちに確定しちゃえ

で利確。・・・・・・情けない。
その後、目先の目標であった、119.20まで下落。
・手仕舞いをする時は、ポジションを持った根拠が崩れた時!!
OrderClose(手仕舞い)


bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)

ポジションを閉じる。
もし成功すれば、この関数はTRUEを返す。
もし失敗すれば、この関数はFALSEを返す。


Parameters:

ticket - 重複しないオーダーチケット
lots - ロット数
price - 決済したい価格
slippage - 最大スリッページポイント
Color - チャート上の決済矢印の色。
もしこの変数が間違っているかCLR_NONE値であれば
チャート上に何も描かれない。



Sample:


if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderClose(ticket_id,1,Ask,3,Red);
return(0);
}



解説:

もしRSIの値が「75より大きかったら」
変数「ticket_id」のチケット番号のポジジョンを1ロット、現在のAsk値でスリップ許容範囲は3までで
決済する。チャートに表示する矢印の色は赤を使用する。

OrderSend(注文する)


int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration, color Color=CLR_NONE)

注文や未決注文をするための主関数
トレードサーバによって挿入されたチケット番号を返し、もし失敗すれば-1を返す。
エラー情報の詳細を得たい場合はGetLastError()関数を呼び出す。
メモ:
注文(OP_SELLやOP_BUY)する場合、Bid(売値)、Ask(買値)の最新の価格しか注文できない。
小数点以下の桁数が一致していない場合も注文できない。
ストップとリミットの値はオープン価格と近いと注文できない。


Parameters:

symbol - 通貨
cmd - 取引タイプ。取引操作子のどれか。
volume - ロット数
price - オープン価格
slippage - スリッページ
stoploss - ストップロス値
takeprofit - 利確値
comment - コメント。コメントの最後の部分はサーバーによって変更される。
magic - オーダー識別番号。ユーザ定義の識別番号。
expiration - 有効期限
arrow_color - チャート上の矢印の色。
もしこの変数が間違っているかCLR_NONE値であれば
チャート上に何も描かれない。



Sample:


int ticket;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,
Ask+25*Point,"My order #2",16384,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}



解説:

もしRSIの値が「25より小さかったら」
変数「ticket」に下記条件で注文したチケット番号を代入する。
・現在表示中の通貨
・買いポジション
・1ロット
・現在のAsk値
・スリップ許容範囲は3
・現在のAsk値から25Point引いた値にストップを置く
・現在のAsk値に25Point足した値で利確する
・"My order #2"とコメントを付ける
・オーダー識別番号は「16384」とする
・有効期限は無し
・チャート上に緑色で矢印を表示する。

もし、変数「ticket」が0より小さい(注文が約定しなかった)場合、
"OrderSend failed with error #"+"エラー番号"を表示する。
Trade operations (取引動作子)


OrderSend()関数の動作タイプ。

これらは以下の値を持つ:
定数説明
OP_BUY0買いポジション
OP_SELL1売りポジション
OP_BUYLIMIT2指値で買う
OP_SELLLIMIT3指値で売る
OP_BUYSTOP4逆指値で買う
OP_SELLSTOP5逆指値で売る
前回期間の異なる移動平均線を表示するインディケーターを作成しました。
今回は、クロスしたことを判断し、シグナルを出すインディケーターを作成します。


[プログラム入門その4]の続きを読む
2009_01_09_m15_24.gif

MACDダイバージェンス

124.40でLONGエントリー
125.55で利確

後から気づきましたが15分足のMACDがダイバージェンスになっていました。
今回はエントリー・利確タイミング共に納得のいくトレードでした。
最近は5分足でトレードを行っています。
前回、移動平均線をチャート上に表示させるインディケーターを作成しました。
今回は、移動平均線のクロスで売買シグナルを表示させるインディケーターを作成しようと思いますが
その前に、前回作成したのは4日間の単純移動平均線です。
移動平均の種類には単純移動平均(SMA)のほか、指数平滑移動平均(EMA) や加重移動平均(WMA)などあり
中には複雑な計算をするものもあります。これを一から作るのは少々骨の折れる作業です。



[プログラム入門 その3]の続きを読む
最終的に、移動平均線のクロスによる自動売買のプログラムを完成させる予定ですが
いきなり自動売買のコードを書くことは難しいので、これから3段階に分けて
解説したいと思います。
1段階目で移動平均線をチャートに表示させるインディケーターを作成する
2段階目で移動平均線のクロスで売買シグナルを表示させるインディケーターを作成する
3段階目で売買シグナルに基ずく売買を自動で行うプログラム(EA)を作成する

今回は1段階目の移動平均線をチャートに表示させるインディケーターを作成したいと思います。


[プログラム入門 その2]の続きを読む
移動平均線のクロスによる自動売買のプログラムを解説しようと思います。
プログラムと聞くと敬遠しがちですが、コツをつかんでしまえばトレードにかなり有利になります。
自分の欲しい情報を自分の見やすい形に表示してくれるチャートは精神的に有利になり、思い切ったトレードが出来るからです。


[プログラム入門その1]の続きを読む
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。