//+------------------------------------------------------------------+ //| Get the property value "POSITION_COMMISSION" | //+------------------------------------------------------------------+ double CPositionInfo::Commission(void) const { return(PositionGetDouble(POSITION_COMMISSION)); } //+------------------------------------------------------------------+ //| Get the property value "POSITION_SWAP" | //+------------------------------------------------------------------+ double CPositionInfo::Swap(void) const { return(PositionGetDouble(POSITION_SWAP)); } //+------------------------------------------------------------------+ //| Get the property value "POSITION_PROFIT" | //+------------------------------------------------------------------+ double CPositionInfo::Profit(void) const { return(PositionGetDouble(POSITION_PROFIT)); }
//+------------------------------------------------------------------+ //| Get the property value "POSITION_COMMISSION" | //+------------------------------------------------------------------+ double CPositionInfo::Commission(void) const { return(PositionGetDouble(POSITION_COMMISSION)); } //+------------------------------------------------------------------+ //| Get the property value "POSITION_SWAP" | //+------------------------------------------------------------------+ double CPositionInfo::Swap(void) const { return(PositionGetDouble(POSITION_SWAP)); } //+------------------------------------------------------------------+ //| Get the property value "POSITION_PROFIT" | //+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| Get the property value "POSITION_COMMISSION" |//+------------------------------------------------------------------+double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
让我们用一个简单的顾问来检查一下...
没有必要去检查。其逻辑与MQL4相同:利润、佣金和掉期是独立的实体。
现在让我们用一个简单的EA检查一下...
弗拉基米尔,重点是,在四个我做这个。
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
你如何在5分钟内完成?
弗拉基米尔,重点是,在四个我做这个。
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
你如何在5分钟内完成?
请用代码展示一下,这里是mql5中的直接代码,最好不要 有变态的地方。
//| Get the property value "POSITION_COMMISSION" |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP" |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
{
return(PositionGetDouble(POSITION_SWAP));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT" |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
{
return(PositionGetDouble(POSITION_PROFIT));
}
这几乎是不可能的!从SB中提取,直接编码
//| Get the property value "POSITION_COMMISSION" |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP" |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
{
return(PositionGetDouble(POSITION_SWAP));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT" |
//+------------------------------------------------------------------+
忘了把它放在文档中,但这个"POSITION_COMMISSION"是否有效?
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
fxsaber, 2016.07.19 12:40
POSITION_COMMISSION 属性在测试者(RoboForexEU-MetaTrader 5)中总是返回零佣金。
另外POSITION_COMMISSION(==8)在帮助和元编辑(高亮)中没有出现,但对编译器来说是熟悉的。使用另一种(工作)方法来确定职位佣金并不难。POSITION_COMMISSION属性--简陋?
{
double Commission = ::PositionGetDouble(POSITION_COMMISSION);
// На случай, если POSITION_COMMISSION не работает
if (Commission == 0)
{
const ulong Ticket = MT4ORDERS::GetPositionDealIn();
if (Ticket > 0)
{
const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);
if (LotsIn > 0)
Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
}
}
return(Commission);
}
关于交易、自动交易系统和策略测试的论坛
初学者的问题
fxsaber, 2016.10.29 16:23
我没有强行使用MT4Orders库。但是,也许直接调用好的老的OrderCommission 会更容易一些?
不仅在套期保值账户上,在净值账户上也仍然有效。
现在让我们用一个简单的专家顾问来检查一下...
这里:POSITION_PROFIT 显示头寸的利润
.它没有考虑到互换等问题。
弗拉基米尔,重点是,在四个我做这个。
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
我如何在五天内做到这一点?
佣金是如此不可预测,只能在封闭的交易中确定。对于一个未结头寸,你只能找出当前的利润(既没有考虑掉期的影响,也没有考虑佣金的影响)和掉期。以下是代码。
在 "m_trade.PositionClose(Symbol(); "一行设置断点,并在历史上运行测试。当测试人员在断点处停止时,将利润和交换栏中的数字与测试人员日志中未写的数字进行比较。
这里:POSITION_PROFIT 显示头寸的利润
.它没有考虑到互换等问题。
好的。我们得到了它。
fxsaber的 解决方案很好,我已经应用了。
基本上,我把我的MQL4程序转移到MQL5,几乎没有任何问题。
详细情况见上文。
非常感谢您!