「OriginalCpending.mqh」ファイルの全体記述

Uncategorized

「OriginalCpending.mqh」ファイルの全体記述は以下の通りです。

//+------------------------------------------------------------------+
//|                                             OriginalCpending.mqh |
//|                                                         MQL5ssei |
//|                                    https://mqlinvestmentlab.com/ |
//+------------------------------------------------------------------+
#property copyright "MQL5ssei"
#property link      "https://mqlinvestmentlab.com/"
#property version   "1.00"

class OriginalCpending
  {
      private:
		void OrderCount(string parSymbol);
		int CountBuyLimit, CountSellLimit, CountBuyStop, CountSellStop, CountBuyStopLimit, CountSellStopLimit, CountTotalPending;
		ulong TicketsPending[];
		
		public:
		int BuyLimitNum(string parSymbol);
		int SellLimitNum(string parSymbol);
		int BuyStopNum(string parSymbol);
		int SellStopNum(string parSymbol);
		int BuyStopLimitNum(string parSymbol);
		int SellStopLimitNum(string parSymbol);
		int TotalPendingNum(string parSymbol);
		
		void GetOrderTickets(string parSymbol, ulong &parTickets[]);
  };
  
  void OriginalCpending::OrderCount(string parSymbol)
{
   //ポジション数を格納する変数の初期化
	CountBuyLimit = 0; 
	CountSellLimit = 0;
	CountBuyStop = 0; 
	CountSellStop = 0; 
	CountBuyStopLimit = 0; 
	CountSellStopLimit = 0; 
	CountTotalPending = 0;
	
	//オーダー番号を格納する配列の初期化とリサイズ
	ArrayResize(TicketsPending, 1);
	ArrayInitialize(TicketsPending, 0);
	
	for(int i = 0; i < OrdersTotal(); i++)//注文数分チェック
	{
		ulong ticket = OrderGetTicket(i);
		if(OrderGetString(ORDER_SYMBOL) == parSymbol)
		{
			long type = OrderGetInteger(ORDER_TYPE);
			
			switch((int)type)
			{
				case ORDER_TYPE_BUY_STOP://ストップ買い待機注文なら
				CountBuyStop++;//インクリメント
				break;
				
				case ORDER_TYPE_SELL_STOP://ストップ売り待機注文なら
				CountSellStop++;//インクリメント
				break;
				
				case ORDER_TYPE_BUY_LIMIT://リミット買い待機注文なら
				CountBuyLimit++;//インクリメント
				 break;
				
				case ORDER_TYPE_SELL_LIMIT://リミット売り待機注文なら
				CountSellLimit++; //インクリメント
				break;
				
				case ORDER_TYPE_BUY_STOP_LIMIT://ストップリミット買い待機注文なら
				
				CountBuyStopLimit++;//インクリメント
				 break;
				
				case ORDER_TYPE_SELL_STOP_LIMIT://ストップリミット売り待機注文なら
				CountSellStopLimit++; //インクリメント
				break;
			}//switch文の終わり
			
			//全体の待機注文数をインクリメント
			CountTotalPending++;
			
			ArrayResize(TicketsPending,CountTotalPending);
			TicketsPending[ArraySize(TicketsPending)-1] = ticket;
		}//if文の終わり
	}//for文の終わり
}//処理実装記述の終わり

// 買いのリミット注文数を取得する
int OriginalCpending::BuyLimitNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountBuyLimit);
}


// 売りのリミット注文数を取得する
int OriginalCpending::SellLimitNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountSellLimit);
}

// 買いのストップト注文数を取得する
int OriginalCpending::BuyStopNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountBuyStop);
}

// 売りのストップト注文数を取得する
int OriginalCpending::SellStopNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountSellStop);
}

// 買いのストップトリミット注文数を取得する
int OriginalCpending::BuyStopLimitNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountBuyStopLimit);
}

// 売りのストップトリミット注文数を取得する
int OriginalCpending::SellStopLimitNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountSellStopLimit);
}

//待機注文全体の数を取得する
int OriginalCpending::TotalPendingNum(string parSymbol)
{
	OrderCount(parSymbol);
	return(CountTotalPending);
}

//オーダー番号を取得する
void OriginalCpending::GetOrderTickets(string parSymbol,ulong &parTickets[])
{
	OrderCount(parSymbol);//注文種別の振り分けと、各種配列各種格納配列へのオーダー番号代入を行う
	ArrayCopy(parTickets,TicketsPending);//メインプラグラムで用意した待機注文格納配列にオーダー番号をコピー
	return;
}
タイトルとURLをコピーしました