Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 569

 
YanSay:

Подскажите пожалуйста, как исключить/добавить в советник конкретную дату?

Например, не торговать 2 марта 2018. Разные варианты пробовал, запутался с датами.

Самый простой вариант - так:

input datetime i_dtSkipTheDay = D'2018.03.02';


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

Добрый день написал советник, торгует все хорошо. Решил дополнить его и прописать закрытие ордеров по противоположным сигналам...но он почему то не реагирует ....то вообще не открывает или открывает но не закрывает по противоположным сигналам....только по ТП и СЛ

 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:

Добрый день написал советник, торгует все хорошо. Решил дополнить его и прописать закрытие ордеров по противоположным сигналам...но он почему то не реагирует ....то вообще не открывает или открывает но не закрывает по противоположным сигналам....только по ТП и СЛ

У вас написано:

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

Если ордеров Buy нет, то нужно закрыть Buy. Аналогично с Sell.

 
Ihor Herasko:

У вас написано:

Если ордеров Buy нет, то нужно закрыть Buy. Аналогично с Sell.

Их убрать надо 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);
  }

//+------------------------------------------------------------------+
Причина обращения: