See https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4
13 | 14 |This file is automatically generated from the source code: do not edit.
25 |Parent: Home
28 | 29 | -------------------------------------------------------------------------------- /share/html/CodeScripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |See https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Scripts/OTMql4
13 | 14 |This file is automatically generated from the source code: do not edit.
18 |Parent: Home
21 | 22 | -------------------------------------------------------------------------------- /share/html/DevelopmentStyle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Metatrader has been a great international success, putting into the
13 | hands of end-users the ability to do programmed trading, something
14 | that was only previously available to large trading houses. It has
15 | been widely adopted, provides a credible platform for Forex trading,
16 | and there are a huge number of "experts" and programs that have been
17 | developed for it.
However, Metatrader as a language is not without some significant
20 | drawbacks. The language is very rudimentary from the computer science
21 | point of view, and is a closed sole-source product. Very importantly
22 | for writing robust, well-tested and easily maintained code, it lacks
23 | proper error handling flow-of-control constructs, such as are found in
24 | Java, Python or Lisp. This leads to poor quality code, as can be seen
25 | by much of the MQL code in existence, including the code from the
26 | manufacturer, MetaQuotes. The poor nature of the language combines
27 | with the very poor coding practices of the community (e.g. not
28 | checking error codes and no documentation or testing) to create a very
29 | poor programming environment.
We prefix all variable, function and method names with a lowercase letter
34 | that indicates the type; it helps you anticipate what type a quantity
35 | is, and to make explicit type conversions. This is not a rigid requirement,
36 | but it helps cut down on a very common type of mistake, pun intended.
If the type changes, give it a new name with the initial letter changed.
39 | In Mql, this scheme has the added advantage of avoiding any naming
40 | conflict with Mql built-ins, or most Python standard library modules.
Choose the initial letter from the following list:
43 | 44 |Prefix Letter | 47 |Variable Type | 48 |
a | 51 |array | 52 |
b | 55 |boolean | 56 |
c | 59 |complex (unused) | 60 |
d | 63 |alist or dictionary | 64 |
e | 67 |error string return value, empty for success | 68 |
f | 71 |double | 72 |
g | 75 |generic - unknown or mutable | 76 |
h | 79 |hypertext - HTML/XML entity encoded string | 80 |
i | 83 |integer | 84 |
j | 87 |json string | 88 |
l | 91 |list or tuple (unused) | 92 |
o | 95 |instance or pointer to a class | 96 |
r | 99 |series | 100 |
s | 103 |ASCII string | 104 |
t | 107 |date/time value | 108 |
u | 111 |Unicode string | 112 |
v | 115 |void - return value not to be used | 116 |
z | 119 |non-empty string return - empty is a failure | 120 |
Parent: Home
128 | 129 | -------------------------------------------------------------------------------- /share/html/DirectoryStructure.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |We adopt a standard directory structure for all projects, so that it
13 | will be obvious what directory things should go in as the projects
14 | progress, and it will make it easier to share code and transfer
15 | knowledge between projects. The directory structure must be complete
16 | so that it will support the final wrapping of the deliverable,
17 | including all documentation.
The standardized Unix layout works for both MultiPlatformCoding under
20 | both Unix and Windows, and many configuration tools assume its layout. The
21 | layout is the defacto-standard created by the GNU
22 | toolchain.
In your top project directory you should find:
25 | 26 |Parent: DevelopmentStyle
52 | 53 | -------------------------------------------------------------------------------- /share/html/FrontPage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |OpenTrading Mt4 Library Code
11 | https://github.com/OpenTrading/OTMql4Lib
The OTMql4Lib aims to provide a high-quality library of code to Metatrader 4,
14 | with testing and documentation, that can serve as a basis to other projects.
15 | It is the common library of Mt4 code to all of the OpenTrading projects:
16 | https://github.com/OpenTrading/ and is required as a prerequisite by OpenTrader
17 | https://github.com/OpenTrading/OpenTrader
One of the key funtionalities that it provides is the ProcessCmd functions
20 | which is a simple replacement for what should be an Eval command in Mt4,
21 | to allow an Expert to evaluate arbirtary Mt4 commands. This can be used by
22 | any Remote Procedure Call libraries to send commands to Mt4 for evaluation.
This is a work in progress - a developers' version.
25 | 26 |There is now an installer in the Releases section on github:
29 | see https://github.com/OpenTrading/OTMql4Lib/wiki/Installation
Please file any bugs in the issues tracker:
34 | https://github.com/OpenTrading/OTMql4Lib/issues
Use the Wiki to start topics for discussion:
37 | https://github.com/OpenTrading/OTMql4Lib/wiki/Home
38 | It's better to use the wiki for knowledge capture, and then we can pull the
39 | important pages back into the documentation in the share/doc directory.
40 | You will need to be signed into github.com to edit in the wiki.
Welcome to the OTMql4Lib project!
11 | 12 |The OTMql4Lib aims to provide a high-quality library of code to Metatrader 4,
13 | with testing and documentation, that can serve as a basis to other projects.
14 | It is the common library of Mt4 code to all of the OpenTrading projects:
15 | https://github.com/OpenTrading/ and is required as a prerequisite by OpenTrader
16 | https://github.com/OpenTrading/OpenTrader
One of the key funtionalities that it provides is the ProcessCmd functions
19 | which is a simple replacement for what should be an Eval command in Mt4,
20 | to allow an Expert to evaluate arbirtary Mt4 commands. This can be used by
21 | any Remote Procedure Call libraries to send commands to Mt4 for evaluation.
There is now an installer in the Releases section on github: see
26 |Please file any bugs in the issues tracker:
42 | https://github.com/OpenTrading/OTMql4Lib/issues
Use the Wiki to start topics for discussion:
45 | https://github.com/OpenTrading/OTMql4Lib/wiki
46 | It's better to use the wiki for knowledge capture, and then we can pull
47 | the important pages back into the documentation in the share/doc directory.
48 | You will need to be signed into github.com to see or edit in the wiki.
There is now an installer in the Releases section on github:
13 | https://github.com/OpenTrading/OTMql4Lib/releases
14 | It's a simple installer that asks where you want the software installed,
15 | and the location of your personal AppData Metatrader directory,
16 | and copies the files to the right places; it installs a copy of the
17 | documentation too. Usually you could just overwrite old releases with
18 | new ones, but for now, we recommend uninstalling old releases before
19 | installing new ones in case the filenames or locations have changed.
If you have a recent (2016) release of Mt4, the location of your personal
22 | Metatrader directory to install into is no longer the Program Files
23 | directory (something like c:\Program Files\MetaTrader 4 Terminal)
24 | but rather your personal AppData directory (something like
25 | c:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\LONGHEXNAME).
When you start Metatrader, look for the Data Directory: message
28 | in the Journal log. Usually there are 2 possibilities: if you have a
29 | subdirectory of your Users\AppData\Roaming\MetaQuotes\Terminal and
30 | then a long hexadecimal name, use it. Otherwise look in c:\Program Files
31 | for the Metatrader directory. Use the Browse button to select it,
32 | then click Next.
Alernatively, you can just "git clone" or download the zip from github.com
37 | and unzip into an empty directory. Then recursively copy the folder
38 | MQL4 over the MQL4 folder of your personal AppData... directory
39 | (something like
40 | c:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\LONGHEXNAME).
41 | It will not overwrite any system files, and keeps its files in subdirectories
42 | called OTMql4.
From the https://docs.mql4.com/files :
47 | 48 |There are two directories (with subdirectories) in which working files can be located:
49 | 50 |There is a program method to obtain names of these catalogs using the
57 | TerminalInfoString() function, using the ENUM_TERMINAL_INFO_STRING
58 | enumeration:
TERMINAL_PATH | 62 |Folder from which the terminal is started | 63 |string | 64 |
TERMINAL_DATA_PATH | 67 |Folder in which terminal data are stored | 68 |string | 69 |
TERMINAL_COMMONDATA_PATH | 72 |Common path for all of the terminals installed on a computer | 73 |string | 74 |
We have chosen to install to the TERMINAL_DATA_PATH to give people the
77 | option of having multiple Mt4 installations, each configured differently.
The long hex directory name is the md5 hash of the installation directory, then
80 |JSON formatting for sending information to clients.
13 | This is simple string formatting: a JSON structure or class is never used.
string jOTAccountInformation()
16 | Retrieve the Account information as a JSON structure.
17 | This brings back all of the ususal Account* calls,
18 | with the values formatted as strings, intergers or floats.
string jOTOrdersTickets()
21 | 22 |string jOTOrdersTrades()
23 | 24 |string jOTOrdersHistory()
25 | 26 |string jOTOrders(int iMode)
27 | 28 |string jOTOrderInformationByTicket(int iTicket)
29 | 30 |string jOTMarketInformation(string uSymbol)
31 | 32 |string jOTTickInformation(string uSymbol, int iTimeFrame)
33 | 34 |string jOTBarInformation(string uSymbol, int iTimeFrame, int iBar)
35 | 36 |string jOTTimerInformation()
37 | 38 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibJsonFormat.mq4
39 | 40 |This file is automatically generated from the source code: do not edit.
41 |Parent: CodeLibraries
44 | 45 | -------------------------------------------------------------------------------- /share/html/OTLibLog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |This will provide our logging functions, but is just a
13 | skeleton for now. See OTLibPyLog for logging with Python.
void vLogInit()
16 | Initializes the logging environment. This should be called
17 | from your OnInit() function. It is safe to call it a second time;
18 | subsequent calls will just be ignored.
void vSetLogLevel(int i)
21 | 22 |int iGetLogLevel()
23 | 24 |void vLog(int iLevel, string sMess)
25 | 26 |void vError(string sMess)
27 | 28 |void vWarn(string sMess)
29 | 30 |void vInfo(string sMess)
31 | 32 |void vDebug(string sMess)
33 | 34 |void vTrace(string sMess)
35 | 36 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibLog.mq4
37 | 38 |This file is automatically generated from the source code: do not edit.
39 |Parent: CodeLibraries
42 | 43 | -------------------------------------------------------------------------------- /share/html/OTLibMt4ProcessCmd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |string zOTLibMt4ProcessCmd(string uMess)
13 | This is the replacement for what should be Eval in Mt4:
14 | take a string expression and evaluate it.
15 | zMt4LibProcessCmd only handles base Mt4 expressions.
16 | Returns the result of processing the command as a string
17 | in the form "type|value" where type is one of:
18 | string, int, double, bool, datetime, void, json
19 | Returns "error|explanation" if there is an error.
20 | Returns "" if the the command was not recognized;
21 | you can use this fact to process the standard Mt4 commands
22 | with zOTLibMt4ProcessCmd, and if it returns "",
23 | write your own zMyProcessCmd to process your additions.
string zProcessCmdTer(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5)
26 | 27 |string zProcessCmdWin(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5)
28 | 29 |string zProcessCmdAcc(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5)
30 | 31 |string zProcessCmdGlo(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5)
32 | 33 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibMt4ProcessCmd.mq4
34 | 35 |This file is automatically generated from the source code: do not edit.
36 |Parent: CodeLibraries
39 | 40 | -------------------------------------------------------------------------------- /share/html/OTLibProcessCmd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |This is the replacement for what should be Eval in Mt4:
13 | take a string expression and evaluate it.
14 | We know this is verbose and could be done more compactly,
15 | but it's clean and robust so we'll leave it like this for now.
16 | If you want to extend this for your own functions you have declared in Mql4,
17 | look at how zOTLibProcessCmd calls zMt4LibProcessCmd and then
18 | goes on and handles it if zMt4LibProcessCmd didn't.
string zOTLibProcessCmd(string uMess)
21 | This is the replacement for what should be Eval in Mt4:
22 | take a string expression and evaluate it.
23 | zMt4LibProcessCmd handles base Mt4 expressions, and
24 | zOTLibProcessCmd also handles base OpenTrading expressions.
25 | Returns the result of processing the command.
26 | Returns "" if there is an error.
string uProcessCmdi (string uCmd, string uChartId, string uIgnore, string uMark, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5, string uArg6, string uArg7)
29 | 30 |string uProcessCmdOT(string uCmd, string uChartId, string uIgnore, string uMark, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5, string uArg6, string uArg7)
31 | 32 |string uProcessCmdgOT(string uCmd, string uChartId, string uIgnore, string uMark, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5, string uArg6, string uArg7)
33 | 34 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibProcessCmd.mq4
35 | 36 |This file is automatically generated from the source code: do not edit.
37 |Parent: CodeLibraries
40 | 41 | -------------------------------------------------------------------------------- /share/html/OTLibServerErrors.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |One of the many fundamental defects of the Mql4 language
13 | is that there is no Object Oriented error handling.
14 | This leads to Mq4 returning hundreds of different errors
15 | that are not grouped so that we can take actions based
16 | on classes of errors.
17 | We try to group the large number of errors into 9 groups
18 | so that we can for example retry a trade when there is
19 | some kind of network error.
bool bOTLibServerErrorIsContinuable(int iErr)
22 | 23 |bool bOTLibServerErrorType(int iErr)
24 | Group the errors returned from trade server
25 | so that we can take action based on classes of errors.
Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibServerErrors.mq4
28 | 29 |This file is automatically generated from the source code: do not edit.
30 |Parent: CodeLibraries
33 | 34 | -------------------------------------------------------------------------------- /share/html/OTLibSimpleFormatCmd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |This is the replacement for what should be Eval in Mt4:
13 | it takes a string expression and evaluates it.
14 | I know this is verbose and could be done more compactly,
15 | but it's clean and robust so I'll leave it like this for now.
16 | If you want to extend this for your own functions you have declared in Mql4,
17 | look at how OTLibProcessCmd.mq4 calls zMt4LibProcessCmd and then
18 | goes on and handles it if zMt4LibProcessCmd didn't.
string zOTLibSimpleFormatCmd(string uType, string uChartId, int iIgnore, string uMark, string uCmd)
21 | uType is cmd or exec
22 | Both will be handled by ProcessCmd, but
23 | cmd commands will be put back on the wire as a retval.
24 | If uType is not cmd or exec then "" is returned to signal failure.
string zOTLibSimpleFormatBar(string uType, string uChartId, int iIgnore, string uMark, string uInfo)
27 | uType should be one of: bar
28 | Both will be put on the wire as a their type topics.
29 | If uType is not tick timer or bar, then "" is returned to signal failure.
string zOTLibSimpleFormatTimer(string uType, string uChartId, int iIgnore, string uMark, string uInfo)
32 | uType should be one of: tick or timer
33 | Both will be put on the wire as a their type topics.
34 | If uType is not tick timer or bar, then "" is returned to signal failure.
string zOTLibSimpleFormatTick(string uType, string uChartId, int iIgnore, string uMark, string uInfo)
37 | uType should be one of: tick or timer
38 | Both will be put on the wire as a their type topics.
39 | If uType is not tick timer or bar, then "" is returned to signal failure.
string zOTLibSimpleFormatRetval(string uType, string uChartId, int iIgnore, string uMark, string uInfo)
42 | uType should be one of: retval
43 | Will be put on the wire as a its type topic.
44 | If uType is not retval, then "" is returned to signal failure.
string eOTLibSimpleUnformatCmd(string& aArrayAsList[])
47 | 48 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibSimpleFormatCmd.mq4
49 | 50 |This file is automatically generated from the source code: do not edit.
51 |Parent: CodeLibraries
54 | 55 | -------------------------------------------------------------------------------- /share/html/OTLibStrings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Miscellaneous functions that help handling strings.
13 | This includes Ansi to Unicode "issues".
string uAnsi2Unicode(int iStringMemory)
16 | 17 |void vStringToArray(string uInput, string& uOutput[], string uDelim)
18 | 19 |string uStringReplace(string uHaystack, string uNeedle, string uReplace)
20 | 21 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibStrings.mq4
22 | 23 |This file is automatically generated from the source code: do not edit.
24 |Parent: CodeLibraries
27 | 28 | -------------------------------------------------------------------------------- /share/html/OTLibTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |A simple test Script that doesn't do much, but it's a start.
13 | Attach it to a chart, select the tests you want to run,
14 | and a MessageBox will pop up to tell you if it passed or failed.
15 | We will put each test as a boolean external input so the user
16 | can select which tests to run.
void vAlert(string uText)
19 | 20 |string eTestStrings()
21 | Test our parsing of strings with vStringToArray
string eTestOTLibProcessCmd()
24 | 25 |void OnStart()
26 | 27 |void OnDeinit(const int iReason)
28 | 29 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Scripts/OTMql4/OTLibTest.mq4
30 | 31 |This file is automatically generated from the source code: do not edit.
32 |Parent: CodeScripts
35 | 36 | -------------------------------------------------------------------------------- /share/html/OTLibTrading.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |int iOTOrderSelect(int iIndex, int iSelect, int iPool=MODE_TRADES)
13 | int slippage, double stoploss, double fTakeprofit,
int iOTOrderCloseMarket(int iTicket, int iSlippage=3, color cColor=CLR_NONE)
16 | 17 |int iOTOrderCloseFull(int iTicket, double fPrice, int iSlippage=3, color cColor=CLR_NONE)
18 | 19 |int iOTOrderClose(int iTicket, double fLots, double fPrice, int iSlippage, color cColor=CLR_NONE)
20 | 21 |int iOTSetTradeIsBusy( int iMaxWaitingSeconds = 60 )
22 | 23 |int iOTSetTradeIsNotBusy()
24 | The function sets the value of the global variable fTradeIsBusy = 0.
25 | If the fTradeIsBusy does not exist, the function creates it.
double fOTExposedEcuInMarket(int iOrderEAMagic = 0)
28 | 29 |bool bOTIsTradeAllowed()
30 | 31 |int iOTRefreshRates()
32 | 33 |int iOTMarketInfo(string s, int iMode)
34 | 35 |double fOTMarketInfo(string s, int iMode)
36 | 37 |bool bOTContinueOnOrderError(int iTicket)
38 | 39 |Source code: https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibTrading.mq4
40 | 41 |This file is automatically generated from the source code: do not edit.
42 |Parent: CodeLibraries
45 | 46 | -------------------------------------------------------------------------------- /share/html/TitleIndex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |This file is automatically generated from the source code: do not edit.
34 | 35 | -------------------------------------------------------------------------------- /wiki/CodeLibraries.creole: -------------------------------------------------------------------------------- 1 | === Libraries === 2 | 3 | 4 | See [[MQL4/Libraries/OTMql4/|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4]] 5 | 6 | 7 | * [[OTLibJsonFormat]] 8 | * [[OTLibLog]] 9 | * [[OTLibMt4ProcessCmd]] 10 | * [[OTLibProcessCmd]] 11 | * [[OTLibServerErrors]] 12 | * [[OTLibSimpleFormatCmd]] 13 | * [[OTLibStrings]] 14 | * [[OTLibTrading]] 15 | 16 | This file is automatically generated from the source code: do not edit. 17 | ---- 18 | Parent: [[Home]] 19 | -------------------------------------------------------------------------------- /wiki/CodeScripts.creole: -------------------------------------------------------------------------------- 1 | === Scripts === 2 | 3 | 4 | See [[MQL4/Scripts/OTMql4/|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Scripts/OTMql4]] 5 | 6 | 7 | * [[OTLibTest]] 8 | 9 | This file is automatically generated from the source code: do not edit. 10 | ---- 11 | Parent: [[Home]] 12 | -------------------------------------------------------------------------------- /wiki/DevelopmentStyle.creole: -------------------------------------------------------------------------------- 1 | 2 | === Coding Style === 3 | 4 | Metatrader has been a great international success, putting into the 5 | hands of end-users the ability to do programmed trading, something 6 | that was only previously available to large trading houses. It has 7 | been widely adopted, provides a credible platform for Forex trading, 8 | and there are a huge number of "experts" and programs that have been 9 | developed for it. 10 | 11 | However, Metatrader as a language is not without some significant 12 | drawbacks. The language is very rudimentary from the computer science 13 | point of view, and is a closed sole-source product. Very importantly 14 | for writing robust, well-tested and easily maintained code, it lacks 15 | proper error handling flow-of-control constructs, such as are found in 16 | Java, Python or Lisp. This leads to poor quality code, as can be seen 17 | by much of the MQL code in existence, including the code from the 18 | manufacturer, MetaQuotes. The poor nature of the language combines 19 | with the very poor coding practices of the community (e.g. not 20 | checking error codes and no documentation or testing) to create a very 21 | poor programming environment. 22 | 23 | ==== Type Prefixing ==== 24 | 25 | We prefix all variable, function and method names with a lowercase letter 26 | that indicates the type; it helps you anticipate what type a quantity 27 | is, and to make explicit type conversions. This is not a rigid requirement, 28 | but it helps cut down on a very common type of mistake, pun intended. 29 | 30 | If the type changes, give it a new name with the initial letter changed. 31 | In Mql, this scheme has the added advantage of avoiding any naming 32 | conflict with Mql built-ins, or most Python standard library modules. 33 | 34 | Choose the initial letter from the following list: 35 | 36 | || Prefix Letter || Variable Type || 37 | || a || array || 38 | || b || boolean || 39 | || c || complex (unused) || 40 | || d || alist or dictionary || 41 | || e || error string return value, empty for success || 42 | || f || double || 43 | || g || generic - unknown or mutable || 44 | || h || hypertext - HTML/XML entity encoded string || 45 | || i || integer || 46 | || j || json string || 47 | || l || list or tuple (unused) || 48 | || o || instance or pointer to a class || 49 | || r || series || 50 | || s || ASCII string || 51 | || t || date/time value || 52 | || u || Unicode string || 53 | || v || void - return value not to be used || 54 | || z || non-empty string return - empty is a failure || 55 | 56 | * [[DirectoryStructure]] 57 | 58 | ---- 59 | Parent: [[Home]] 60 | -------------------------------------------------------------------------------- /wiki/DirectoryStructure.creole: -------------------------------------------------------------------------------- 1 | 2 | === Directory Structure === 3 | 4 | We adopt a standard directory structure for all projects, so that it 5 | will be obvious what directory things should go in as the projects 6 | progress, and it will make it easier to share code and transfer 7 | knowledge between projects. The directory structure must be complete 8 | so that it will support the final wrapping of the deliverable, 9 | including all documentation. 10 | 11 | The standardized Unix layout works for both MultiPlatformCoding under 12 | both Unix and Windows, and many configuration tools assume its layout. The 13 | layout is the defacto-standard created by the [[http://www.fsf.org/|GNU]] 14 | toolchain. 15 | 16 | In your top project directory you should find: 17 | 18 | * **bin**: binary directory. This will contain executables, for 19 | either the main program, or support tools. For multi-platform work 20 | assume that there may be platform and OS dependent subdirectories 21 | such as 22 | * {{{bin/windows-x86}}}: windows subdirectory 23 | * {{{bin/linux-x86}}}: linux subdirectory 24 | 25 | * **etc**: configuration files - may be empty. 26 | 27 | * **lib**: library directory. This will contain object libraries, for 28 | either the main program, or support tools. For multi-platform work, 29 | assume that there will be platform and OS dependent files under {{{lib}}}. 30 | 31 | * **net**: Repository for files downloaded from the net, for all 32 | bundled prerquisites of code or tools required by the program. It 33 | may also contain the orginal version of code that this project 34 | extends, so that it's easy to compare the preoject with its origins. 35 | Make protocol subdirectories such as {{{net/Http}}} {{{net/Ftp}}} 36 | and in these subdirectories, put the name of the site the package 37 | was downloaded from. 38 | 39 | * **share**: platform independent library directories. For example, 40 | the on-line documentation might go in {{{share/doc}}} or in {{{share/html}}} 41 | and icons might go in {{{share/icons}}} etc. 42 | 43 | * **src**: The source code for the application and any of the tools 44 | it requires. 45 | 46 | * **var**: variable run-time data, initially empty. May have 47 | subdirectories like {{{var/log}}} for log files, 48 | {{{var/cache}}} for runtime files, {{{var/tmp}}} for temporary files etc. 49 | 50 | ---- 51 | Parent: [[DevelopmentStyle]] 52 | -------------------------------------------------------------------------------- /wiki/FrontPage.creole: -------------------------------------------------------------------------------- 1 | OpenTrading Mt4 Library Code 2 | https://github.com/OpenTrading/OTMql4Lib 3 | 4 | The OTMql4Lib aims to provide a high-quality library of code to Metatrader 4, 5 | with testing and documentation, that can serve as a basis to other projects. 6 | It is the common library of Mt4 code to all of the OpenTrading projects: 7 | https://github.com/OpenTrading/ and is required as a prerequisite by OpenTrader 8 | https://github.com/OpenTrading/OpenTrader 9 | 10 | One of the key funtionalities that it provides is the {{{ProcessCmd}}} functions 11 | which is a simple replacement for what should be an {{{Eval}}} command in Mt4, 12 | to allow an Expert to evaluate arbirtary Mt4 commands. This can be used by 13 | any Remote Procedure Call libraries to send commands to Mt4 for evaluation. 14 | 15 | **This is a work in progress - a developers' version.** 16 | 17 | === Installation === 18 | 19 | There is now an installer in the Releases section on github: 20 | see https://github.com/OpenTrading/OTMql4Lib/wiki/Installation 21 | 22 | === Project === 23 | 24 | Please file any bugs in the issues tracker: 25 | https://github.com/OpenTrading/OTMql4Lib/issues 26 | 27 | Use the Wiki to start topics for discussion: 28 | https://github.com/OpenTrading/OTMql4Lib/wiki/Home 29 | It's better to use the wiki for knowledge capture, and then we can pull the 30 | important pages back into the documentation in the {{{share/doc}}} directory. 31 | You will need to be signed into github.com to edit in the wiki. 32 | 33 | * [[Home|https://github.com/OpenTrading/OTMql4Lib/wiki/Home]] 34 | 35 | * [[TitleIndex|https://github.com/OpenTrading/OTMql4Lib/wiki/TitleIndex]] 36 | -------------------------------------------------------------------------------- /wiki/Home.creole: -------------------------------------------------------------------------------- 1 | Welcome to the OTMql4Lib project! 2 | 3 | The OTMql4Lib aims to provide a high-quality library of code to Metatrader 4, 4 | with testing and documentation, that can serve as a basis to other projects. 5 | It is the common library of Mt4 code to all of the OpenTrading projects: 6 | https://github.com/OpenTrading/ and is required as a prerequisite by OpenTrader 7 | https://github.com/OpenTrading/OpenTrader 8 | 9 | One of the key funtionalities that it provides is the {{{ProcessCmd}}} functions 10 | which is a simple replacement for what should be an {{{Eval}}} command in Mt4, 11 | to allow an Expert to evaluate arbirtary Mt4 commands. This can be used by 12 | any Remote Procedure Call libraries to send commands to Mt4 for evaluation. 13 | 14 | === Documentation === 15 | 16 | There is now an installer in the Releases section on github: see 17 | * [[Installation]] 18 | 19 | * [[CodeLibraries]] 20 | * [[CodeScripts]] 21 | 22 | * [[DevelopmentStyle]] 23 | 24 | * [[TitleIndex]] 25 | 26 | === Project === 27 | 28 | Please file any bugs in the issues tracker: 29 | https://github.com/OpenTrading/OTMql4Lib/issues 30 | 31 | Use the Wiki to start topics for discussion: 32 | https://github.com/OpenTrading/OTMql4Lib/wiki 33 | It's better to use the wiki for knowledge capture, and then we can pull 34 | the important pages back into the documentation in the share/doc directory. 35 | You will need to be signed into github.com to see or edit in the wiki. 36 | 37 | -------------------------------------------------------------------------------- /wiki/Installation.creole: -------------------------------------------------------------------------------- 1 | 2 | === Binary Installer === 3 | 4 | There is now an installer in the Releases section on github: 5 | https://github.com/OpenTrading/OTMql4Lib/releases 6 | It's a simple installer that asks where you want the software installed, 7 | and the location of your personal {{{AppData}}} Metatrader directory, 8 | and copies the files to the right places; it installs a copy of the 9 | documentation too. Usually you could just overwrite old releases with 10 | new ones, but for now, we recommend uninstalling old releases before 11 | installing new ones in case the filenames or locations have changed. 12 | 13 | If you have a recent (2016) release of Mt4, the location of your personal 14 | Metatrader directory to install into is no longer the {{{Program Files}}} 15 | directory (something like {{{c:\Program Files\MetaTrader 4 Terminal}}}) 16 | but rather your personal {{{AppData}}} directory (something like 17 | {{{c:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\LONGHEXNAME}}}). 18 | 19 | When you start Metatrader, look for the {{{Data Directory:}}} message 20 | in the Journal log. Usually there are 2 possibilities: if you have a 21 | subdirectory of your {{{Users\AppData\Roaming\MetaQuotes\Terminal}}} and 22 | then a long hexadecimal name, use it. Otherwise look in {{{c:\Program Files}}} 23 | for the {{{Metatrader directory}}}. Use the Browse button to select it, 24 | then click Next. 25 | 26 | 27 | === Install from Source === 28 | 29 | Alernatively, you can just "git clone" or download the zip from github.com 30 | and unzip into an empty directory. Then recursively copy the folder 31 | {{{MQL4}}} over the {{{MQL4}}} folder of your personal {{{AppData...}}} directory 32 | (something like 33 | {{{c:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\LONGHEXNAME}}}). 34 | It will not overwrite any system files, and keeps its files in subdirectories 35 | called {{{OTMql4}}}. 36 | 37 | ==== New Mt4 Layout ==== 38 | 39 | From the [[Mt4 Files Documentation|https://docs.mql4.com/files]] : 40 | 41 | There are two directories (with subdirectories) in which working files can be located: 42 | 43 | * {{{terminal_data_folder\MQL4\Files}}} (in the terminal menu select to view "File" - "Open the data directory"); 44 | 45 | * the common folder for all the terminals installed on a computer - usually located in the directory {{{C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common\Files}}}. 46 | 47 | There is a program method to obtain names of these catalogs using the 48 | {{{TerminalInfoString()}}} function, using the {{{ENUM_TERMINAL_INFO_STRING}}} 49 | enumeration: 50 | | TERMINAL_PATH | Folder from which the terminal is started | string | 51 | | TERMINAL_DATA_PATH | Folder in which terminal data are stored | string | 52 | | TERMINAL_COMMONDATA_PATH | Common path for all of the terminals installed on a computer | string | 53 | 54 | We have chosen to install to the {{{TERMINAL_DATA_PATH}}} to give people the 55 | option of having multiple Mt4 installations, each configured differently. 56 | 57 | The long hex directory name is the md5 hash of the installation directory, then 58 | * convert path to uppercase with no trailing slash 59 | * convert to base64 string using unicode encoding 60 | * MD5 has the result from step 2 61 | See https://forum.mql4.com/60897/page2 62 | -------------------------------------------------------------------------------- /wiki/OTLibJsonFormat.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibJsonFormat.mq4 === 2 | 3 | 4 | JSON formatting for sending information to clients. 5 | This is simple string formatting: a JSON structure or class is never used. 6 | 7 | {{{string jOTAccountInformation() }}} 8 | Retrieve the Account information as a JSON structure. 9 | This brings back all of the ususal Account* calls, 10 | with the values formatted as strings, intergers or floats. 11 | 12 | {{{string jOTOrdersTickets() }}} 13 | 14 | {{{string jOTOrdersTrades() }}} 15 | 16 | {{{string jOTOrdersHistory() }}} 17 | 18 | {{{string jOTOrders(int iMode) }}} 19 | 20 | {{{string jOTOrderInformationByTicket(int iTicket) }}} 21 | 22 | {{{string jOTMarketInformation(string uSymbol) }}} 23 | 24 | {{{string jOTTickInformation(string uSymbol, int iTimeFrame) }}} 25 | 26 | {{{string jOTBarInformation(string uSymbol, int iTimeFrame, int iBar) }}} 27 | 28 | {{{string jOTTimerInformation() }}} 29 | 30 | Source code: [[MQL4/Libraries/OTMql4/OTLibJsonFormat.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibJsonFormat.mq4]] 31 | 32 | 33 | 34 | This file is automatically generated from the source code: do not edit. 35 | ---- 36 | Parent: [[CodeLibraries]] 37 | -------------------------------------------------------------------------------- /wiki/OTLibLog.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibLog.mq4 === 2 | 3 | 4 | This will provide our logging functions, but is just a 5 | skeleton for now. See OTLibPyLog for logging with Python. 6 | 7 | {{{void vLogInit() }}} 8 | Initializes the logging environment. This should be called 9 | from your OnInit() function. It is safe to call it a second time; 10 | subsequent calls will just be ignored. 11 | 12 | {{{void vSetLogLevel(int i) }}} 13 | 14 | {{{int iGetLogLevel() }}} 15 | 16 | {{{void vLog(int iLevel, string sMess) }}} 17 | 18 | {{{void vError(string sMess) }}} 19 | 20 | {{{void vWarn(string sMess) }}} 21 | 22 | {{{void vInfo(string sMess) }}} 23 | 24 | {{{void vDebug(string sMess) }}} 25 | 26 | {{{void vTrace(string sMess) }}} 27 | 28 | Source code: [[MQL4/Libraries/OTMql4/OTLibLog.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibLog.mq4]] 29 | 30 | 31 | 32 | This file is automatically generated from the source code: do not edit. 33 | ---- 34 | Parent: [[CodeLibraries]] 35 | -------------------------------------------------------------------------------- /wiki/OTLibMt4ProcessCmd.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibMt4ProcessCmd.mq4 === 2 | 3 | 4 | 5 | {{{string zOTLibMt4ProcessCmd(string uMess) }}} 6 | This is the replacement for what should be Eval in Mt4: 7 | take a string expression and evaluate it. 8 | zMt4LibProcessCmd only handles base Mt4 expressions. 9 | Returns the result of processing the command as a string 10 | in the form "type|value" where type is one of: 11 | string, int, double, bool, datetime, void, json 12 | Returns "error|explanation" if there is an error. 13 | Returns "" if the the command was not recognized; 14 | you can use this fact to process the standard Mt4 commands 15 | with zOTLibMt4ProcessCmd, and if it returns "", 16 | write your own zMyProcessCmd to process your additions. 17 | 18 | {{{string zProcessCmdTer(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5) }}} 19 | 20 | {{{string zProcessCmdWin(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5) }}} 21 | 22 | {{{string zProcessCmdAcc(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5) }}} 23 | 24 | {{{string zProcessCmdGlo(string uCmd, string uChartId, string uIgnore, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5) }}} 25 | 26 | Source code: [[MQL4/Libraries/OTMql4/OTLibMt4ProcessCmd.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibMt4ProcessCmd.mq4]] 27 | 28 | 29 | 30 | This file is automatically generated from the source code: do not edit. 31 | ---- 32 | Parent: [[CodeLibraries]] 33 | -------------------------------------------------------------------------------- /wiki/OTLibProcessCmd.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibProcessCmd.mq4 === 2 | 3 | 4 | This is the replacement for what should be Eval in Mt4: 5 | take a string expression and evaluate it. 6 | We know this is verbose and could be done more compactly, 7 | but it's clean and robust so we'll leave it like this for now. 8 | If you want to extend this for your own functions you have declared in Mql4, 9 | look at how zOTLibProcessCmd calls zMt4LibProcessCmd and then 10 | goes on and handles it if zMt4LibProcessCmd didn't. 11 | 12 | {{{string zOTLibProcessCmd(string uMess) }}} 13 | This is the replacement for what should be Eval in Mt4: 14 | take a string expression and evaluate it. 15 | zMt4LibProcessCmd handles base Mt4 expressions, and 16 | zOTLibProcessCmd also handles base OpenTrading expressions. 17 | Returns the result of processing the command. 18 | Returns "" if there is an error. 19 | 20 | {{{string uProcessCmdi (string uCmd, string uChartId, string uIgnore, string uMark, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5, string uArg6, string uArg7) }}} 21 | 22 | {{{string uProcessCmdOT(string uCmd, string uChartId, string uIgnore, string uMark, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5, string uArg6, string uArg7) }}} 23 | 24 | {{{string uProcessCmdgOT(string uCmd, string uChartId, string uIgnore, string uMark, string uArg1, string uArg2, string uArg3, string uArg4, string uArg5, string uArg6, string uArg7) }}} 25 | 26 | Source code: [[MQL4/Libraries/OTMql4/OTLibProcessCmd.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibProcessCmd.mq4]] 27 | 28 | 29 | 30 | This file is automatically generated from the source code: do not edit. 31 | ---- 32 | Parent: [[CodeLibraries]] 33 | -------------------------------------------------------------------------------- /wiki/OTLibServerErrors.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibServerErrors.mq4 === 2 | 3 | 4 | One of the many fundamental defects of the Mql4 language 5 | is that there is no Object Oriented error handling. 6 | This leads to Mq4 returning hundreds of different errors 7 | that are not grouped so that we can take actions based 8 | on classes of errors. 9 | We try to group the large number of errors into 9 groups 10 | so that we can for example retry a trade when there is 11 | some kind of network error. 12 | 13 | {{{bool bOTLibServerErrorIsContinuable(int iErr) }}} 14 | 15 | {{{bool bOTLibServerErrorType(int iErr) }}} 16 | Group the errors returned from trade server 17 | so that we can take action based on classes of errors. 18 | 19 | Source code: [[MQL4/Libraries/OTMql4/OTLibServerErrors.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibServerErrors.mq4]] 20 | 21 | 22 | 23 | This file is automatically generated from the source code: do not edit. 24 | ---- 25 | Parent: [[CodeLibraries]] 26 | -------------------------------------------------------------------------------- /wiki/OTLibSimpleFormatCmd.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibSimpleFormatCmd.mq4 === 2 | 3 | 4 | This is the replacement for what should be Eval in Mt4: 5 | it takes a string expression and evaluates it. 6 | I know this is verbose and could be done more compactly, 7 | but it's clean and robust so I'll leave it like this for now. 8 | If you want to extend this for your own functions you have declared in Mql4, 9 | look at how OTLibProcessCmd.mq4 calls zMt4LibProcessCmd and then 10 | goes on and handles it if zMt4LibProcessCmd didn't. 11 | 12 | {{{string zOTLibSimpleFormatCmd(string uType, string uChartId, int iIgnore, string uMark, string uCmd) }}} 13 | uType is cmd or exec 14 | Both will be handled by ProcessCmd, but 15 | cmd commands will be put back on the wire as a retval. 16 | If uType is not cmd or exec then "" is returned to signal failure. 17 | 18 | {{{string zOTLibSimpleFormatBar(string uType, string uChartId, int iIgnore, string uMark, string uInfo) }}} 19 | uType should be one of: bar 20 | Both will be put on the wire as a their type topics. 21 | If uType is not tick timer or bar, then "" is returned to signal failure. 22 | 23 | {{{string zOTLibSimpleFormatTimer(string uType, string uChartId, int iIgnore, string uMark, string uInfo) }}} 24 | uType should be one of: tick or timer 25 | Both will be put on the wire as a their type topics. 26 | If uType is not tick timer or bar, then "" is returned to signal failure. 27 | 28 | {{{string zOTLibSimpleFormatTick(string uType, string uChartId, int iIgnore, string uMark, string uInfo) }}} 29 | uType should be one of: tick or timer 30 | Both will be put on the wire as a their type topics. 31 | If uType is not tick timer or bar, then "" is returned to signal failure. 32 | 33 | {{{string zOTLibSimpleFormatRetval(string uType, string uChartId, int iIgnore, string uMark, string uInfo) }}} 34 | uType should be one of: retval 35 | Will be put on the wire as a its type topic. 36 | If uType is not retval, then "" is returned to signal failure. 37 | 38 | {{{string eOTLibSimpleUnformatCmd(string& aArrayAsList[]) }}} 39 | 40 | Source code: [[MQL4/Libraries/OTMql4/OTLibSimpleFormatCmd.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibSimpleFormatCmd.mq4]] 41 | 42 | 43 | 44 | This file is automatically generated from the source code: do not edit. 45 | ---- 46 | Parent: [[CodeLibraries]] 47 | -------------------------------------------------------------------------------- /wiki/OTLibStrings.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibStrings.mq4 === 2 | 3 | 4 | Miscellaneous functions that help handling strings. 5 | This includes Ansi to Unicode "issues". 6 | 7 | {{{string uAnsi2Unicode(int iStringMemory) }}} 8 | 9 | {{{void vStringToArray(string uInput, string& uOutput[], string uDelim) }}} 10 | 11 | {{{string uStringReplace(string uHaystack, string uNeedle, string uReplace) }}} 12 | 13 | Source code: [[MQL4/Libraries/OTMql4/OTLibStrings.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibStrings.mq4]] 14 | 15 | 16 | 17 | This file is automatically generated from the source code: do not edit. 18 | ---- 19 | Parent: [[CodeLibraries]] 20 | -------------------------------------------------------------------------------- /wiki/OTLibTest.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Scripts/OTMql4/OTLibTest.mq4 === 2 | 3 | 4 | A simple test Script that doesn't do much, but it's a start. 5 | Attach it to a chart, select the tests you want to run, 6 | and a MessageBox will pop up to tell you if it passed or failed. 7 | We will put each test as a boolean external input so the user 8 | can select which tests to run. 9 | 10 | {{{void vAlert(string uText) }}} 11 | 12 | {{{string eTestStrings() }}} 13 | Test our parsing of strings with vStringToArray 14 | 15 | {{{string eTestOTLibProcessCmd() }}} 16 | 17 | {{{void OnStart() }}} 18 | 19 | {{{void OnDeinit(const int iReason) }}} 20 | 21 | Source code: [[MQL4/Scripts/OTMql4/OTLibTest.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Scripts/OTMql4/OTLibTest.mq4]] 22 | 23 | 24 | 25 | This file is automatically generated from the source code: do not edit. 26 | ---- 27 | Parent: [[CodeScripts]] 28 | -------------------------------------------------------------------------------- /wiki/OTLibTrading.creole: -------------------------------------------------------------------------------- 1 | === MQL4/Libraries/OTMql4/OTLibTrading.mq4 === 2 | 3 | 4 | 5 | {{{int iOTOrderSelect(int iIndex, int iSelect, int iPool=MODE_TRADES) }}} 6 | int slippage, double stoploss, double fTakeprofit, 7 | 8 | {{{int iOTOrderCloseMarket(int iTicket, int iSlippage=3, color cColor=CLR_NONE) }}} 9 | 10 | {{{int iOTOrderCloseFull(int iTicket, double fPrice, int iSlippage=3, color cColor=CLR_NONE) }}} 11 | 12 | {{{int iOTOrderClose(int iTicket, double fLots, double fPrice, int iSlippage, color cColor=CLR_NONE) }}} 13 | 14 | {{{int iOTSetTradeIsBusy( int iMaxWaitingSeconds = 60 ) }}} 15 | 16 | {{{int iOTSetTradeIsNotBusy() }}} 17 | The function sets the value of the global variable fTradeIsBusy = 0. 18 | If the fTradeIsBusy does not exist, the function creates it. 19 | 20 | {{{double fOTExposedEcuInMarket(int iOrderEAMagic = 0) }}} 21 | 22 | {{{bool bOTIsTradeAllowed() }}} 23 | 24 | {{{int iOTRefreshRates() }}} 25 | 26 | {{{int iOTMarketInfo(string s, int iMode) }}} 27 | 28 | {{{double fOTMarketInfo(string s, int iMode) }}} 29 | 30 | {{{bool bOTContinueOnOrderError(int iTicket) }}} 31 | 32 | Source code: [[MQL4/Libraries/OTMql4/OTLibTrading.mq4|https://github.com/OpenTrading/OTMql4Lib/raw/master/MQL4/Libraries/OTMql4/OTLibTrading.mq4]] 33 | 34 | 35 | 36 | This file is automatically generated from the source code: do not edit. 37 | ---- 38 | Parent: [[CodeLibraries]] 39 | -------------------------------------------------------------------------------- /wiki/TitleIndex.creole: -------------------------------------------------------------------------------- 1 | 2 | == Title Index 3 | 4 | * [[CodeLibraries]] 5 | * [[CodeScripts]] 6 | * [[DevelopmentStyle]] 7 | * [[DirectoryStructure]] 8 | * [[FrontPage]] 9 | * [[Home]] 10 | * [[Installation]] 11 | * [[OTLibJsonFormat]] 12 | * [[OTLibLog]] 13 | * [[OTLibMt4ProcessCmd]] 14 | * [[OTLibProcessCmd]] 15 | * [[OTLibServerErrors]] 16 | * [[OTLibSimpleFormatCmd]] 17 | * [[OTLibStrings]] 18 | * [[OTLibTest]] 19 | * [[OTLibTrading]] 20 | * [[TitleIndex]] 21 | 22 | ---- 23 | This file is automatically generated from the source code: do not edit. 24 | -------------------------------------------------------------------------------- /wiki/_Footer.creole: -------------------------------------------------------------------------------- 1 | [[Home]] 2 | -------------------------------------------------------------------------------- /wiki/_Sidebar.creole: -------------------------------------------------------------------------------- 1 | **Index** 2 | 3 | * [[TitleIndex]] 4 | --------------------------------------------------------------------------------