【发布时间】:2016-04-23 20:57:29
【问题描述】:
我正在尝试在 MetaTrader 4 中为我的公开市场订单添加止损,当头寸获得 100 点“有利”时,这是相等的到订单开盘价;
OrderStopLoss() == OrderOpenPrice()
但这并没有发生。
我已经添加了 Print() 和 GetLastError() 函数,但日志中没有任何内容,所以它一定是我的编码中的东西 - 但看不出会出现什么问题。
好的,这就是我目前所拥有的,一个用于买入的循环,一个用于卖出的循环。正如我被建议做的那样,我还对“双打”进行了规范化,并且还在顶部声明了 BuyMod 和 SellMod 为“真”。这应该确保默认值不会诉诸 false。我还认为如果我告诉你我有 MetaEditor 版本 5 build 1241 可能会有所帮助:)
我的以下代码如下;
/*Breakeven Order Modification*/
bool BuyMod = true;
bool SellMod = true;
for(int b = OrdersTotal()-1;b>=0;b--)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
{
double aBidPrice = MarketInfo(Symbol(),MODE_BID);
double anOpenPrice = OrderOpenPrice();
double aNewTpPrice = OrderTakeProfit();
double aCurrentSL = OrderStopLoss();
double aNewSLPrice = anOpenPrice;
double pnlPoints = (aBidPrice - anOpenPrice)/_Point;
double stopPoints = (aBidPrice - aNewSLPrice)/_Point;
int stopLevel = int(MarketInfo(Symbol(),MODE_STOPLEVEL));
int aTicket = OrderTicket();
if(OrderType() == OP_BUY)
if(stopPoints >= stopLevel)
if(aTicket > 0)
if(pnlPoints >= breakeven)
if(aNewSLPrice != aCurrentSL)
{
BuyMod = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(aNewSLPrice,Digits),NormalizeDouble(aNewTpPrice,Digits),0,buycolor);
SendMail("Notification of Order Modification for Ticket#"+IntegerToString(OrderTicket(),10),"Good news! Order Ticket#"+IntegerToString(OrderTicket(),10)+"has been changed to breakeven");
}
}
}
for(int s = OrdersTotal()-1; s>=0; s--)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
{
double anAskPrice = MarketInfo(Symbol(),MODE_ASK);
double anOpenPrice = OrderOpenPrice();
double aNewTpPrice = OrderTakeProfit();
double aCurrentSL = OrderStopLoss();
double aNewSLPrice = anOpenPrice;
double pnlPoints = (anOpenPrice - anAskPrice)/_Point;
double stopPoints = (aNewSLPrice - anAskPrice)/_Point;
int stopLevel = int(MarketInfo(Symbol(),MODE_STOPLEVEL));
int aTicket = OrderTicket();
if(OrderType()== OP_SELL)
if(stopPoints >= stopLevel)
if(pnlPoints >= breakeven)
if(aNewSLPrice != aCurrentSL)
if(aTicket > 0)
{
SellMod = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(aNewSLPrice,Digits),NormalizeDouble(aNewTpPrice,Digits),0,sellcolor);
SendMail("Notification of Order Modification for Ticket#"+IntegerToString(OrderTicket(),10),"Good news! Order Ticket#"+IntegerToString(OrderTicket(),10)+"has been changed to breakeven");
}
}
}
交易算法-交易 mql4 metatrader4
shareeditdeleteflag
刚刚编辑
2天前问过
托德·吉尔贝 264
您可能想知道,StackOverflow 不提倡重复问题。 (见
【问题讨论】:
-
在更新的代码段上:
tp问题仍然存在,OrderModify()之后的Print()仍然缺失。 -
虽然 StackOverflow 不是 Do-a-Homework 网站,但让我在下面的更新中提出解决方案的一些方向
-
对不起,什么 tp 问题&我想在订单修改失败时打印所有错误。我现在很困惑的原因是因为这与 OrderClose 的格式相同并且没有问题。我有一个完全编码的策略,非常有利可图。现在我正在向其中添加这一部分,我不明白为什么这很难实现。
-
tp问题在您关于同一主题的第二个或第三个问题中得到了解释 >>> stackoverflow.com/a/36743552/3666197 另外,您更新的代码仍然对值进行零自诊断用于OrderModify()呼叫和GetLastError()。除了执行这两个步骤之外,几乎没有其他方法可以诊断故障的根本原因。或者聘请该领域的一些专业服务人员通过知识外包来解决您的问题。在团队中拥有数百人*年的经验,没有人可以拥有相同的、相同的知识库。但肯定可以买到缺失的部分。 -
我还要说一下,
OrderClose()的函数调用签名与OrderModify()的函数调用签名截然不同。检查MQL4IDE 文档并仔细查看差异。
标签: algorithmic-trading mql4 metatrader4 mt4