前幾天分享了下市價單和下預掛單的函數,他們都是在private中,要調用有一定的麻煩性,所以我們可以在public中先宣告一些公共函數來調用私人函數,這樣我們便不需要記一些列舉常量,省去不少麻煩。
Helper函數(輔助函數)指的是一個用來執行特定任務或子任務的小型函數,通常是為了簡化主要程式碼的邏輯或提高程式碼的可讀性而創建的。Helper函數通常不需要返回複雜的結果,而是執行一些常見的操作,例如數據處理、格式轉換、驗證等。這些函數的主要目的是降低程式碼的複雜性,使代碼更易於理解和維護,同時提高了程式碼的可重用性。
函數特點:
模組化: Helper函數通常被設計為獨立的模組,可以在程式碼中的不同地方重複使用。
單一責任: Helper函數應該執行單一明確的任務,不應該包含多個不相關的操作。
可測試性: 由於Helper函數是相對獨立的,它們更容易測試,減少了錯誤的可能性。
提高可讀性: 將複雜的邏輯和操作封裝在Helper函數中,有助於提高程式碼的可讀性,因為主要程式碼專注於主要邏輯。
減少代碼重複: 通過重複使用Helper函數,可以減少冗余性,提高效率。
class CTrade
{
private:
//省略
public:
MqlTradeResult result;
bool Buy(string pSymbol, double pVolume, double pStop = 0, double pProfit = 0, string pComment = NULL);
bool Sell(string pSymbol, double pVolume, double pStop = 0, double pProfit = 0, string pComment = NULL);
}
bool CTrade::Buy(string pSymbol,double pVolume,double pStop=0.000000,double pProfit=0.000000,string pComment=NULL)
{
bool success = OpenPosition(pSymbol,ORDER_TYPE_BUY,pVolume,pStop,pProfit,pComment);
return(success);
}
bool CTrade::Sell(string pSymbol,double pVolume,double pStop=0.000000,double pProfit=0.000000,string pComment=NULL)
{
bool success = OpenPosition(pSymbol,ORDER_TYPE_SELL,pVolume,pStop,pProfit,pComment);
return(success);
}
這樣便是完成了helper函數的定義了
//EA中
# include<TradeTest.mqh>
bool BuyPlaced;
BuyPlaced = Trade.Buy(_Symbol, TradeVolume);
...
class CTrade
{
private:
//省略
public:
MqlTradeResult result;
bool BuyStop(string pSymbol, double pVolume, double pPrice, double pStop = 0, double pProfit = 0, datetime pExpiration = 0, string pComment = NULL);
bool SellStop(string pSymbol, double pVolume, double pPrice, double pStop = 0, double pProfit = 0, datetime pExpiration = 0, string pComment = NULL);
bool BuyLimit(string pSymbol, double pVolume, double pPrice, double pStop = 0, double pProfit = 0, datetime pExpiration = 0, string pComment = NULL);
bool SellLimit(string pSymbol, double pVolume, double pPrice, double pStop = 0, double pProfit = 0, datetime pExpiration = 0, string pComment = NULL);
bool BuyStopLimit(string pSymbol, double pVolume, double pPrice, double pStopLimit, double pStop = 0, double pProfit = 0, datetime pExpiration = 0, string pComment = NULL);
bool SellStopLimit(string pSymbol, double pVolume, double pPrice, double pStopLimit, double pStop = 0, double pProfit = 0, datetime pExpiration = 0, string pComment = NULL);
}
bool CTrade::BuyLimit(string pSymbol,double pVolume,double pPrice,double pStop=0.000000,double pProfit=0.000000,datetime pExpiration=0,string pComment=NULL)
{
bool success = OpenPending(pSymbol,ORDER_TYPE_BUY_LIMIT,pVolume,pPrice,pStop,pProfit,0,pExpiration,pComment);
return(success);
}
bool CTrade::SellLimit(string pSymbol,double pVolume,double pPrice,double pStop=0.000000,double pProfit=0.000000,datetime pExpiration=0,string pComment=NULL)
{
bool success = OpenPending(pSymbol,ORDER_TYPE_SELL_LIMIT,pVolume,pPrice,pStop,pProfit,0,pExpiration,pComment);
return(success);
}
bool CTrade::BuyStop(string pSymbol,double pVolume,double pPrice,double pStop=0.000000,double pProfit=0.000000,datetime pExpiration=0,string pComment=NULL)
{
bool success = OpenPending(pSymbol,ORDER_TYPE_BUY_STOP,pVolume,pPrice,pStop,pProfit,0,pExpiration,pComment);
return(success);
}
預掛單因為類型較多,所以定義也多,此處只舉一些例子,注意在寫的時候每以一個都要定義。