負け越し数を計算する

  • 以下のタイミングで過去の負け越し数を計算する
    ①EA投入時(過去3か月間を指定)
    ②取引成立時

int MagicNumber_bid = 1111; // bidマジックナンバー
int MagicNumber_ask = 1112; // askマジックナンバー
datetime Last_lose_check_time = 0; //前回の負け越しチェック時間
int global_excessive_lossed = 0; // 負け越し数

OnInit()

Excessive_losses_calculation();

OnTrade()

Excessive_losses_calculation();

Excessive_losses_calculation()

//+------------------------------------------------------------------+
//| 負け越し数計算関数                                                   |
//+------------------------------------------------------------------+
void Excessive_losses_calculation()
  {

   if(Last_lose_check_time < TimeCurrent())
     {

      //   Print("before global_excessive_lossed ", global_excessive_lossed);
      int Excessive_losses = global_excessive_lossed; // 負け越し数

      //最初は90日間の履歴を選択
      if(Last_lose_check_time ==0)
        {
         // 取引履歴をリクエストする * 直近90日の履歴を取得
         HistorySelect(TimeCurrent() - 7776000, TimeCurrent()+1);
         Print("チェック対象 : ",TimeCurrent() - 7776000,"  →  ", TimeCurrent()+1);
        }

      //以降は前回時間までの履歴を選択
      else
        {
         HistorySelect(Last_lose_check_time, TimeCurrent()+1);
         Print("チェック対象 : ",Last_lose_check_time,"  →  ", TimeCurrent()+1);
        }

      Last_lose_check_time = TimeCurrent()+1;
      int total = HistoryDealsTotal();

      for(int i = 0; i < total; i++)
        {

         // 約定取引を取得
         ulong myticket = HistoryDealGetTicket(i);

         if(myticket > 0)
           {
            // 損益情報を取得する
            double Last_WL_amount = HistoryDealGetDouble(myticket, DEAL_PROFIT);

            if(HistoryDealGetInteger(myticket,DEAL_MAGIC) == MagicNumber_bid || HistoryDealGetInteger(myticket,DEAL_MAGIC) == MagicNumber_ask)
              {
               ENUM_DEAL_ENTRY entry = HistoryDealGetInteger(myticket, DEAL_ENTRY); // 約定 / 決済 | EntryIn / Outの確認
               if(entry == DEAL_ENTRY_OUT)
                 {
                  Print("■ 利益: ", Last_WL_amount);
                  if(Last_WL_amount > 0)
                    {
                     Excessive_losses -= 1;
                     if(Excessive_losses <= 0)
                        Excessive_losses = 0;

                     Print("■ 累積負け越し数 ", global_excessive_lossed, " → ", Excessive_losses);
                     global_excessive_lossed = Excessive_losses;
                    }
                  else
                     if(Last_WL_amount < 0)
                       {
                        Excessive_losses += 1;
                        Print("■ 累積負け越し数 ", global_excessive_lossed, " → ", Excessive_losses);
                        global_excessive_lossed = Excessive_losses;
                       }
                 }
              }
           }
        }
     }
  }




MQL5コード一覧はコチラ

https://note.com/noway_pway/n/na50e47a51645

この記事が気に入ったらサポートをしてみませんか?