//+------------------------------------------------------------------+ //| SymbolInfoHelper.mqh | //+------------------------------------------------------------------+ #ifndef _SYMBOLINFOHELPER_MQH_ #define _SYMBOLINFOHELPER_MQH_ //+------------------------------------------------------------------+ //| インクルード | //+------------------------------------------------------------------+ #ifdef _MQL4 #include #else // _MQL4 #include #endif // _MQL4 //+------------------------------------------------------------------+ //| ClSymbolInfoHelperクラス | //+------------------------------------------------------------------+ class ClSymbolInfoHelper : public CObject { public: ClSymbolInfoHelper(void); virtual ~ClSymbolInfoHelper(void); bool Refresh(void); bool RefreshRates(); bool Name(const string name); // シンボル設定 string Name(void); int Spread(void) const; double Bid(void); double Ask(void); int Digits(void); double Point(void); double LotsMin(void) const; double LotsMax(void) const; double LotsStep(void) const; double SwapLong(void) const; double SwapShort(void) const; protected: #ifdef _MQL4 string l_name; // シンボル MqlTick l_tick; // ティック double l_point; // ポイント double l_lots_min; // 最小ロット double l_lots_max; // 最大ロット double l_lots_step; // ロットステップ double l_swap_long; // スワップ(ロング) double l_swap_short; // スワップ(ショート) int l_digits; // 桁 #else // _MQL4 CSymbolInfo l_SymbolInfo; // シンボル情報 #endif // _MQL4 }; //+------------------------------------------------------------------+ //| コンストラクター | //+------------------------------------------------------------------+ ClSymbolInfoHelper::ClSymbolInfoHelper(void) { #ifdef _MQL4 l_name = ""; ZeroMemory(l_tick); l_point = 0.0; l_lots_min = 0.0; l_lots_max = 0.0; l_lots_step = 0.0; l_swap_long = 0.0; l_swap_short = 0.0; l_digits = 0; #else #endif } //+------------------------------------------------------------------+ //| デストラクター | //+------------------------------------------------------------------+ ClSymbolInfoHelper::~ClSymbolInfoHelper(void) { } //+------------------------------------------------------------------+ //| Refresh | //+------------------------------------------------------------------+ bool ClSymbolInfoHelper::Refresh(void) { #ifdef _MQL4 // クラス変数の設定 long tmp_long = 0; if(!SymbolInfoDouble(l_name, SYMBOL_POINT, l_point)) return(false); if(!SymbolInfoDouble(l_name, SYMBOL_VOLUME_MIN, l_lots_min)) return(false); if(!SymbolInfoDouble(l_name, SYMBOL_VOLUME_MAX, l_lots_max)) return(false); if(!SymbolInfoDouble(l_name, SYMBOL_VOLUME_STEP, l_lots_step)) return(false); if(!SymbolInfoDouble(l_name, SYMBOL_SWAP_LONG, l_swap_long)) return(false); if(!SymbolInfoDouble(l_name, SYMBOL_SWAP_SHORT, l_swap_short)) return(false); if(!SymbolInfoInteger(l_name, SYMBOL_DIGITS, tmp_long)) return(false); l_digits = (int)tmp_long; return(true); #else return(l_SymbolInfo.Refresh()); #endif } //+------------------------------------------------------------------+ //| レート更新 | //+------------------------------------------------------------------+ bool ClSymbolInfoHelper::RefreshRates(void) { #ifdef _MQL4 return(SymbolInfoTick(l_name, l_tick)); #else return(l_SymbolInfo.RefreshRates()); #endif } //+------------------------------------------------------------------+ //| シンボル設定 | //+------------------------------------------------------------------+ bool ClSymbolInfoHelper::Name(const string name) { #ifdef _MQL4 l_name = name; if(!Refresh()) { return(false); } return(true); #else return(l_SymbolInfo.Name(name)); #endif } //+------------------------------------------------------------------+ //| シンボル | //+------------------------------------------------------------------+ string ClSymbolInfoHelper::Name(void) { #ifdef _MQL4 return(l_name); #else return(l_SymbolInfo.Name()); #endif } //+------------------------------------------------------------------+ //| スプレッド | //+------------------------------------------------------------------+ int ClSymbolInfoHelper::Spread(void) const { #ifdef _MQL4 return((int)SymbolInfoInteger(l_name, SYMBOL_SPREAD)); #else return(l_SymbolInfo.Spread()); #endif } //+------------------------------------------------------------------+ //| 売値 | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::Bid(void) { #ifdef _MQL4 return(l_tick.bid); #else return(l_SymbolInfo.Bid()); #endif } //+------------------------------------------------------------------+ //| 買値 | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::Ask(void) { #ifdef _MQL4 return(l_tick.ask); #else return(l_SymbolInfo.Ask()); #endif } //+------------------------------------------------------------------+ //| 通貨ペアの小数点以下桁数 | //+------------------------------------------------------------------+ int ClSymbolInfoHelper::Digits(void) { #ifdef _MQL4 return(l_digits); #else return(l_SymbolInfo.Digits()); #endif } //+------------------------------------------------------------------+ //| 通貨ペアのポイント | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::Point(void) { #ifdef _MQL4 return(l_point); #else return(l_SymbolInfo.Point()); #endif } //+------------------------------------------------------------------+ //| 最小ロット | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::LotsMin(void) const { #ifdef _MQL4 return(l_lots_min); #else return(l_SymbolInfo.LotsMin()); #endif } //+------------------------------------------------------------------+ //| 最大ロット | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::LotsMax(void) const { #ifdef _MQL4 return(l_lots_max); #else return(l_SymbolInfo.LotsMax()); #endif } //+------------------------------------------------------------------+ //| 最大ロット | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::LotsStep(void) const { #ifdef _MQL4 return(l_lots_step); #else return(l_SymbolInfo.LotsStep()); #endif } //+------------------------------------------------------------------+ //| スワップ(ロング) | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::SwapLong(void) const { #ifdef _MQL4 return(l_swap_long); #else return(l_SymbolInfo.SwapLong()); #endif } //+------------------------------------------------------------------+ //| スワップ(ショート) | //+------------------------------------------------------------------+ double ClSymbolInfoHelper::SwapShort(void) const { #ifdef _MQL4 return(l_swap_short); #else return(l_SymbolInfo.SwapShort()); #endif } #endif // _SYMBOLINFOHELPER_MQH_ //+------------------------------------------------------------------+