ソースコード完成例
各処理の説明
■プロパティの設定
①#property indicator_chart_window
①#property indicator_chart_window
インジゲータをチャートウインドウに表示する。
■グローバル変数の設定
①double tsp_money = 0;
②int flag = 0;
③int h_total = 0;
④datetime chk_day;
①double tsp_money = 0;
double型の変数を指定。ここでは、tsp_moneyという変数を指定して初期化。
②int flag = 0;
int型の変数を指定。ここでは、flagという変数を指定して初期化。
③int h_total = 0;
int型の変数を指定。ここでは、h_totalという変数を指定して初期化。
④datetime chk_day;
datetime型の変数を指定。ここでは、chk_dayという変数を指定。
■初期化関数の設定
int OnInit()
{
return(INIT_SUCCEEDED);
}
今回はとくにありません。
■指標計算関数の設定
int start()
{
①bool chk;
int cnt;
datetime today = TimeCurrent();
②if(flag == 0)
{
chk_day = TimeCurrent();
flag = 1;
}
③if(today != chk_day)
{
flag = 0;
tsp_money = 0;
cnt = 0;
h_total = 0;
}
④cnt = OrdersHistoryTotal();
⑤if(h_total != cnt)
{
tsp_money = 0;
⑥for(int i = OrdersHistoryTotal() - 1; i >= OrdersHistoryTotal()-10; i--)
{
⑦chk = OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
⑧if ( chk == true )
{
⑨datetime st_day = OrderCloseTime();
⑩string a = TimeToStr(today);
⑪string b = TimeToStr(st_day);
⑫string c = StringSubstr(a,0,10);
⑬string d = StringSubstr(b,0,10);
⑭if(c == d)
{
tsp_money = tsp_money+OrderProfit();
}
}
}
⑮ObjectsDeleteAll();
ObjectCreate( "損益",OBJ_LABEL,0,0,0);
ObjectSet("損益",OBJPROP_XDISTANCE,5);
ObjectSet("損益",OBJPROP_YDISTANCE,18);
ObjectSetText("損益","本日の損益:"+tsp_money,20,"MS ゴシック",clrWhite);
⑯h_total = OrdersHistoryTotal();
}
return(0);
}
①変数の設定
bool chk;
オーダーが取得できたかどうか、trueかfalseを代入する。
int cnt;
現在のトレード履歴の数を代入する。
datetime today = TimeCurrent();
datetime型の変数「today」にTimeCurrent()で本日の日時を取得して代入しています。
②flagの条件文
flagの条件文。flagが0のとき、chk_dayにTimeCurrent()で取得した日時を取得して代入しています。
flagを1にします。
③日付をチェックする条件文
日付が変わったら、変数を初期化します。
④cnt = OrdersHistoryTotal();
変数cntにOrdersHistoryTotal()で取得したトレード履歴の数を代入します。
⑤if(h_total != cnt)
トレード履歴の数が増えたときの条件文。
変数tsp_moneyを初期化します。
⑥for(int i = OrdersHistoryTotal() - 1; i >= OrdersHistoryTotal()-10; i--)
直近のトレード履歴10個分をfor文で繰り返します。
全履歴をチェックするとMT4に負荷がかかる可能性があるため、直近の10履歴だけチェックしています。
⑦chk = OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
変数chkにOrderSelectでオーダーを取得します。取得できた場合は、true、取得できなかった場合は、falseを返します。
⑧if ( chk == true )
オーダーが取得できたかどうかの条件文。
⑨datetime st_day = OrderCloseTime();
変数st_dayにOrderCloseTime()で取得した決済日時を代入します。
⑩string a = TimeToStr(today);
変数aにTimeToStrで変数todayの値を文字列に変換した値を代入します。
⑪string b = TimeToStr(st_day);
変数bにTimeToStrで変数st_dayの値を文字列に変換した値を代入します。
⑫string c = StringSubstr(a,0,10);
変数cにStringSubstrで変数aの0番目から10番目までの文字列を取得して代入します。
⑬string d = StringSubstr(b,0,10);
変数dにStringSubstrで変数bの0番目から10番目までの文字列を取得して代入します。
⑭トレード履歴の決済日時をチェックする条件文
本日の日付(変数c)と決済した日付(変数d)が一致している場合、変数tsp_moneyに損益を加算していきます。
⑮オブジェクトの設定
表示されているオブジェクトをすべて削除します。
オブジェクトのラベル名や表示位置、書式の設定などをします。
詳しくは、Blog「
オブジェクトでスプレッドをチャートに表示させる」を参考にしてください。
⑯h_total = OrdersHistoryTotal();
変数h_totalにOrderHistoryTotal()で取得した取引履歴の数を代入します。