真实账户上的EA竞赛 - 页 17

 

现在我看了看账户历史,发现了。在真实账户中,达到指定利润后平仓 的功能实际上是不起作用的!尽管它在测试器中工作正常。

也就是说,在大多数情况下,盈利的头寸在相当于15点的Ticrofit时被关闭--这是允许的最低止损水平。

但是这个Pipswise专家顾问已经被优化为在欧元兑美元上收盘+11,在欧元兑英镑上收盘+8!

这样的差异(尤其是15和8)对于一个剥头皮的专家顾问来说是非常敏感的。

我还不知道为什么会发生这样的事情....我从另一个(外星人)设计中提取了一个现成的功能。

我对它进行了梳理和改进(对于eurofrank来说,该功能看起来像这样)。

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//Функция дает команду на  закрытие  позиции при достижении профита , 
//задаваемого  параметром CloseProfit. Для корректной работы 
//этой функции необходимо наличие вспомогателной функции del(int ticket)
void CloseProfit()                                                    {
    if (OrdersTotal() > 0)                                            {
      for (int q = OrdersTotal() + 1; q >= 0; q--)                    {
         if (OrderSelect( q, SELECT_BY_POS, MODE_TRADES))              {
            if (OrderSymbol() == "EURCHF")                            {
               if (OrderMagicNumber() == Magic)                       {
                  if (OrderCloseTime() == 0)                          {
                     if (OrderType() == OP_BUY)                       {
                        RefreshRates();
                        if (Bid > OrderOpenPrice() + CloseProfit* Point) {
                           Print("ClosePozishion"); del(OrderTicket());
                        } }
                     if (OrderType() == OP_SELL)                         {
                        RefreshRates();
                        if (Ask < OrderOpenPrice() - CloseProfit* Point) {
                           Print("ClosePozishion"); del(OrderTicket());
                        }}}}}}}}}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//Функция реализует закрытие позиций по текущей цене
void del(int ticket) {
   int Error;
   double _bid;
   for (int w = 0; w < 1; w++) {
      GetLastError();
      OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES);
      if (OrderType() == OP_BUY) {
         RefreshRates();
         _bid = MarketInfo("EURCHF", MODE_BID);
         if (!OrderClose( ticket, OrderLots(), _bid, 3, Green)) Error = GetLastError();
      }
      if (OrderType() == OP_SELL) {
         RefreshRates();
         _bid = MarketInfo("EURCHF", MODE_ASK);
         if (!OrderClose( ticket, OrderLots(), _bid, 3, Green)) Error = GetLastError();
      }
      if ( Error == 0) {  PlaySound("expert.wav");  return; }//при  нормальном закрытии  
      //  позиции, - даем сигнал "expert.wav"
      if ( Error != 0) {// если произошла ошибка закрытия - сигнал и печать .
         PlaySound("timeout.wav");
         Print("Error for Close Funtion =", Error);
      }
      while (!IsTradeAllowed()) Sleep(5000);//если торг. поток занят, - ждем 5 сек
      if ( Error == 146) while (IsTradeContextBusy()) Sleep(10000);
      //если нет соединения с сервером, ждем - 10 сек
   }
}

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
 

它是否会发出错误?

这种设计可以被简化

      if (OrderType() == OP_BUY) {
         RefreshRates();
         _bid = MarketInfo("EURCHF", MODE_BID);
         if (!OrderClose( ticket, OrderLots(), _bid, 3, Green)) Error = GetLastError();
      }
      if (OrderType() == OP_SELL) {
         RefreshRates();
         _bid = MarketInfo("EURCHF", MODE_ASK);
         if (!OrderClose( ticket, OrderLots(), _bid, 3, Green)) Error = GetLastError();
      }

像这样

RefreshRates();
if (!OrderClose( ticket, OrderLots(),OrderClosePrice(), 3, Green)) Error = GetLastError();
 
keekkenen писал(а)>>

它是否会发出错误?

这种设计可以被简化

像这样。

对于错误,我不能说什么。我只有这个账户的投资密码。

但我在这家经纪公司的真实账户上经常发生错误。我收到了代码错误的蜂鸣信号,而且我经常听到这种信号!起初,有一个关闭的错误信号。而往往再过一两分钟后,就会有一个获利的信号触发。换句话说,收盘的功能工作不正确,价格突破到获利水平,通过了设定的收盘水平!这是不正确的。

至于设计的简化,它可以简化,但当一切都被详细描述时,我觉得更清楚。

 

你写道:这个Pips专家顾问经过优化,在欧元兑瑞郎上收盘价为+11,在欧元兑英镑上收盘价为+8!

一切都很容易解释。 你开一个多头头寸,等待条件触发法定的15个点。

if (OrderType() == OP_BUY){
	RefreshRates();
    if (Bid > OrderOpenPrice() + CloseProfit* Point) {
		Print("ClosePozishion"); del(OrderTicket());
    }
}

你以买入价买入并以买入价收盘,因此你失去了点差(4点),所以你必须在Ifa中设置Ask而不是Bid。

来获得你的15个点...


还有,上面的内容不清楚......如果止盈是15个点,为什么要提前关闭?

 
keekkenen писал(а)>>

你写道:这个Pips专家顾问经过优化,在欧元兑瑞郎上收盘价为+11,在欧元兑英镑上收盘价为+8!

一切都很简单,你开一个多头头寸,等待条件触发法定的15个点。

你以买入价买入并以买入价收盘,因此你失去了点差(4点),所以你必须在Ifa中设置Ask而不是Bid。

来获得你的15个点...

如果止盈是15个点,我为什么要提前关闭?

并非如此。我想在达到+11点的利润后平仓。而止盈是在+15(因为不可能把它放得更近--DC中的止损水平是允许的=15)。

你认为我为什么要出价购买?我是在升空时买的。

但多头头寸是通过卖出来关闭的?- 不是吗?

这就是为什么它在电子费用上出价......

但是,即使我在你的意见中失去了价差的大小,这个事实也不能解释真实的和测试者之间的结果分歧 !

在10天内进行了200次交易,在手数=0.1的情况下,几乎有500美元的背离情况恶化。

 
leonid553 >> :

但是,即使我按照你的说法失去了价差大小,这个事实也不能解释真实的和测试者之间的结果分歧!

>> 嗯哼,还有冻结级别,也许这就是问题所在。
 
TheXpert писал(а)>>

几乎有三分之一的交易在真实中缺失,这可能是错过的利润。或者,也许有什么东西被遗漏了。让我知道,我们会想办法的。

我已经整理出了交易的数量。现在我在测试器中运行专家顾问,启用了重新报价模型的选项。 测试器中的交易量和真实账户中的交易量几乎相同(在合理范围内)。

也就是说,重新报价是有责任的。他们大力减少交易数量,很多有利可图的交易一定是在真实账户上被削减的。

但所有这些--它并不能解释测试和真实结果之间的所有差异。

//-------------------------------------------------------------------

因此,我的专家顾问似乎已经 "工作起来",成为领导者之一...

http://acompetition.love-craft.ru/?q=ru

 
TheXpert писал(а)>>
还有一个冻结级别,也许问题就出在这里。

如果我理解正确的话,这个概念包括对同时开仓数量的限制和对手数的限制。

我不认为这个因素是相关的。

根据专家顾问的算法,一个货币对在市场上的头寸一次不能超过一个。

这块地暂时是固定的。(0.1)

 
leonid553 >> :

如果我理解正确的话,这个概念包括对开仓数量的限制和对手数的限制。

不 - 这是一个更接近的水平,你不能修改挂单,以及采取和抓取位置。

 
谢谢你的澄清。我将去DC网站澄清这个问题。