(註:本站文案除原創外,其餘訊息来自互联网收集和整理,请自行参酌。)
2016/09/30 (五)
EA编程之自訂函數簡化主程序 !
>>><<< $ ¥£€ >>><<<
一、常用自訂函數:
MQL4提供了大量的基本函數和語句,然而我們在程式設計中發現很多的對行情的判斷與操作都是重複的,比如判斷指標快慢線是否交叉,這就需要用到自訂函數來簡化主程序。
自訂函數通常放在程式的後面,函數格式與說明如下:(略圖)
MQL4提供了大量的基本函數和語句,然而我們在程式設計中發現很多的對行情的判斷與操作都是重複的,比如判斷指標快慢線是否交叉,這就需要用到自訂函數來簡化主程序。
自訂函數通常放在程式的後面,函數格式與說明如下:(略圖)
在程式中調用該自訂函數的例子如下:
If (myIndicators(“金叉”,Close[0]))=”Sell”
將自訂函數參數寫進去,就會得到按預定演算法返回一個結果。
二、最大開倉量計算:
保證金的合理使用是風險控制的重要手段,因此計算最大開倉量就顯得非常重要。在許多風險控制論述中都會有這麼一段類似的文字描述:“開倉量為餘額的5%”。其實這種說法極其的不準確,甚至會導致因開倉量控制不嚴格而帶來無謂的虧損。
不同貨幣對的1標準手自由保證金是不同的,而且如果你有持倉訂單,由於價格變化導致帳戶淨值也在變化,那麼開倉量(手)也會發生變化。
以下代碼計算了在當前貨幣對、當前價格的前提下,使用全部自由保證金(帐户幣元)的最大開倉量(手): 其中myBuyLots為買入訂單的最大開倉量(手),mySellLots為賣出訂單的最大開倉量(手)。計算方法須考慮帳戶淨值(略)、開倉量(略)、1標準手自由保證金(略)。
所以,如果自定設置的5%開倉量應該為:myLots×5%。 我們來看看通過程式計算顯示的結果:最大開倉量計算如果到了小數點後面8位,而實際操盤時的開倉量最小為0.01手,如果你直接使用這個資料,程式會報錯,因此還需要通過內置函數將開倉量截止(不用四捨五入)到小數點後面2位:
myLots =NormalizeDouble(myLots,2) OrderSend(Symbol(),OP_SELL, myLots ,Bid,0,0,0);//開一張賣出訂單
If (myIndicators(“金叉”,Close[0]))=”Sell”
將自訂函數參數寫進去,就會得到按預定演算法返回一個結果。
二、最大開倉量計算:
保證金的合理使用是風險控制的重要手段,因此計算最大開倉量就顯得非常重要。在許多風險控制論述中都會有這麼一段類似的文字描述:“開倉量為餘額的5%”。其實這種說法極其的不準確,甚至會導致因開倉量控制不嚴格而帶來無謂的虧損。
不同貨幣對的1標準手自由保證金是不同的,而且如果你有持倉訂單,由於價格變化導致帳戶淨值也在變化,那麼開倉量(手)也會發生變化。
以下代碼計算了在當前貨幣對、當前價格的前提下,使用全部自由保證金(帐户幣元)的最大開倉量(手): 其中myBuyLots為買入訂單的最大開倉量(手),mySellLots為賣出訂單的最大開倉量(手)。計算方法須考慮帳戶淨值(略)、開倉量(略)、1標準手自由保證金(略)。
所以,如果自定設置的5%開倉量應該為:myLots×5%。 我們來看看通過程式計算顯示的結果:最大開倉量計算如果到了小數點後面8位,而實際操盤時的開倉量最小為0.01手,如果你直接使用這個資料,程式會報錯,因此還需要通過內置函數將開倉量截止(不用四捨五入)到小數點後面2位:
myLots =NormalizeDouble(myLots,2) OrderSend(Symbol(),OP_SELL, myLots ,Bid,0,0,0);//開一張賣出訂單
(略圖)
…待續…
>>><<< $ ¥£€ >>><<<
(註:本站文案除原創外,其餘訊息来自互联网收集和整理,请自行参酌。)