初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1328 1...132113221323132413251326132713281329133013311332133313341335...1503 新评论 Mikhail Tkachev 2021.07.15 14:00 #13271 我请求社区的帮助...MT5无法同时在多个货币对上通过超限参数进行优化。当我在测试器的 "符号 "下选择 "来自市场观察的所有符号 "选项时,它禁用了在 "参数 "选项卡中设置输入参数超限的功能,只是没有复选框被选中,也没有输入任何数值。应该怎么做? Mikhail Mishanin 2021.07.15 14:39 #13272 MikeZv: 我请求社区的帮助...MT5无法同时在多个货币对上通过超限参数做优化。当我在测试器的 "符号 "栏中选择 "来自市场观察的所有符号 "选项时,它使 "参数 "选项卡中输入参数的超限设置功能失效,只是没有刻度线,也没有输入值。应该怎么做? 在几个字符上没有优化,只是测试了一下 Mikhail Tkachev 2021.07.15 15:06 #13273 Mikhail Mishanin:没有在多个字符上进行优化,只是测试了一下它必须在一个单独的测试中通过每个符号的参数? 在MT4中也是如此。因此,在MT5中进行多币种测试的可能性是一个神话? UPD 然而,文件中明确说: 应该理解的是,指定一个符号并不意味着测试者将只使用这个历史数据。在EA中使用的所有符号的信息,测试器会自动加载。 也就是说,应该用参数集选择一个符号,然后测试者将把这些参数" 应用于EA中涉及的所有符号"。 [删除] 2021.07.15 15:47 #13274 MikeZv:我必须在一个单独的测试中查看每个符号的参数吗? 在MT4中也是如此。所以MT5的多币种测试是一个神话?..... 你了解 "测试 "和 "优化 "这两个词之间的区别吗? Mikhail Tkachev 2021.07.15 15:56 #13275 Сергей Таболин:你了解 "测试 "和 "优化 "之间的区别吗? 是逐字 测试还是优化? Valeriy Yastremskiy 2021.07.15 17:10 #13276 Vitaly Muzichenko:因此,他需要了解开放的职位 关于交易、自动交易系统和策略测试的论坛初学者的常见问题 MQL5 MT5 MetaTrader 5Aleksandr Egorov, 2021.07.14 18:04如何在MT5中分别计算每个货币对的开仓订单的佣金? 是的,我的错误。通过列举每一对上的位置) Yuriy Vins 2021.07.15 17:45 #13277 大家好,有谁知道MT-5策略测试器中 图表上的十字线是在哪里打开的,以及它是否存在? Vladimir Karputov 2021.07.15 17:51 #13278 Yuriy Vins: 大家好,有谁知道MT-5策略测试器中 图表上的十字线是在哪里启用的,它到底在不在? 鼠标的中键(点击滚轮)。 Eugen8519 2021.07.15 18:03 #13279 谁能告诉我如何设置追踪止损的朋友。 //+------------------------------------------------------------------+ //| EMA_WMA v2(barabashkakvn's edition).mq5 | //| Copyright © 2009, Vladimir Hlystov | //| cmillion@narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Vladimir Hlystov" #property link "cmillion@narod.ru" #property version "2.000" #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> CPositionInfo m_position; // trade position object CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object CAccountInfo m_account; // account info wrapper //+------------------------------------------------------------------+ //| Enum Prices | //+------------------------------------------------------------------+ enum enPrices { pr_close, // Close pr_open, // Open pr_high, // High pr_low, // Low pr_median, // Median pr_typical, // Typical pr_weighted, // Weighted1 pr_average // Average (high+low+oprn+close)/4 }; //+------------------------------------------------------------------+ //--- Super Trend Hull Indicator int Inp_hullPeriod = 18; // Hull period int Inp_hullPeriod2 = 6660; // Hull period enPrices Inp_Price = pr_close; // Price extern double Lots = 5.0; //--- int period_EMA = 80; // EMA: averaging period int period_WMA = 80; // WMA: averaging period extern int InpStopLoss = 5000; // StopLoss extern int InpTakeProfit = 10000; // TakeProfit double my_lot; ulong m_magic=72406264; // magic number //--- double my_SL,my_TP; datetime TimeBar; double ExtStopLoss=0.0; double ExtTakeProfit=0.0; int m_bar_current=0; int handle_iCustom; // variable for storing the handle of the iCustom indicator int handle_iCustom2; // variable for storing the handle of the iCustom indicator int handle_iMA_EMA; // variable for storing the handle of the iMA indicator int handle_iMA_WMA; // variable for storing the handle of the iMA indicator int all_positions; // offene Positionen input bool Reverse = true; bool UseTimeLimit = true; int startHour = 1 ; int stopHour = 23; bool YesStop=false; input ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- m_symbol.Name(Symbol()); // sets symbol name //--- m_trade.SetExpertMagicNumber(m_magic); // sets magic number if(!RefreshRates()) { Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()), ", Ask=",DoubleToString(m_symbol.Ask(),Digits())); return(INIT_FAILED); } m_symbol.Refresh(); //--- tuning for 3 or 5 digits int digits_adjust=1; if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; ExtStopLoss = InpStopLoss * digits_adjust; ExtTakeProfit = InpTakeProfit * digits_adjust; //--- create handle of the indicator iMA handle_iMA_EMA=iMA(Symbol(),Period(),period_EMA,0,MODE_EMA,PRICE_OPEN); //--- if the handle is not created if(handle_iMA_EMA==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d", Symbol(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- create handle of the indicator iMA handle_iMA_WMA=iMA(Symbol(),Period(),period_WMA,0,MODE_LWMA,PRICE_OPEN); //--- if the handle is not created if(handle_iMA_WMA==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d", Symbol(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- create handle of the indicator iCustom handle_iCustom=iCustom(m_symbol.Name(),Period(),"hull_variation",Inp_hullPeriod,Inp_Price ); handle_iCustom2=iCustom(m_symbol.Name(),Period(),"23",Inp_hullPeriod2,Inp_Price ); //--- if the handle is not created if(handle_iCustom==INVALID_HANDLE || handle_iCustom2==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int Crossed(double line1,double line2) { static int last_direction=0; static int current_direction=0; //--- don't work in the first load, wait for the first cross! static bool first_time=true; if(first_time==true) { first_time=false; //--- if(line1>line2) current_direction=1; //up else current_direction=2; //(line1<line2) //down last_direction=current_direction; //--- return (0); } //--- if(line1>line2) current_direction=1; //up else current_direction=2; //(line1<line2) //down //--- if(current_direction!=last_direction) //changed { last_direction=current_direction; return(last_direction); } else { return(0); //not changed } } void OnTick() { double close1 = iClose(_Symbol,Timeframe,1); datetime time_0=iTime(0); if(TimeBar==time_0) return; if(TimeBar==0) { TimeBar=time_0; return; }//first program run double colorBuffer[],hull[],EMA0[],WMA0[]; ArraySetAsSeries(colorBuffer,true); ArraySetAsSeries(hull,true); ArraySetAsSeries(EMA0,true); ArraySetAsSeries(WMA0,true); int start_pos=1,count=3; if(!iGetArray(handle_iCustom,1,start_pos,count,colorBuffer)) return; if(!iGetArray(handle_iCustom2,1,start_pos,count,hull)) return; if(!iGetArray(handle_iMA_EMA,0,start_pos,count,EMA0)) return; if(!iGetArray(handle_iMA_WMA,0,start_pos,count,WMA0)) return; //--- if(UseTimeLimit) { YesStop=true; MqlDateTime str1; TimeToStruct(TimeCurrent() , str1); if(str1.hour > startHour && str1.hour < stopHour) YesStop=false; } if(YesStop==false) ulong m_ticket=0; double SEma,LEma; SEma = iMAGet(handle_iMA_WMA,0); LEma = iMAGet(handle_iMA_EMA,0); static int isCrossed=0; if(!Reverse) isCrossed=Crossed(LEma,SEma); else isCrossed=Crossed(SEma,LEma); //--- if(!RefreshRates()) return; { bool Buy_Condition_1 = (WMA0[m_bar_current] < EMA0[m_bar_current+1]); bool Buy_Condition_2 = (close1 > WMA0[0]); { int pos_total=PositionsTotal(); if(pos_total==0) { if(isCrossed==1) { if(!RefreshRates()) return; TimeBar=time_0; my_TP = m_symbol.Ask() + ExtTakeProfit*Point(); my_SL = m_symbol.Ask() - ExtStopLoss*Point(); my_lot = Lots; OPENORDER("Sell"); } } if(isCrossed==2) { if(!RefreshRates()) return; TimeBar=time_0; my_TP = m_symbol.Bid() - ExtTakeProfit*Point(); my_SL = m_symbol.Bid() + ExtStopLoss*Point(); my_lot= Lots; OPENORDER("Buy"); } } } if(colorBuffer[m_bar_current+1]>colorBuffer[m_bar_current] ) //Buy { if(!RefreshRates()) return; TimeBar=time_0; CLOSEORDER("Sell"); } if(colorBuffer[m_bar_current+1]<colorBuffer[m_bar_current] ) //Sell { if(!RefreshRates()) return; TimeBar=time_0; CLOSEORDER("Buy"); } return; } //-------------------------------------------------------------------- void CLOSEORDER(string ord) { for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy") m_trade.PositionClose(m_position.Ticket()); // Close Buy if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell") m_trade.PositionClose(m_position.Ticket()); // Close Sell } } //-------------------------------------------------------------------- void OPENORDER(string ord) { if(ord=="Sell") for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.PositionType()==POSITION_TYPE_SELL) return; // Если sell, то не открываемся if(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,"")) Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription(), ", ticket of deal: ",m_trade.ResultDeal()); if(ord=="Buy") for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.PositionType()==POSITION_TYPE_BUY) return; // Если buy, то не открываемся if(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,"")) Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of Retcode: ",m_trade.ResultRetcodeDescription(), ", ticket of order: ",m_trade.ResultOrder()); return; } double iMAGet(const int handle,const int index) { double MA[]; ArraySetAsSeries(MA,true); //--- reset error code ResetLastError(); //--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index if(CopyBuffer(handle,0,0,index+1,MA)<0) { //--- if the copying fails, tell the error code PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(0.0); } return(MA[index]); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Refreshes the symbol quotes data | //+------------------------------------------------------------------+ bool RefreshRates() { //--- refresh rates if(!m_symbol.RefreshRates()) return(false); //--- protection against the return value of "zero" if(m_symbol.Ask()==0 || m_symbol.Bid()==0) return(false); //--- return(true); } //+------------------------------------------------------------------+ //| Get Time for specified bar index | //+------------------------------------------------------------------+ datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); datetime Time[]; datetime time=0; ArraySetAsSeries(Time,true); int copied=CopyTime(symbol,timeframe,index,1,Time); if(copied>0) time=Time[0]; return(time); } //+------------------------------------------------------------------+ //| Get value of buffers | //+------------------------------------------------------------------+ bool iGetArray(const int handle,const int buffer,const int start_pos, const int count,double &arr_buffer[]) { bool result=true; if(!ArrayIsDynamic(arr_buffer)) { PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__); return(false); } ArrayFree(arr_buffer); //--- reset error code ResetLastError(); //--- fill a part of the iBands array with values from the indicator buffer int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer); if(copied!=count) { //--- if the copying fails, tell the error code PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d", __FILE__,__FUNCTION__,count,copied,GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(false); } return(result); } //+------------------------------------------------------------------+ Alexey Viktorov 2021.07.15 18:46 #13280 Yuriy Vins: 大家好,有谁知道MT-5策略测试器中 图表上的十字线是在哪里打开的,或者说它是否存在? Ctrl+F 但只有在用可视化的方式进行测试的时候。 1...132113221323132413251326132713281329133013311332133313341335...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
MT5
无法同时在多个货币对上通过超限参数进行优化。
当我在测试器的 "符号 "下选择 "来自市场观察的所有符号 "选项时,它禁用了在 "参数 "选项卡中设置输入参数超限的功能,只是没有复选框被选中,也没有输入任何数值。应该怎么做?
我请求社区的帮助...
MT5
无法同时在多个货币对上通过超限参数做优化。
当我在测试器的 "符号 "栏中选择 "来自市场观察的所有符号 "选项时,它使 "参数 "选项卡中输入参数的超限设置功能失效,只是没有刻度线,也没有输入值。应该怎么做?
在几个字符上没有优化,只是测试了一下
没有在多个字符上进行优化,只是测试了一下
它必须在一个单独的测试中通过每个符号的参数?
在MT4中也是如此。因此,在MT5中进行多币种测试的可能性是一个神话?
UPD 然而,文件中明确说:
我必须在一个单独的测试中查看每个符号的参数吗?
在MT4中也是如此。所以MT5的多币种测试是一个神话?
.....
你了解 "测试 "和 "优化 "这两个词之间的区别吗?
你了解 "测试 "和 "优化 "之间的区别吗?
是逐字 测试还是优化?
因此,他需要了解开放的职位
关于交易、自动交易系统和策略测试的论坛
初学者的常见问题 MQL5 MT5 MetaTrader 5
Aleksandr Egorov, 2021.07.14 18:04
如何在MT5中分别计算每个货币对的开仓订单的佣金?是的,我的错误。通过列举每一对上的位置)
大家好,有谁知道MT-5策略测试器中 图表上的十字线是在哪里启用的,它到底在不在?
鼠标的中键(点击滚轮)。
谁能告诉我如何设置追踪止损的朋友。
大家好,有谁知道MT-5策略测试器中 图表上的十字线是在哪里打开的,或者说它是否存在?
Ctrl+F
但只有在用可视化的方式进行测试的时候。