新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 569

 
YanSay:

你能告诉我如何排除/添加一个特定的日期到EA吗?

例如,不要在2018年3月2日进行交易。尝试了不同的选项,对日期感到困惑。

最简单的选择是这样的。

input datetime i_dtSkipTheDay = D'2018.03.02';


...
datetime dtDayStartTime = TimeCurrent() / (60 * 60 * 24); 
if (dtDayStartTime == i_dtSkipTheDay)
{
   // не торговать
}
 

我已经写了一个EA,它的交易很好。我决定对它进行补充,并通过相反的信号规定平仓指令......但它没有反应....,它根本不开仓或开仓但不通过相反的信号平仓....,只通过TP和SL进行平仓。

 if (CCILong < Level0 && CountBuy() == 0)
       {   for(int i=OrdersTotal()-1; i >=0; i--)
          {
             if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
             {
                if(OrderMagicNumber() == Magic && OrderType() == OP_BUY)
                  bool close1 = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrNONE);
             }
          }
       }   
          if (CCILong > Level0 && CountSell() == 0)
       {   for(int i=OrdersTotal()-1; i >=0; i--)
          {
             if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
             {
                if(OrderMagicNumber() == Magic && OrderType() == OP_SELL)
                  bool close1 = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrNONE);
             }
          }
       }
 
baksik99:

我已经写了一个EA,它的交易很好。我决定对它进行补充,并通过相反的信号规定平仓指令......但它没有反应....,它根本不开仓或开仓但不通过相反的信号平仓....,只通过TP和SL进行平仓。

你已经写了。

if (CCILong < Level0 && CountBuy() == 0)

如果没有买入订单,我们应该关闭买入。卖出也是如此。

 
Ihor Herasko:

你已经写好了。

如果没有买入订单,你必须关闭买入。卖出也是如此。

它们是否要被CountSell和CountBuy 删除

它起作用了....,我把它修好了!谢谢你!!++++。
 
Ihor Herasko:

最简单的选择是这样的。

不幸的是,它没有发挥作用(

一切如你所做,只是不平等。

input datetime i_dtSkipTheDay = D'2018.03.02';

datetime dtDayStartTime = TimeCurrent() / (60 * 60 * 24);
if (dtDayStartTime != i_dtSkipTheDay)
{
//Открытие ордера
}

仍然在测试器中,在那一天打开了交易。

 
YanSay:

不幸的是,它没有发挥作用(。

我所做的一切和你一样,只是不平等。

仍然在测试器中,在那一天打开了交易。

所以呢?

input datetime i_dtSkipTheDay = D'2018.03.02';

if (TimeToStr(TimeCurrent(),TIME_DATE) != TimeToStr(i_dtSkipTheDay,TIME_DATE))
{
//Открытие ордера
}
 
Taras Slobodyanik:

这个怎么样?

它就像那样工作!非常感谢您!

 
YanSay:

不幸的是,它没有发挥作用(。

我所做的一切和你一样,只是不平等。

当天还是在测试器上开了一个交易。

对不起,它需要在后面乘以。

input datetime i_dtSkipTheDay = D'2018.03.02';

datetime dtDayStartTime = (TimeCurrent() / (60 * 60 * 24)) * (60 * 60 * 24);
if (dtDayStartTime != i_dtSkipTheDay)
{
//Открытие ордера
}

这就是为什么没能成功。

 
Ihor Herasko:

对不起,需要在后面多加说明。

这就是为什么没能成功。

谢谢你!

 

我想用标准的分形指标做我自己的分形指标,似乎可以,但有时还是把分形放在所有错误的地方,谁能帮帮我?

//+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_color1  Gray
#property indicator_color2  Gray
#property indicator_label1  "Fractal Up"
#property indicator_label2  "Fractal Down"
bool high_f, low_f;
//---- input data
input int period = 5;
int per = period;
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int    ExtArrowShift=-10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
  if(per % 2 == 0) per++;
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//---
   if(rates_total<per)
      return(0);
//---
   if(prev_calculated<per+(per-1)/2)
     {
      limit=(per-1)/2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-per;

   for(i=limit;i<rates_total-(per+1)/2 && !IsStopped();i++)
     {
      
      for(int g = 1; g < (per+1)/2; g++){
         high_f = true; low_f = true;
         
         //---- Upper Fractal
         if(high[i-g] > high[i] || high[i+g] > high[i]){
            ExtUpperBuffer[i] = EMPTY_VALUE;
            high_f = false;  
            
         }else{            
            if(high_f) ExtUpperBuffer[i] = high[i];  
         }
         //---- Lower Fractal
         if(low[i-g] < low[i] || low[i+g] < low[i]){           
            ExtLowerBuffer[i] = EMPTY_VALUE;
            low_f = false;   
         }else{            
            if(low_f) ExtLowerBuffer[i] = low[i];     
         }
      
      }
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+
原因: