Profit&Loss DayChecker - インジゲーター

sitemap
世界最強のFXキャッシュバックサイト
TOP > インジゲータ > Profit&Loss DayChecker
Profit&Loss DayChecker
Profit&Loss DayCheckerの説明
当日のトレード損益(決済損益)の合計をオブジェクトでチャートに表示するインジゲーターです。
決済するたびに値を更新します。

ソースコード説明
ソースコード完成例
cci_arrowコード
テキスト版(ソースコード)はこちら
各処理の説明
■プロパティの設定
①#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()で取得した取引履歴の数を代入します。
パラメータの説明
パラメーターはとくにありません。
使用例
1回目のトレード損益が-80円のときの表示結果。


2回目のトレード損益が-160円のときの表示例。
1回目(-80円)+2回目(-160円)=-240円になります。


このときのトレード履歴はこんな感じになっています。(クリックで拡大します)

一番上の履歴は、前日のトレード結果です。今回は、当日の損益の合計のみを取得して表示させているので、前日分の損益が含まれていないことがわかると思います。
注意事項
損益は円単位で表示されています。Pipsでの表示は、別のインジゲーターで作成します。
このインジゲータに使用しているMQLの一覧
関連ページ
big_candlestick_judgment
スポンサードリンク
Twitter