大家好!
我应该马上指出,我曾试图在这里 的相关主题中提出这些问题,但不知为何,这个问题没有得到应有的关注。尽管在我看来,所触及的话题至少有一次触及/出现在许多人的脑海中。有点像常见问题中的问题(尽管我可能是错的)。我将在这里直接复制问题本身。
1.Mql4和Mql5(网站和编程语言)之间 有区别。 有Metatrade 4和Metatrader 5分别有Mql4和Mql5。也有两个不同的对应网站。同时,我在MT4中看的那些专家顾问都是指向该网站的。哪一个更有意义?哪个论坛 "更有活力"?哪里是发布问题的最佳地点?不同版本的MT和Mql之间是否存在后向兼容性?我个人目前正分别在Mql4上编写我的MT4专家顾问。这是因为我用来测试演示的经纪人使用的是MT4。
...
把我与MQL4有关的问题放在 "第四 "论坛是合乎逻辑的。虽然MQL5和MQL4之间的差异不是很明显。我们已经从MQL4搬到了 这里。因此,如果你想在这个论坛上问一个关于 "4 "的问题,你最好在主题标题中注明与MT4有关。这样会更清楚。
...
在 "第四 "论坛上讨论MQL4问题是有意义的。尽管MQL5和MQL4之间的差异并不明显。这是一个从MQL4的过渡。因此,如果你想在这个论坛上提出关于 "4 "的问题,你最好在主题标题中注明与MT4有关。这样会更清楚。
对于第二个问题,见input, sinput, ParametrGetRange(...), ParametrSetRange(...)。
我没有问如何设置专家顾问的外部参数。我很久以前就学会了这样做(输入,外置)。我问如何以及是否有可能动态地改变设置中显示的参数集。 在mql中找不到ParametrGetRange和ParametrSetRange。这些不是内置功能?到哪里去找?
P.S. sinput的使用只能作为一种提示,即该参数不能在不与其他参数绑定的情况下自行优化。但我甚至不能根据我已经选择的参数动态地将输入变为sinput,以建议在优化中获取什么参数(在选择的参数下,什么参数是重要的),这样我就不必浪费时间去跑那些目前没有意义的参数了
在 "参数 "选项卡中不能以编程方式改变任何东西。你可以通过从OnInit() 返回INIT_PARAMETERS_INCORRECT 来跳过禁用参数设置。
你可以通过程序改变开始、步骤、停止和优化的权限:https://www.mql5.com/ru/docs/optimization_frames
![Документация по MQL5: Работа с результатами оптимизации Документация по MQL5: Работа с результатами оптимизации](/i/community/logo_mql5_small.png)
- www.mql5.com
在参数标签中不能以编程方式改变任何东西。一个禁用的参数集不能被跳过--一个存根可以被打开,以便不进行不必要的计算。
你可以通过程序改变开始、步骤、停止和优化分辨率:https://www.mql5.com/ru/docs/optimization_frames
这个话题被称为 "初学者的基本问题",作为一个初学者,我什么都不懂。好吧,这是我将得到我的基本问题的答案的地方(或者说希望如此)。我试图按照一步一步的指南来写 我的专家顾问。我在MKL5中被卡住了,当某个指标信号出现时,比如两个MAs的交叉点,或者布林线收窄或其他信号出现时,如何强行平仓(无需等待SL或TP)?一定有一个类似ClosePos()的函数,但它在哪里,我怎样才能得到它?我要求提供详细的代码片段,因为我自己并不了解其中的细微差别--在MKL5中还是个婴儿。
我自己也在处理这个问题,还不到一个月。问题是你是想自己做还是在论坛上问。简单的问题通常不问,因为它不是很好(你可以在帮助中寻找,在网上寻找现成的答案)。这就是为什么我问那些在这个月里出现的相当广泛的问题。至于你的问题...调用OrderClose函数。有很多关于其使用的例子。这是在内置的MACD样本中。这里是用于通过MACD信号平仓的代码(这里是实施追踪止损的代码样本)。
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//--- long position is opened
if(OrderType()==OP_BUY)
{
//--- should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
//--- should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
我自己做这个还不到一个月。问题是你是想自己做,还是想在论坛上问问题。我通常不问简单的问题,因为这其实并不合适(你可以在帮助台做一些挖掘,或在互联网上搜索答案)。这就是为什么我问那些在这个月里出现的相当广泛的问题。至于你的问题...调用OrderClose函数。有很多关于其使用的例子。这是在内置的MACD样本中。这是用于通过MACD信号关闭订单的代码(这里是如何实现追踪止损机制的示例代码)。
谢谢你这么快的答复!我想,这可能是由一个长期处理这种事情的人给出的。
除了OrderClose在MKL4中,但它在MKL5中没有。在标准库中 的 CTrade 类中只有PositionClose 函数, 而且我根本不清楚如何从那里得到它。我认为,为此你必须以某种方式从代码中调用库,然后调用类 CTrade....总的来说,对我来说,这是一个黑暗的森林。我不打算研究MKL5,我只是决定将我相当成功的(对我来说)策略自动化,所以我只是开始按照步骤指示。现在我被卡住了...
谢谢你这么快的答复!我想这可能是来自于一个刚接触这个的人。
除了OrderClose是在MKL4中,但MKL5没有这个功能。在标准库中 的 CTrade 类中只有PositionClose 函数, 而且我根本不清楚如何从那里得到它。我认为,为此你必须以某种方式从代码中调用库,然后调用类 CTrade....总而言之,这对我来说是一片黑暗的森林。我不打算研究MKL5,我只是决定将我相当成功的(对我来说)策略自动化,所以我只是开始按照步骤指示。现在我被卡住了...
![Ошибка закрытия ордера Ошибка закрытия ордера](/i/community/logo_mql5_small.png)
- www.mql5.com
大家好!
我应该马上指出,我曾试图在这里 的相关主题中提出这些问题,但不知为何,这个问题没有得到应有的关注。尽管在我看来,所触及的话题至少有一次触及/出现在许多人的脑海中。有点像常见问题中的问题(尽管我可能是错的)。我将在这里直接复制问题本身。
1.Mql4和Mql5(网站和编程语言)之间 有区别。 有Metatrade 4和Metatrader 5分别有Mql4和Mql5。也有两个不同的对应网站。同时,我在MT4中看的那些专家顾问都是指向该网站的。哪一个更有意义?哪个论坛 "更有活力"?哪里是发布问题的最佳地点?不同版本的MT和Mql之间是否存在后向兼容性?我个人目前正分别在Mql4上编写我的MT4专家顾问。这是由于我用来测试演示的经纪人使用的是MT4。我如何识别我的专家顾问所使用的语言?我指的是只用扩展名(.mq4和.mq5)。如果我重新命名一个文件,它是否会被编译(同样,关于兼容性)?
2.动态外部专家顾问参数。是 否可以动态地改变专家顾问的可调参数?让我解释一下...例如,有一个外部参数extern bool a。如果是真的,应设置一个额外的参数extern int b。如果a=false,那么就不需要参数b了。有没有办法根据选定的当前值来显示/不显示?考虑到我找不到任何外部参数变化处理程序,也没有#if ...#endif,我怀疑它不能做...如果是这样,但你能否建议在这种情况下最好的方法,以便不使设置外部参数的过程超负荷?例如,我可能把a=false,忘记参数b没有被使用,但仍然把它纳入优化(虽然没有意义,只会浪费额外的时间)。而当只有一个这样的参数b时是一回事。但是,如果,例如,我做了一个枚举式的外部参数,并且有几个下拉式的TC变体。它们有一个共同的部分(因此在一个EA中实现它们是合乎逻辑的,而不是写几个),但也有不同的,有许多不同的参数。那么就很容易混淆哪些参数与选定的TS有关。
专家顾问的自动优化。I MHO,它是非常有用和有用的。我在这里发现了一篇关于在真实交易中自动优化交易机器人的 文章。然而,据我所知,使用的是MT的第二个实例,该实例从外部(从MT的一个运行实例)运行优化,优化结果以html形式从报告中读取。这是不太方便的,也是歪打正着。从逻辑上讲,我应该编写自己的优化函数/dll,并直接从专家顾问中运行它。因此,问题是这样的。据我了解,一个遗传优化算法被编入了策略测试器。我对这些算法的了解非常简略。但他们已经知道很长时间了,因此问题是--为什么要重新发明车轮?)有没有一种直接用于MT的现成的算法?也许它已经存在于终端本身的某个库中...也许有一个单独的源代码或准备好的dll。一般来说,请分享你在这个问题上的经验。
预先感谢你对这些问题的至少部分的回答。