初学者的问题 MQL5 MT5 MetaTrader 5 - 页 508

 
我附加了一个马丁格尔。 在一天中,我以这种形式附加了专家顾问(它已经做了几笔相同的EA交易,但之前处于未完成的状态), - EA工作正常,马丁格尔工作,在加上半天的损失。 第二天,我在早上打开平台,去工作,在晚上 - 一笔交易。 马丁格尔对亏损的交易增加手数,否则 - 标准手。
void OnTick()
  {
   datetime EaStartTime = StringToTime(StartTime);  // время начала работы советника
   datetime EaEndTime = StringToTime(EndTime);      // время окончания работы советника
   datetime CurrTime = TimeCurrent();               // это если нужно взять время терминала
   if(CurrTime<EaStartTime || CurrTime>=EaEndTime)
      return;                                       // если еще не время торговать - выход
     {
      MacdCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_MAIN,0);
      SignalCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_SIGNAL,0);
      SignalMAPrevious=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,1);
      SignalMAThis=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,0);
      SignalParabolic=iSAR(NULL,0,InpSARStep,InpSARMaximum,0);
      SignalStochastic_5=iStochastic(NULL,5,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,1,0);
      MainStochastic_5=iStochastic(NULL,5,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,0,0);
      SignalStochastic=iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,1,0);
      MainStochastic=iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,0,0);
      SignalCCIPrevious=iCCI(NULL,0,InpCCIPeriod,0,1);
      SignalCCIThis=iCCI(NULL,0,InpCCIPeriod,0,0);
      if(CountTrades()==0) CheckForOpen();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
 {if(ModLots())
  {
      //-----Ставим ордер на покупку.
    if(SignalCurrent<MacdCurrent && SignalMAPrevious<SignalMAThis && 
      Ask>SignalParabolic && SignalStochastic_5<MainStochastic_5&&SignalStochastic<MainStochastic&&
      SignalCCIPrevious<SignalCCIThis)
      {
       ticket=OrderSend(NULL,OP_BUY,lot,Ask,slippage,0,0,exptime,magic,0,Blue);
       if(ticket>0)
          return;
      }
//-----Ставим ордер на продажу.
    if(SignalCurrent>MacdCurrent && SignalMAPrevious>SignalMAThis && 
      Bid<SignalParabolic && SignalStochastic_5>MainStochastic_5&&SignalStochastic>MainStochastic&&
      SignalCCIPrevious>SignalCCIThis)
      {
       ticket=OrderSend(NULL,OP_SELL,lot,Bid,slippage,0,0,exptime,magic,0,Red);
       if(ticket>0)
          return;
      }
  }
 }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
            count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
bool ModLots()
  {
    for(int i=OrdersHistoryTotal()-1;i>=0;i--)
      {
       if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
       if((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
         {
          if(OrderProfit()<0)
            {lot=OrderLots()*LotMarti;  break;}
          else { lot=Lots; break;}
         }
      }
   return(true);
  }
//+------------------------------------------------------------------+
 
你好。mql4手册中说,策略测试器中不支持Timer和ChartEvent事件处理。相应地,按钮(OBJ_BUTTON)不工作(更确切地说,当你点击时,什么也没有发生)。然而,由于某些原因, EA的试用版并不支持这一规则。请告诉我为什么会发生这种情况,如何使测试器中的按钮工作?
 
Maks_Knyazev:
你好。mql4手册中说,策略测试器中不支持Timer和ChartEvent事件处理。相应地,按钮(OBJ_BUTTON)不工作(更确切地说,当你点击时,什么也没有发生)。然而,由于某些原因, EA的试用版并不支持这一规则。请告诉我为什么会发生这种情况,如何使测试器中的按钮工作?

是的,它们不起作用。你必须在测试器中手动检查这些按钮,像这样

CButton *cbSell, *cbBuy;

//проверяем из OnTick в тестере 
void CheckButtons()
{
    if(cbSell.Pressed())
    {
        OpenOrderWithCheck2(Symbol(), OP_SELL, 0.1, Bid, 50, 0, 0, "", 1, 0, clrDeepSkyBlue);
        cbSell.Pressed(false);
    }    
    if(cbBuy.Pressed())
    {
        OpenOrderWithCheck2(Symbol(), OP_BUY, 0.1, Bid, 50, 0, 0, "", 1, 0, clrRed);
        cbBuy.Pressed(false);
    }
    ChartRedraw();
}

 
Alexey Volchanskiy:

是的,它们不起作用。在测试器中,你必须手动检查这些按钮,像这样

非常感谢您!是否有任何文献描述这种事情?
 

flint17480, 2016.02.01 08:58

你好。在欧元兑美元的09-47分钟蜡烛上没有关闭利润,利润是在1.08428,蜡烛升至1.08420。该怎么做?提前感谢。
 
<br / translate="no">

flint17480, 2016.02.01 08:58

你好。我在09-47的时候失去了欧元兑美元的利润,它在1.08428,然后涨到了1.08420。你能告诉我该怎么做吗?提前感谢。

需要更多信息。

  1. 未结头寸的类型:卖出还是买入?
  2. 你知道终端的价格是由BID绘制的吗?

 
Karputov Vladimir:

flint17480, 2016.02.01 08:58

你好。在欧元兑美元的09-47分钟蜡烛上没有关闭利润,利润是在1.08428,蜡烛升至1.08420。该怎么做?预先感谢你。

你应该注意价差,因为空头在Asc时被关闭,而蜡烛图在Bid时被画出。对于大多数货币对来说,5位数的点差超过8点是正常的。

 
Karputov Vladimir:

flint17480, 2016.02.01 08:58

你好。在欧元兑美元的09-47分钟蜡烛上没有关闭利润,利润是在1.08428,蜡烛升至1.08420。该怎么做?预先感谢你。
勾选要写的引言。要我把我的报价发给你吗?虽然在kodobaz有很多这样的人。你对传播的看法是正确的。
 
大家下午好)分享移动止损 的代码--推动价格))))预先感谢
 
Tema97:
大家下午好)分享移动止损 的代码--推动价格))))提前感谢。
你为什么不喜欢追踪止损?它已经内置于终端中
原因: