MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 569

 
YanSay :

특정 날짜를 어드바이저에서 제외/추가하는 방법을 알려주시겠습니까?

예를 들어, 2018년 3월 2일에 거래하지 마십시오. 다른 옵션을 시도했지만 날짜와 혼동되었습니다.

가장 간단한 옵션은 다음과 같습니다.

 input datetime i_dtSkipTheDay = D'2018.03.02' ;


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

좋은 오후, 고문은 모든 것이 잘 거래되고 있다고 썼습니다 . 나는 그것을 보완하고 반대 신호에 마감 주문을 처방하기로 결정했습니다 ...하지만 어떤 이유로 반응하지 않습니다 .... 전혀 열리지 않거나 열리지 만 반대 신호에는 닫히지 않습니다 .... TP에 의해서만 에스엘

 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 :

좋은 오후, 고문은 모든 것이 잘 거래되고 있다고 썼습니다 . 나는 그것을 보완하고 반대 신호에 마감 주문을 처방하기로 결정했습니다 ...하지만 어떤 이유로 반응하지 않습니다 .... 전혀 열리지 않거나 열리지 만 반대 신호에는 닫히지 않습니다 .... TP에 의해서만 에스엘

당신은 다음과 같이 썼습니다:

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

매수 주문이 없으면 매수를 닫아야 합니다. Sell도 마찬가지입니다.

 
Ihor Herasko :

당신은 다음과 같이 썼습니다:

매수 주문이 없으면 매수를 닫아야 합니다. 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);
  }

//+------------------------------------------------------------------+