NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析
生活随笔
收集整理的這篇文章主要介紹了
NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
NJ4X源碼閱讀分析筆記系列(三)—— nj4x-ts深入分析
一、系統的工作流程圖(模塊級)
其工作流程如下(以行情獲取為例):
二、NJ4X各個模塊的作用
這個是對之前分析的補充和糾正
1. mt4if
這個是C++開發的模塊主要作用如下:
- 通訊連接(兩種方式:一種是調用jvm,另一種是直接用UDP的Socket,目前是用jvm)
- Candle運算,系統默認的是1s,1min,5min,30min,其他的是根據需求計算的
- mt4 terminal的代理模塊
- 多線程的處理(穩定性)
2. nj4x-ts
這個是NJ4X終端服務器的java部分,作用如下:
- 與Application Server通訊
- 與mt4if交互,給mt4if發指令
- 操作界面
- 日志,存儲等
3. jfx
這個模塊是Application Server的組成部分,作用如下:
- 與nj4x-ts交互
- 與mt4if交互
- 對MT4交易方式的封裝
- 對行情等信息的封裝
4. ea
這個是Expert Advisor模塊,這個模塊中只有兩個文件,jfx.mq4和wnds.mq4,根據MQ4官網的說法,所有的交易策略和邏輯都是以.mq4文件形式存在的。MQ4確實有專家系統,但是貌似和這個關系不大。
5. zero-term
這個模塊存儲著mt4 terminal的各種配置文件,根據貨幣,交易商的不同來給mt4 terminal生成不同的配置文件。
三 系統和MT4的交互方式
系統和MT4程序的交互主要是通過mt4if這個C++庫的。mt4if這個模塊提供了MT4程序的代理。體現在ea模塊的jfx.mq4文件中.
其中:
#import "mt45if.dll" string jfxConnect(string, int, string, int, string); void jfxDisconnect(string&); int jfxGetCommand(string&, string& p1, string& p2, string& p3, string& p4, string& p5, string& p6, string& p7, string& p8, string& p9, string& p10, string& p11, string& p12, string& p13, string& p14, string& p15); void jfxSendResult(string&, string&); void jfxLog(string&); void jfxHWnd(int, bool); void jfxPositionInit(string&, int); int jfxPositionOrderInfo(string&, int, int, int, int, int, int, int, string&, string&, double, double, double, double, double, double, double, double); string jfxPositionRes(string&, int, int); int jfxMqlRatesInit(string&); int jfxMqlRatesAdd(string&, MqlRates& rates); string jfxMqlRatesRes(string&); #import定義了調用mt4if的函數,這些函數幫助mt4 terminal與外界通訊。
其中
switch (x) {0:res = IntegerToString(iBars(args0,StrToInteger(args1)));if (maxDebug) Print("iBars", ", ", "symbol=", args0,", ", "timeframe=", args1);break;1:res = IntegerToString( iBarShift(args0,StrToInteger(args1),StrToTime(args2),StrToInteger(args3)) );if (maxDebug) Print("iBarShift", ", ", "symbol=", args0,", ", "timeframe=", args1,", ", "time=", args2,", ", "exact=", args3);break;2:res = DoubleToString( iClose(args0,StrToInteger(args1),StrToInteger(args2)) );if (maxDebug) Print("iClose", ", ", "symbol=", args0,", ", "timeframe=", args1,", ", "shift=", args2);break;3:res = DoubleToString( iHigh(args0,StrToInteger(args1),StrToInteger(args2)) );if (maxDebug) Print("iHigh", ", ", "symbol=", args0,", ", "timeframe=", args1,", ", "shift=", args2);break;以上代碼就是判斷通訊協議并作出不同的動作的代碼
可以修改jfx.mq4來調整自己的策略。
4. MT4 TERMINAL與外界的通訊協議
0:"iBars"; 1:"iBarShift"; 2:"iClose"; 3:"iHigh"; 4:"iLow"; 5:"iOpen"; 6:"iVolume"; 7:"iTime"; 8:"iLowest"; 9:"iHighest"; 10:"AccountBalance"; 11:"AccountCredit"; 12:"AccountCompany"; 13:"AccountCurrency"; 14:"AccountEquity"; 15:"AccountFreeMargin"; 16:"AccountMargin"; 17:"AccountName"; 18:"AccountNumber"; 19:"AccountProfit"; 20:"GetLastError"; 21:"IsConnected"; 22:"IsDemo"; 23:"IsTesting"; 24:"IsVisualMode"; 25:"GetTickCount"; 26:"Comment"; 27:"MarketInfo"; 28:"Print"; 29:"Day"; 30:"DayOfWeek"; 31:"DayOfYear"; 32:"Hour"; 33:"Minute"; 34:"Month"; 35:"Seconds"; 36:"TimeCurrent"; 37:"Year"; 38:"ObjectCreate"; 39:"ObjectCreate"; 40:"ObjectCreate"; 41:"ObjectDelete"; 42:"ObjectGet"; 43:"ObjectSet"; 44:"ObjectGetFiboDescription"; 45:"ObjectSetFiboDescription"; 46:"ObjectSetText"; 47:"ObjectsTotal"; 48:"ObjectType"; 49:"iAC"; 50:"iAD"; 51:"iAlligator"; 52:"iADX"; 53:"iATR"; 54:"iAO"; 55:"iBearsPower"; 56:"iBands"; 57:"iBullsPower"; 58:"iCCI"; 59:"iCustom"; 60:"iDeMarker"; 61:"iEnvelopes"; 62:"iForce"; 63:"iFractals"; 64:"iGator"; 65:"iBWMFI"; 66:"iMomentum"; 67:"iMFI"; 68:"iMA"; 69:"iOsMA"; 70:"iMACD"; 71:"iOBV"; 72:"iSAR"; 73:"iRSI"; 74:"iRVI"; 75:"iStdDev"; 76:"iStochastic"; 77:"iWPR"; 78:"OrderClose"; 79:"OrderCloseBy"; 80:"OrderClosePrice"; 81:"OrderCloseTime"; 82:"OrderComment"; 83:"OrderCommission"; 84:"OrderDelete"; 85:"OrderExpiration"; 86:"OrderLots"; 87:"OrderMagicNumber"; 88:"OrderModify"; 89:"OrderOpenPrice"; 90:"OrderOpenTime"; 91:"OrderPrint"; 92:"OrderProfit"; 93:"OrderSelect"; 94:"OrderSend"; 95:"OrdersHistoryTotal"; 96:"OrderStopLoss"; 97:"OrdersTotal"; 98:"OrderSwap"; 99:"OrderSymbol"; 100:"OrderTakeProfit"; 101:"OrderTicket"; 102:"OrderType"; 103:"IsTradeContextBusy"; 104:"RefreshRates"; 105:"AccountStopoutLevel"; 106:"AccountStopoutMode"; 107:"MessageBox"; 108:"UninitializeReason"; 109:"IsTradeAllowed"; 110:"IsStopped"; 111:"IsOptimization"; 112:"IsLibrariesAllowed"; 113:"IsDllsAllowed"; 114:"IsExpertEnabled"; 115:"AccountFreeMarginCheck"; 116:"AccountFreeMarginMode"; 117:"AccountLeverage"; 118:"AccountServer"; 119:"TerminalCompany"; 120:"TerminalName"; 121:"TerminalPath"; 122:"Alert"; 123:"PlaySound"; 124:"ObjectDescription"; 125:"ObjectFind"; 126:"ObjectGetShiftByValue"; 127:"ObjectGetValueByShift"; 128:"ObjectMove"; 129:"ObjectName"; 130:"ObjectsDeleteAll"; 131:"iIchimoku"; 132:"HideTestIndicators"; 133:"Period"; 134:"Symbol"; 135:"WindowBarsPerChart"; 136:"WindowFirstVisibleBar"; 137:"WindowExpertName"; 138:"WindowFind"; 139:"WindowIsVisible"; 140:"WindowPriceMax"; 141:"WindowPriceMin"; 142:"WindowOnDropped"; 143:"WindowXOnDropped"; 144:"WindowYOnDropped"; 145:"WindowPriceOnDropped"; 146:"WindowTimeOnDropped"; 147:"WindowsTotal"; 148:"WindowRedraw"; 149:"WindowScreenShot"; 150:"WindowHandle"; 151:"GlobalVariableCheck"; 152:"GlobalVariableDel"; 153:"GlobalVariableGet"; 154:"GlobalVariableName"; 155:"GlobalVariableSet"; 156:"GlobalVariableSetOnCondition"; 157:"GlobalVariablesDeleteAll"; 158:"GlobalVariablesTotal"; 159:"SymbolsTotal"; 160:"SymbolName"; 161:"SymbolSelect"; 162:"TerminalClose"; 163:"SymbolInfo"; 164:"AccountInfo"; 165:"serverTimeGMTOffset"; 166:"IsTradeAllowed"; 10000:"SetAutoRefresh"; 10001:"MarketInfoAll"; 10002:"NewTick"; 10012:"TicksListenerAll"; 10003:"OrderGet"; 10004:"NewPosition"; 10005:"OrderGetAll";這些協議大部分是mq4語言中的方法名,根據這些方法名就可以執行相應的方法,后面還有參數。
有意思的是,為了解決這些方法的參數不同的問題,接收指令函數的參數有15個,應該是最長的那個函數的參數長度。如下:
jfxGetCommand(string&, string& p1, string& p2, string& p3, string& p4, string& p5, string& p6, string& p7, string& p8, string& p9, string& p10, string& p11, string& p12, string& p13, string& p14, string& p15);總結
以上是生活随笔為你收集整理的NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7 0安装jdk + tom
- 下一篇: 《数据管理能力成熟度模型》标准宣贯会在上