期貨量化交易軟件:智能交易的特性
在赫茲期貨量化交易系統(tǒng)中創(chuàng)建并測試智能交易存在以下列舉特性。

編輯切換為居中
在開倉之前必須驗證賬戶內(nèi)是否存在自由保證金。如果賬戶內(nèi)的自由保證金不足,開倉交易將失敗。您可以測試檢驗"FreeMargin"值不能夠少于1000,因為測試期間一個標準手的的價格為 1000。 if(AccountFreeMargin() < 1000) return(0); // 沒有保證金 - 退出
您可以通過使用預設定數(shù)組Time, Open, Low, High, Close, Volume 獲取歷史數(shù)據(jù)。因為歷史數(shù)據(jù)的原因,指數(shù)的增長是逐漸遞減-指數(shù)的最后值為0。指數(shù) 1 表示倒數(shù)一個時間周期,指數(shù)2表示倒數(shù)兩個時間周期,指數(shù)3 倒數(shù)三個時間周期以此類推。 // 如果前一個蠟燭柱的Close少于 ?// 前者的Close if(Close[1] < Close[2]) return(0);
使用其他的時間間隔甚至是其他貨幣對可以獲得當前歷史的數(shù)據(jù)。得到這些數(shù)據(jù)首先需要確定一維數(shù)組,并且在函數(shù)"ArrayCopySeries"的幫助下完成復制工作。對于函數(shù)的調(diào)用您可以發(fā)送較少數(shù)量的參量,并且不指明默認參量。 double eur_close_m1[]; int number_copied = ArrayCopySeries(eur_close_m1, MODE_CLOSE, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"EURUSD", PERIOD_M1);
智能交易的編寫與其他程序創(chuàng)建一樣需要一些附加的調(diào)試信息。 赫茲期貨量化語言提供了幾種獲取信息的方法。
函數(shù) "Alert" 會出現(xiàn)一個對話窗口顯示用戶指定數(shù)據(jù)。 Alert("FreeMargin grows to ", AccountFreeMargin(), "!");
函數(shù) "Comment"將會在圖表窗口的左上角顯示用戶指定的數(shù)據(jù)。符號"\n" 使用于字行的轉接。 Comment("FreeMargin is ", AccountFreeMargin(), ".");
函數(shù)"Print"在系統(tǒng)日志中打印用戶指定的數(shù)據(jù)。 Print("FreeMargin is ", AccountFreeMargin(), ".");
程序中錯誤的獲取,函數(shù)"GetLastError"的功能非常有用。例如,交易訂單經(jīng)常返回替克數(shù)。如果這個替克數(shù)字等于 0 (在執(zhí)行業(yè)務過程中出現(xiàn)了錯誤),獲取這個錯誤的詳細信息必須調(diào)用函數(shù)"GetLastError": int iTickNum = 0; int iLastError = 0; ... iTickNum = OrderSend(Symbol(), OP_BUY, g_Lots, Ask, 3, 0, ? ? ? ? ? ? ? ? ? ? ? Ask + g_TakeProfit * g_Points); if(iTickNum <= 0) ? ?{ ? ? iLastError = GetLastError(); ? ? if(iLastError != ERR_NO_ERROR) ? ? ? ? ?Alert("Some Message"); ?} 調(diào)用"GetLastError"函數(shù)可以顯示錯誤代碼,并且重新設置改值。 因此連續(xù)調(diào)用這個函數(shù)返回的值將是0。
怎樣確定開始柱? (必須找到先前柱結束的位置)存在以下幾種方法。 第一種方法以檢測柱的數(shù)量為基礎: static int prevbars = 0; ... if(prevbars == Bars) return(0); prevbars = Bars; ... 這種方法在歷史加載的情況下不能運行。在“先前”柱沒有完成之間,柱的數(shù)量發(fā)生改變。這種情況下您可以檢查這些值之間的差距等于1。 接下來這種方法是以 "Volume" 值為基礎取決先前每個柱生成的替克的數(shù)量。第一個替克意味著形成柱的"Volume"值等于 1: if( Volume[0] > 1) return(0); ... 這種方法在大量價格替克輸入時可能會運行失敗。問題在于價格替克的輸入時實行單獨的作業(yè)。如果當下一個替克進入時這個作業(yè)處于繁忙狀態(tài),那么進入的這個替克則不能進入以避免超載的出現(xiàn)!這種情況下可以使用先前保存的 "Volume"執(zhí)行檢測。 第三種方法是以柱的打開時間為基礎: static datetime prevtime=0; ... if(prevtime == Time[0]) return(0); prevtime = Time[0]; ... 這種方法是最保險的方法。它能夠在任意條件下運行。
"CSV"類型文件運行的范例: int h1; h1 = FileOpen("my_data.csv", MODE_CSV | MODE_WRITE, ";"); if(h1 < 0) ? { ? ?Print("Unable to open file my_data.csv"); ? ?return(false); ? } FileWrite(h1, High[1], Low[1], Close[1], Volume[1]); ? FileClose(h1); 對于代碼的一些描述。首先打開"CSV"格式文件。在打開文件時生成錯誤將會對出程序。在文件成功打開后,清除文件內(nèi)容并復制數(shù)據(jù)到文件內(nèi),隨后關閉文件。如果您需要保存文件原有的內(nèi)容,可以使用 MODE_READ模式打開: int h1; h1 = FileOpen("my_data.csv", MODE_CSV | MODE_WRITE | MODE_READ, ";"); if(h1 < 0) ? { ? ?Print("Unable to open file my_data.csv"); ? ?return(false); ? } FileSeek(h1, 0, SEEK_END); FileWrite(h1, High[1], Low[1], Close[1], Volume[1]); ? FileClose(h1);