您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MT4智能交易的特性
外_匯_邦 WaiHuiBang.com 在MetaTrader 4交易系統中創建並測試智能交易存在以下列舉特性。www.emoneybtc.com
在開倉之前必須驗證賬戶內是否存在自由保證金。如果賬戶內的自由保證金不足,開倉交易將失敗。您可以測試檢驗"FreeMargin"值不能夠少於1000,因為測試期間一個標准手的的價格為 1000。
  1. if(AccountFreeMargin() < 1000) return(0); // 沒有保證金 - 退出

復制代碼
您可以通過使用預設定數組Time, Open, Low, High, Close, Volume 獲取歷史數據。因為歷史數據的原因,指數的增長是逐漸遞減-指數的最後值為0。指數 1 表示倒數一個時間周期,指數2表示倒數兩個時間周期,指數3 倒數三個時間周期以此類推。
  1. // 如果前一個蠟燭柱的Close少於前者的Close
  2. if(Close[1] < Close[2]) return(0);

復制代碼
使用其他的時間間隔甚至是其他貨幣對可以獲得當前歷史的數據。得到這些數據首先需要確定一維數組,並且在函數"ArrayCopySeries"的幫助下完成復制工作。對於函數的調用您可以發送較少數量的參量,並且不指明默認參量。 
  1. double eur_close_m1[];
  2. int number_copied = ArrayCopySeries(eur_close_m1, MODE_CLOSE, "EURUSD", PERIOD_M1);

復制代碼
智能交易的編寫與其他程序創建一樣需要一些附加的調試信息。 MQL4 語言提供了幾種獲取信息的方法。
函數 "Alert" 會出現一個對話窗口顯示用戶指定數據。
  1. Alert("FreeMargin grows to ", AccountFreeMargin(), "!");

復制代碼
函數 "Comment"將會在圖表窗口的左上角顯示用戶指定的數據。符號"n" 使用於字行的轉接。
  1. Comment("FreeMargin is ", AccountFreeMargin(), ".");

復制代碼
函數"Print"在系統日志中打印用戶指定的數據。 
  1. Print("FreeMargin is ", AccountFreeMargin(), ".");

復制代碼
程序中錯誤的獲取,函數"GetLastError"的功能非常有用。例如,交易訂單經常返回替克數。如果這個替克數字等於 0 (在執行業務過程中出現了錯誤),獲取這個錯誤的詳細信息必須調用函數"GetLastError":
  1. int iTickNum = 0;
  2. int iLastError = 0;
  3. ...
  4. iTickNum = OrderSend(Symbol(), OP_BUY, g_Lots, Ask, 3, 0, 
  5.                      Ask + g_TakeProfit * g_Points);
  6. if(iTickNum <= 0) 
  7.   {
  8.     iLastError = GetLastError();
  9.     if(iLastError != ERR_NO_ERROR) 
  10.         Alert("Some Message");  }

復制代碼
調用"GetLastError"函數可以顯示錯誤代碼,並且重新設置改值。 因此連續調用這個函數返回的值將是0。
怎樣確定開始柱? (必須找到先前柱結束的位置)存在以下幾種方法。

第一種方法以檢測柱的數量為基礎:
  1. static int prevbars = 0;
  2. ...
  3. if(prevbars == Bars) return(0);
  4. prevbars = Bars;
  5. ...

復制代碼
這種方法在歷史加載的情況下不能運行。在“先前”柱沒有完成之間,柱的數量發生改變。這種情況下您可以檢查這些值之間的差距等於1。
接下來這種方法是以 "Volume" 值為基礎取決先前每個柱生成的替克的數量。第一個替克意味著形成柱的"Volume"值等於 1:
  1. if( Volume[0] > 1) return(0);
  2. ...

復制代碼
這種方法在大量價格替克輸入時可能會運行失敗。問題在於價格替克的輸入時實行單獨的作業。如果當下一個替克進入時這個作業處於繁忙狀態,那麼進入的這個替克則不能進入以避免超載的出現!這種情況下可以使用先前保存的 "Volume"執行檢測。
第三種方法是以柱的打開時間為基礎:
  1. static datetime prevtime=0;
  2. ...
  3. if(prevtime == Time[0]) return(0);
  4. prevtime = Time[0];
  5. ...

復制代碼
這種方法是最保險的方法。它能夠在任意條件下運行。
"CSV"類型文件運行的范例:
  1. int h1;
  2. h1 = FileOpen("my_data.csv", MODE_CSV | MODE_WRITE, ";");
  3. if(h1 < 0)
  4.   {
  5.    Print("Unable to open file my_data.csv");
  6.    return(false);
  7.   }
  8. FileWrite(h1, High[1], Low[1], Close[1], Volume[1]);  
  9. FileClose(h1);

復制代碼
對於代碼的一些描述。首先打開"CSV"格式文件。在打開文件時生成錯誤將會對出程序。在文件成功打開後,清除文件內容並復制數據到文件內,隨後關閉文件。如果您需要保存文件原有的內容,可以使用 MODE_READ模式打開:
  1. int h1;
  2. h1 = FileOpen("my_data.csv", MODE_CSV | MODE_WRITE | MODE_READ, ";");
  3. if(h1 < 0)
  4.   {
  5.    Print("Unable to open file my_data.csv");
  6.    return(false);
  7.   }
  8. FileSeek(h1, 0, SEEK_END);
  9. FileWrite(h1, High[1], Low[1], Close[1], Volume[1]);  
  10. FileClose(h1);

復制代碼
這個范例中數據被添加到文件的尾頁。在文件打開後,我們可以使用函數 "FileSeek"。  外_匯_邦 WaiHuiBang.com
  • 什麼是去中心化身份?

    通過運用區塊鏈技術的不可篡改、哈希加密的特性,去中心化身份可以定義為用於證明信息來源和有效性的一組密鑰。借助共識機制,這個基於區塊鏈建立的

  • 百慕大能成為下一個區塊鏈中心嗎?

    2018年4月17日,百慕大金融管理局(BMA)發布了一份關於“虛擬貨幣企業”和首次token發行法律草案的意見征詢書,這項草案的目的是建

  • 區塊鏈基礎知識:如何比較 DPOS 和 Casper

    一致性算法有這樣幾個方面,誰應該打包區塊,什麼時間應該打包區塊,怎麼能確定區塊本身是不可逆的。pow假設我們有很多忠誠的算力在競爭,第一

  • 什麼是比特現金分叉?

    比特幣分叉,准確來說應該叫做區塊鏈分叉,而比特現金分(BCH)叉是比特幣原鏈上的分支。按分叉類型劃分,又可以分為硬分叉和軟分叉。

  • 什麼是全同態加密?

    全同態加密屬於密碼學領域。由於全同態加密支持無需解密,就能夠對密文進行任意計算,因此可以立竿見影的解決數據隱私安全問題,有很大的應用需求。

  風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
比特財富網 版權所有 © www.emoneybtc.com