错误、漏洞、问题 - 页 1863

 
fxsaber:

测试器中的ACCOUNT_PROFIT显示为无稽之谈。


我再补充一下。

1.用于交换工具

Как следствие, неправильно оцениваются эквити, просадка и т.д.

2.另外,在关注头寸的总盈亏时,专家顾问的逻辑不能正确工作。

我们在结算时关注ACCOUNT_PROFIT的价值。

2017.04.20 11:30:26.318 Core 1  2017.04.17 18:02:46   Профит = 333.01

在关闭时,终端重新计算利润,所以你最终的结果是

亏损平仓

2017.04.20 11:30:26.318 Core 1  2017.04.17 22:02:08   Профит = -338.66

因此,我们有

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
//--- global variable
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
input     string symb="GOLD-6.17";
input     string symb1="GOLD-9.17";
input     double  ТП  =333;
datetime date1;
double i1,ask1,ask2,bid1,bid2,last1,last2,profit;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  double price1=SymbolInfoDouble(symb,SYMBOL_BID);
  double price2=SymbolInfoDouble(symb1,SYMBOL_BID);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
Comment("");
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {
//---
      profit=AccountInfoDouble(ACCOUNT_PROFIT);
      Comment("ПРофит = ",profit);
     if(PositionsTotal()==0 )
     {
      m_trade.Buy(1.00,symb);
      m_trade.Buy(1.00,symb1);    
     }

   if( MathAbs(profit)>=ТП )
     {
      Print("Профит = ",profit);
     CloseAll();
     }

  }  
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         m_trade.PositionClose(m_position.Ticket());
  }
//+------------------------------------------------------------------+

 
kaus_bonus:

我再补充一下。

在SD中,我们正在处理...
 
Slawa:
显然,我不了解关于HFT的一些情况。据我所知,当你进行 "非常快 "的交易时,你并不关心以前的交易。

HFT举了一个例子,就是一个只做大量交易的TS。

你可以在很长一段时间内运行一些黄牛的运行。最主要的是要有大量的交易(数以万计)。然后就会出现目前实施的历史工作的缺点。


目前的情况如下。如果有很多交易,不要使用历史记录。

 
fxsaber:
在SD...


那很好。

移除LAST价格的使用就可以获得足够的结果。

 

请帮助我找到从开仓价到止损和止盈水平的最小缩进 点,以便不把它们放在离开仓价太近的地方,不至于遇到错误10016(TRADE_RETCODE_INVALID_STOPS)。我试着用SymbolInfoInteger(见下面的代码),但这个计算结果是0。如果有人能给我一个想法,如何正确计算。

void OnStart()
  {
   long stopLevel;
   if(SymbolInfoInteger("EURUSD",SYMBOL_TRADE_STOPS_LEVEL,stopLevel))
      Print("stopLevel = ",stopLevel);
  }
 
Maxim Khrolenko:

请帮助我找到从开仓价到止损和止盈水平的最小缩进 点,以便不把它们放在离开仓价太近的地方,不至于遇到错误10016(TRADE_RETCODE_INVALID_STOPS)。我试着用SymbolInfoInteger(见下面的代码),但这个计算结果是0。如果有人能给我一个想法,如何正确计算。


0 - 无限制。但也有SYMBOL_SESSION_PRICE_LIMIT_MIN和SYMBOL_SESSION_PRICE_LIMIT_MAX。
 
fxsaber:

0 - 没有限制。但也有SYMBOL_SESSION_PRICE_LIMIT_MIN和SYMBOL_SESSION_PRICE_LIMIT_MAX。
嗯,在这种情况下,我希望SYMBOL_TRADE_STOPS_LEVEL能以某种不同的方式工作。如果0是无限制的,那么理论上,当向服务器发送.PositionOpen(...)时,我们可以在开盘价 的1点(5位数)设置止损,但TRADE_RETCODE_INVALID_STOPS错误将100%弹出。到目前为止,我被难住了。
 
Maxim Khrolenko:
嗯,在这种情况下,我希望SYMBOL_TRADE_STOPS_LEVEL能以某种不同的方式工作。如果0是无限制的,那么理论上,当向服务器发送.PositionOpen(...)时,可以在距离开盘价 1点(5位数)处设置止损,但是TRADE_RETCODE_INVALID_STOPS错误会在这里100%弹出。到目前为止,我被难住了。

这个怎么样?

 if(stoplevel==0) stoplevel=SymbolInfoInteger(symb,SYMBOL_SPREAD);
 
测试员又出事了--1586。播放的专家顾问
#include <MT4Orders.mqh>

// Metaquotes-Demo, RTS-6.17, 2017.04.07 - 2017.04.08, на основе реальных тиков, начальный баланс 100000
void OnTick()
{  
  static int Type = OP_BUY;

  MqlTick Tick;    
  
  if (OrderSelect(0, SELECT_BY_POS) && (OrderType() <= OP_SELL))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);    
  else if ((OrdersTotal() == 0) && SymbolInfoTick(_Symbol, Tick) && (Tick.bid != 0) && (Tick.ask != 0))
  {
    OrderSend(_Symbol, Type + OP_BUYLIMIT, 1, (Type == OP_BUY) ? Tick.ask : Tick.bid, 0, 0, 0);
    
    Type = OP_SELL - Type;
  }    
}

在每一个刻度线上,要么在当前价格上设置一个限价(立即执行),要么关闭头寸。就是说,应该有很多职位。但事实并非如此,因为限制器已经停止执行。下面是日志的结尾,显示

2017.04.20 12:47:41.885 2017.04.07 10:00:00   sell limit 1.00 RTS-6.17 at 114060 (114060 / 114180 / 113770)
2017.04.20 12:47:41.885 2017.04.07 23:44:59   order canceled due end of test [#140  sell limit 1.00 RTS-6.17 at 114060]
2017.04.20 12:47:41.885 final balance 91195.12 RUR
2017.04.20 12:47:41.885 RTS-6.17,M1: 327182 ticks, 788 bars generated. Test passed in 0:00:00.218.

SellLimit被设置为Bid,但它从未被执行。

在1585年,一切都很顺利。

 
fxsaber:
对测试器又做了一些处理--1586。

我明白我是错的,但我仍然得到了一些错误的构建发布方法的印象。过去,在构建发布后没有这么多的错误报告。

原因: