bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //это длинная позиция
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // это короткая позиция
}
}
bool Buy_Condition_1=...
bool Buy_Condition_2=...
bool Buy_Condition_3=...
if(Buy_Condition_1 || Buy_Condition_2)
{
if(Buy_Condition_3)
{
// есть ли в данный момент открытая позиция на покупку?if(Buy_opened)
{
Alert("Уже есть позиция на покупку!!!");
return; // не добавлять к открытой позиции на покупку
}
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask
mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
mrequest.deviation=10; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
// анализируем код возврата торгового сервераif(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{
Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{
Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
return;
}
}
}
bool Buy_Close_1=....
bool Buy_Close_2=...
bool Buy_Close_3=...
if(Buy_Close_1 || Buy_Close_2)
{
if(Buy_Close_3)
{
// есть ли в данный момент открытая позиция на покупку?if(????)
{
Alert("Позицию на покупку закрываю!!!");
return; // закрыл
}
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена bid
mrequest.sl = 0;
mrequest.tp = 0;
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_SELL; // ордер на продажу // ордер на покупку
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
mrequest.deviation=10; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
if(Buy_Condition_1 || Buy_Condition_2)
{
if(Buy_Condition_3)
{
// есть ли в данный момент открытая позиция на покупку?if(Buy_opened)
{
Alert("Уже есть позиция на покупку!!!");
return; // не добавлять к открытой позиции на покупку
}
bool Buy_Close_1=....
bool Buy_Close_2=...
bool Buy_Close_3=...
if(Buy_Close_1 || Buy_Close_2)
{
if(Buy_Close_3)
{
// есть ли в данный момент открытая позиция на покупку?if(????)
{
Alert("Позицию на покупку закрываю!!!");
return; // закрыл
}
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена bid
mrequest.sl = 0;
mrequest.tp = 0;
bool Buy_Close_1=....
bool Buy_Close_2=...
bool Buy_Close_3=...
if(Buy_Close_1 || Buy_Close_2)
{
if(Buy_Close_3)
{
// есть ли в данный момент открытая позиция на покупку?if(????)
{
Alert("Позицию на покупку закрываю!!!");
// Return убрал благодаря форуму ))
}
客户端 / 策略测试仪 / 策略测试仪的操作 / 正向测试
谢谢你。
是的,从这个链接。
http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing。
我找到了第二个问题的答案。然而,第一个和第三个问题是没有答案的。
我也想拥有它们。
我想知道其他交易者的结果和比率。因为我的结果是非常令人震惊的。我是自动控制和非稳态过程建模领域的科学家,其中也包括市场上的价格变动图。我已经为非平稳过程建模多年,测试器的工作方式完全不符合我多年的经验。这里有些不对劲。要么是我对测试仪的使用不正确,要么是它不能正常工作。让我们一起找出来。
我严格按照优化期进行的回测显示,在相同的参数下,我们的利润是优化期间的200%。然而,当选择其他优化参数并在优化期间进行测试时,我们获得的利润将减少数倍。情况不应该是这样的。这就是为什么我有一些问题。
好吧,这不是由我决定的,就像他们说的,"只要我能做到"(c)。 我离这个话题本身很远。试着在论坛上搜索一下,也许哪里已经讨论过正向测试了。或者,如果你认为这个主题非常重要,就创建一个新的主题分支。否则,问题会在总支部中丢失。
在航站楼里也有参考资料。F1.
做了一件非常愚蠢的事情。
我把自定义移动平均线指标的主体拿出来,把MFI缓冲区放在里面。
我改变了价格。
我是作为专家为你做的,只是一个指标和检查的意见。
再次感谢您的留言。
我把PositionSelect(_Symbol)的值改为true,而不是问号。 这并没有什么帮助。
问题。我可以最大限度地改变什么--以便能够设定接近条件?关于专家顾问的文章https://www.mql5.com/ru/articles/100,提到了开仓 的条件,但没有讨论平仓的条件。
我把PositionSelect(_Symbol)的值改为true,而不是问号。 这并没有什么帮助。
问题。我可以把什么改成最低限度--能够设置关闭条件?你有一个警报后的回报。职位可能不会因为这个回报而关闭。请把它拿走,再试一次。
然而,在问号部分出现了另一个问题。
关于算法。
在适当的条件下+没有位置--位置被打开,在其他条件下和存在一个打开的位置--打开的位置被关闭。
如果我没有弄错的话--存在一个位置,即Buy_opened
等于1 - 导致警报和返回(返回到开头),等于0 - 打开买入订单。
问题。我应该写什么来代替问号--未平仓订单的条件,以便EA不开仓(在我的例子中,它开的是卖单)?
目前,我还规定了Buy_opened,因为这个定义的条件与PositionSelect(_Symbol)有关。
我理解这些问题并不意味着什么,因为可以快速尝试所有可能的逻辑选项并进行测试,但问题是测试者的错误不允许我这样做,但有机会在真实交易模式下对M1进行实际诊断。
...
我理解这些问题并不意味着什么,因为你可以快速尝试所有可能的逻辑选项并进行测试,但问题是,测试者的错误不允许我这样做,但有机会在真实交易模式下对M1进行实际诊断。
我不太明白你的问题。
那么你在测试器中发现了什么错误,使你无法运行测试?
我不太明白你的问题。
测试器中的错误是什么,使你无法运行测试?
关于这个问题。我们应该写什么来代替问号,以使专家顾问 "理解 "有一个未结头寸,而不是开出一个订单!
前面描述的,或在指标分支中描述的。Dema指的是MFI指标手柄--不显示在MFI窗口,因此--专家顾问不工作。医学硕士也是如此,AMA也是如此。关于这个问题。我们应该写什么来代替问号,以便让EA "看到 "
有一个未平仓的头寸,而不会开出一个订单!
如果有一个位置(PositionSelect(_Symbol)),并且所有其他条件都满足,那么就关闭这个位置。如果不删除你的例子中的返回,条件应该是这样的
这意味着如果没有位置,就退出。如果不退出,程序将执行此块之后的代码。
但我想在关闭条件检查之前,先检查位置的存在/不存在。