Program Run 程式運作
1、start與OnStart差別:
MT4更新之後,如果選擇建立腳本,預設是下面的格式:void OnStart(),但是,我看過很多其他MT4教學視訊的時候,MT4腳本預設的都是下面的格式:int start()
MT4 build 600 後的新函數名 void OnStart(), 如果你的 MT4 是還是舊版的, 可以改為 void start()
2、請問OnTick和start的差別
start是老版本mql4裡面使用的,OnTick是新版本mql4裡面使用的,都是每來一個價格運作一次的主函數。作用一樣,但是一個ea裡面隻能用其中一個函數。
void OnTick();
隻有在EA交易依附的圖表中,交易品種收到新訂單号時EA交易會生成新訂單号事件。——訂單号事件隻為EA交易而生!
自定義名額或者腳本中确定OnTick()函數是無效的,因為訂單号事件不為它們而生。
訂單号事件隻為EA交易而生,但是卻不意味着EA交易需要OnTick()函數,因為EA交易不僅需要生成訂單号,也需要生成計時器OnTimer,預定事件和圖表事件。
init(), deinit() 和 start() 的預定義函數一直保持着相容性,但是,現在使用OnInit(), OnDeinit(), OnStart(), OnCalculate() 和 OnTick()來代替。此外,已經實施新的預定義OnTimer(), OnChartEvent() 和OnTester() 處理函數。在之前的MQL4中,預定義函數可以有任何參數和任何傳回類型。這些函數可以通過自己的名字進行調用,而無需簽名。在新版MQL4中,所有預定義函數應完全比對他們的簽名。換句話說,他們應該清晰地定義設定參數和傳回類型。
在MQL4 中存在三種預定義名稱函數:
init() 在載入時調用,可以用此函數在開始自定義名額或者自動交易之前做初始化操作。
start() 是基本函數。對于智能交易,在下一個替克進入之後被調用。對于客戶名額,在名額添加到圖表之後,用戶端開始(如果名額添加到圖表)并且下一個替克進入之後,函數被調用。對于腳本,在腳本被添加到圖表之後立即執行并初始化。如果在模闆中不存在start()函數,模闆 (智能交易,腳本或客戶名額) 不能開啟。
deinit() 當資料變動時觸發,對于自定義名額或者自動交易的程式設計主要依靠此函數進行預定義函數需要一些參量。不過,當這些參量被用戶端調用時,外部沒有參量提供。 start(),init()和 deinit()函數從模闆的任何一點按照正常調用,等于其他函數。
不建議從init()函數調用 start()函數或是執行交易業務,作為圖表資料,市場開價格。模闆的初始化會出現殘缺。這時,init() 和 deinit() 函數必須盡可能結束運作。在調用start()函數之前,嘗試重新全面開啟運作。
1、程式在附加圖表之後,它開始應用init()作用運作。
在用戶端開始和曆史資料加載,圖表周期改變,由MetaEditor 編譯程式,智能和客戶名額的輸入資料設定後,附加到圖表上的智能交易和客戶名額将會運作。在賬戶發生改變後交易将會初始化。
2、每一個附加到圖表上的交易必須在deinit()的作用協助下工作。
deinit()作用運作在用戶端内停止,在圖表中關閉在商品或圖表周期改變之前,成功重新編譯程式,改變輸入資料或改變賬戶。在deinit()函數執行中,您可以使用 UninitializeReason()函數檢視原因.deinit()函數必須在2.5 秒内執行.如果函數沒有在指定的時間段内執行,它将強制完成。腳本除外,它的運作不取決于任何外界的指令. 如果腳本工作時間過長, 可以應用外部指令結束運作 (從圖表的菜單中删除腳本,在原有的圖表上添加新的腳本,改變圖表的商品或圖表周期).在這種情況下,deinit()函數限制在2.5 秒内.
3、新報價格的輸入,start()函數将會添加到智能交易和客戶名額上執行.
當新報價格進入時,如果start()函數沒有開啟運作,新的報價格會被忽略. function launched at the preceding quote was running when a new quote came, 随後,隻有當新報價格進入後start()函數才會運作. 對于客戶名額,由于新報價格的輸入目前圖表商品或期限發生改變, start()函數将會開啟重新計算.在交易屬性視窗打開時start()函數 停止運作.遲些在交易執行中不會打開.
從圖表中拆卸程式, 改變商品或圖表周期,改變賬戶,關閉圖表,用戶端的改變将會中斷程式的執行.如果start()函數在給出停止指令的時刻執行 , 時間限制在2.5 秒. 程式能夠嘗試關閉IsStopped()函數并結束.
腳本的執行不取決于報價格的輸入.在商品或圖表周期發生改變時,腳本将停止運作并且中斷從用戶端上下載下傳.
腳本和交易的運作在自己的界面.客戶名額則是在主界面上運作. 如果客戶名額中出現iCustom() 函數, 這個名額的運作是在程式中顯示的. 資料庫函數在程式界面.