def optimize(self, alias=DEFAULT_MT4_NAME): """ """ self.optimization = True self._prepare(alias=alias) bt_conf = self._get_conf_abs_path(alias=alias) mt4 = get_mt4(alias=alias) mt4.run(self.ea_name, conf=bt_conf) ret = OptimizationReport(self) return ret
def run(self, alias=DEFAULT_MT4_NAME): """ Notes: run backtest """ self.optimization = False self._prepare(alias=alias) bt_conf = self._get_conf_abs_path(alias=alias) mt4 = get_mt4(alias=alias) mt4.run(self.ea_name, conf=bt_conf) ret = BacktestReport(self) return ret
def _create_conf(self, alias=DEFAULT_MT4_NAME): """ Notes: create config file(.conf) which is used parameter of terminal.exe in %APPDATA%\\MetaQuotes\\Terminal\\<UUID>\\tester file contents goes to TestExpert=SampleEA TestExpertParameters=SampleEA.set TestSymbol=USDJPY TestPeriod=M5 TestModel=0 TestSpread=5 TestOptimization=true TestDateEnable=true TestFromDate=2014.09.01 TestToDate=2015.01.05 TestReport=SampleEA TestReplaceReport=false TestShutdownTerminal=true """ mt4 = get_mt4(alias=alias) conf_file = os.path.join(mt4.appdata_path, 'tester', '%s.conf' % self.ea_name) # shutdown_terminal must be True. # If false, popen don't end and backtest report analyze don't start. shutdown_terminal = True with open(conf_file, 'w') as fp: fp.write('TestExpert=%s\n' % self.ea_name) fp.write('TestExpertParameters=%s.set\n' % self.ea_name) fp.write('TestSymbol=%s\n' % self.symbol) fp.write('TestPeriod=%s\n' % self.period) fp.write('TestModel=%s\n' % self.model) fp.write('TestSpread=%s\n' % self.spread) fp.write('TestOptimization=%s\n' % str(self.optimization).lower()) fp.write('TestDateEnable=true\n') fp.write('TestFromDate=%s\n' % self.from_date.strftime('%Y.%m.%d')) fp.write('TestToDate=%s\n' % self.to_date.strftime('%Y.%m.%d')) fp.write('TestReport=%s\n' % self.ea_name) fp.write('TestReplaceReport=%s\n' % str(self.replace_report).lower()) fp.write('TestShutdownTerminal=%s\n' % str(shutdown_terminal).lower())
def _create_param(self, alias=DEFAULT_MT4_NAME): """ Notes: create ea parameter file(.set) in %APPDATA%\\MetaQuotes\\Terminal\\<UUID>\\tester Args: ea_name(string): ea name """ mt4 = get_mt4(alias=alias) param_file = os.path.join(mt4.appdata_path, 'tester', '%s.set' % self.ea_name) with open(param_file, 'w') as fp: for k in self.param: values = self.param[k].copy() value = values.pop('value') fp.write('%s=%s\n' % (k, value)) if self.optimization: if values.has_key('max') and values.has_key('interval'): fp.write('%s,F=1\n' % k) fp.write('%s,1=%s\n' % (k, value)) interval = values.pop('interval') fp.write('%s,2=%s\n' % (k,interval)) maximum = values.pop('max') fp.write('%s,3=%s\n' % (k,maximum)) else: # if this value won't be optimized, write unused dummy data for same format. fp.write('%s,F=0\n' % k) fp.write('%s,1=0\n' % k) fp.write('%s,2=0\n' % k) fp.write('%s,3=0\n' % k) else: if type(value) == str: # this ea arg is string. then don't write F,1,2,3 section in config pass else: # write unused dummy data for same format. fp.write('%s,F=0\n' % k) fp.write('%s,1=0\n' % k) fp.write('%s,2=0\n' % k) fp.write('%s,3=0\n' % k)
def _create_param(self, alias=DEFAULT_MT4_NAME): """ Notes: create ea parameter file(.set) in %APPDATA%\\MetaQuotes\\Terminal\\<UUID>\\tester Args: ea_name(string): ea name """ mt4 = get_mt4(alias=alias) param_file = os.path.join(mt4.appdata_path, 'tester', '%s.set' % self.ea_name) with open(param_file, 'w') as fp: for k in self.param: values = self.param[k].copy() value = values.pop('value') fp.write('%s=%s\n' % (k, value)) if self.optimization: if values.has_key('max') and values.has_key('interval'): fp.write('%s,F=1\n' % k) fp.write('%s,1=%s\n' % (k, value)) interval = values.pop('interval') fp.write('%s,2=%s\n' % (k, interval)) maximum = values.pop('max') fp.write('%s,3=%s\n' % (k, maximum)) else: # if this value won't be optimized, write unused dummy data for same format. fp.write('%s,F=0\n' % k) fp.write('%s,1=0\n' % k) fp.write('%s,2=0\n' % k) fp.write('%s,3=0\n' % k) else: if type(value) == str: # this ea arg is string. then don't write F,1,2,3 section in config pass else: # write unused dummy data for same format. fp.write('%s,F=0\n' % k) fp.write('%s,1=0\n' % k) fp.write('%s,2=0\n' % k) fp.write('%s,3=0\n' % k)
def _get_conf_abs_path(self, alias=DEFAULT_MT4_NAME): mt4 = get_mt4(alias=alias) conf_file = os.path.join(mt4.appdata_path, 'tester', '%s.conf' % self.ea_name) return conf_file
def get_report_abs_path(ea_name, alias=DEFAULT_MT4_NAME): import os mt4 = get_mt4(alias=alias) report = os.path.join(mt4.appdata_path, '%s.htm' % ea_name) return report