iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
SideProject30

從零開始的外匯自動程式交易系列 第 23

DAY23 用helper來簡化

  • 分享至 

  • xImage
  •  

前幾天分享了下市價單和下預掛單的函數,他們都是在private中,要調用有一定的麻煩性,所以我們可以在public中先宣告一些公共函數來調用私人函數,這樣我們便不需要記一些列舉常量,省去不少麻煩。

什麼是helper函數

Helper函數(輔助函數)指的是一個用來執行特定任務或子任務的小型函數,通常是為了簡化主要程式碼的邏輯或提高程式碼的可讀性而創建的。Helper函數通常不需要返回複雜的結果,而是執行一些常見的操作,例如數據處理、格式轉換、驗證等。這些函數的主要目的是降低程式碼的複雜性,使代碼更易於理解和維護,同時提高了程式碼的可重用性。

函數特點:

  • 模組化: Helper函數通常被設計為獨立的模組,可以在程式碼中的不同地方重複使用。

  • 單一責任: Helper函數應該執行單一明確的任務,不應該包含多個不相關的操作。

  • 可測試性: 由於Helper函數是相對獨立的,它們更容易測試,減少了錯誤的可能性。

  • 提高可讀性: 將複雜的邏輯和操作封裝在Helper函數中,有助於提高程式碼的可讀性,因為主要程式碼專注於主要邏輯。

  • 減少代碼重複: 通過重複使用Helper函數,可以減少冗余性,提高效率。

OpenPosition()

1°新增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);
}

2°定義函式

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函數的定義了

3°應用

//EA中
# include<TradeTest.mqh>
bool BuyPlaced;
BuyPlaced = Trade.Buy(_Symbol, TradeVolume);
...

OpenPending()

1°新增helper

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);

}
		

2°定義函式

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);
}

預掛單因為類型較多,所以定義也多,此處只舉一些例子,注意在寫的時候每以一個都要定義。


上一篇
DAY22 預掛單
下一篇
DAY24 追蹤止損
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言