포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 44

 

그래서 함수의 최종 형태를 바랍니다.

 double ATR_Max() {
int i;
double m;
datetime tim;
iATR_H1_PER = 15 ; // период
if ( tim != Time[ 0 ] ) {  
while ( i < WindowBarsPerChart() ) {
double a = iATR ( NULL , 0, iATR_H1_PER, i );
   if ( m < a ) {
   m = a;
   }
   i++;
   tim = Time[ 0 ];
  }
}
Alert ( " Максимальное значение ATR для видимого количества баров равно - " , m );
return (m);
} 
 
dr.Vasgenich :

그래서 함수의 최종 형태를 바랍니다.

Vasgenich 박사:

그래서 함수의 최종 형태를 바랍니다.

루프 뒤에 tim = Time[0] 을 두는 것이 더 좋을 것이라고 생각합니다. 그렇지 않으면 Time[0] 요청이 보이는 막대 의 전체 수에 대해 수행됩니다. 이는 합리적이지 않습니다.
 
Boeing747 :
루프 뒤에 tim = Time[0] 을 두는 것이 더 좋을 것이라고 생각합니다. 그렇지 않으면 Time[0] 요청이 보이는 막대의 전체 수에 대해 수행됩니다. 이는 합리적이지 않습니다.
수정해주셔서 감사합니다. 밤에는 오류 수가 기하급수적 으로 증가합니다. ))))
 
dr.Vasgenich :
수정해주셔서 감사합니다. 밤에는 오류 수가 기하 급수적으로 증가합니다)))))
기하급수적으로 ). 그러나, 나도 옹알이를 할 시간이다. 당신이 쓰는 경우))
 
안녕하세요. 말해봐, mql4에서 표시기 매개변수를 즉시 변경할 수 있습니까?
아이디어는 간단합니다. 지그재그 표시기가 차트에 설치됩니다. 스크립트를 작성하고 차트의 지그재그 매개변수가 변경될 키를 눌러 스크립트에 핫키를 첨부합니다.
 

높은 변동성 필터를 찾는 현재 주제를 계속합니다. WSR에서 기존 필터의 코드를 제공합니다

 extern string ____ = "Фильтр волатильности" ;
extern bool VolatilityFilter              = FALSE;
extern int VolaFilter                     = 25 ; //--- (15 1 30)
double pp;
double pd;

정수 초기화()

   if ( Digits < 4 ) {
      pp = 0.01 ;
      pd = 2 ;
   } else {
      pp = 0.0001 ;
      pd = 4 ;
   }

다음은 함수 자체입니다.

 bool CheckVolatility() {
   double HeightFilter_a = NormalizeDouble (VolaFilter * pp, pd);
   bool restrict = false ;
   if ( NormalizeDouble (iHigh( NULL , PERIOD_M5 , 1 ) - iLow( NULL , PERIOD_M5 , 1 ), pd) > HeightFilter_a) restrict = true ;
   if ( NormalizeDouble (iHigh( NULL , PERIOD_M5 , 2 ) - iLow( NULL , PERIOD_M5 , 2 ), pd) > HeightFilter_a) restrict = true ;
   return (restrict);
}

따라서 함수는 이전 두 막대의 값을 확인하고 너무 크면 함수는 TRUE를 반환합니다. 문제는 함수가 더 많은 양초에서 큰 양초를 검색하도록 아름답게 다듬는 방법입니다. 예를 들어 24.

 
satorifx :
안녕하세요. 말해봐, mql4에서 표시기 매개변수를 즉시 변경할 수 있습니까?
아이디어는 간단합니다. 지그재그 표시기가 차트에 설치됩니다. 스크립트를 작성하고 차트의 지그재그 매개변수가 변경될 키를 눌러 스크립트에 핫키를 첨부합니다.
가능성이있다.
 

트레이딩 테스트를 위해 자작 어드바이저를 만들었는데 한 가지를 못 찾겠어요...

베이/셀은 최대 및 최소 MA로 열립니다.

// BUY 포지션 을 열기 위한 조건
if(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)

// SELL 포지션을 열기 위한 조건
if(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)

 #include <b-Lots.mqh>
extern double TrailingStop = 30 ;
extern double Sploss = 15 ;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start() {
   double HA_up,HA_dw;
   double MA_H0,MA_H1,MA_L0,MA_L1,MA_0,MA_1;
   int i, cnt, ticket, total;
   bool flag= true ;

   if ( Bars < 100 ) {
       Print ( "bars less than 100" );
       return ( 0 ); 
   }
// Проверяем стоит ли открываться
   
   cnt=OrdersHistoryTotal()- 1 ;
   for (i=cnt;i>= 0 ;i--) {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY )) continue ;
       if (OrderOpenTime()>=Time[ 0 ]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag= false ;
         break ;
      }
   }
   cnt= OrdersTotal ()- 1 ;
   for (i=cnt;i>= 0 ;i--) {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
       if (OrderOpenTime()>=Time[ 0 ]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag= false ;
         break ;
      }
   }
   if (!flag) return ( 0 ); 
//-----------------------------------------------
   MA_H0= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_HIGH , 0 );
   MA_H1= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_HIGH , 1 );
   MA_0= iMA ( 0 , 0 , 3 , 0 , MODE_EMA , PRICE_MEDIAN , 0 );
   MA_1= iMA ( 0 , 0 , 3 , 0 , MODE_EMA , PRICE_MEDIAN , 1 );
   MA_L0= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_LOW , 0 );
   MA_L1= iMA ( 0 , 0 , 3 , 0 , MODE_SMA , PRICE_LOW , 1 );
   HA_up= iCustom ( 0 , 0 , "Heiken Ashi" , 3 , 0 );
   HA_dw= iCustom ( 0 , 0 , "Heiken Ashi" , 2 , 0 );

//задали все данные 

   total= OrdersTotal ();
   if (total< 1 ) 
     {
       // Проверка свободной маржи
       if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin());
         return ( 0 );  
        }
       // Условие открытие позиции BUY
       if (MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
        {
         Lots=GetSizeLot();
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 5 ,Bid-Sploss* Point , 0 , "" , 16384 , 0 ,Green);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " ,OrderOpenPrice());
           }
         else Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
        }
       // Условие открытие позиции SELL
       if (MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
        {
         Lots=GetSizeLot();
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 5 ,Ask+Sploss* Point , 0 , "" , 16384 , 0 ,Red);
         if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "SELL order opened : " ,OrderOpenPrice());
           }
         else Print ( "Error opening SELL order : " , GetLastError ()); 
         return ( 0 ); 
        }
       return ( 0 );
     }
    
   for (cnt= 0 ;cnt<total;cnt++)
     {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if (OrderType()<=OP_SELL &&   
         OrderSymbol()== Symbol ())  
        {
         if (OrderType()==OP_BUY)   // длинная позиция открыта
           {
           if ( NormalizeDouble ( MathAbs (MA_H0-Bid), Digits )< Point )
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,Violet); 
                 return ( 0 ); 
                }
             // трейлинг-стоп для длинной позиции
             if (TrailingStop> 0 )  
              {                 
               if (Bid-OrderOpenPrice()> Point *TrailingStop)
                 {
                   if (OrderStopLoss()<Bid- Point *TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop,OrderTakeProfit(), 0 ,Green);
                     return ( 0 );
                    }
                 }
              }
           }
         else 
           {
           if ( NormalizeDouble ( MathAbs (MA_L0-Ask), Digits )< Point )
              {
               OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,Violet); 
               return ( 0 ); 
              }
             // трейлинг-стоп для короткой позиции
             if (TrailingStop> 0 )  
              {                 
               if ((OrderOpenPrice()-Ask)>( Point *TrailingStop))
                 {
                   if ((OrderStopLoss()>(Ask+ Point *TrailingStop)) || (OrderStopLoss()== 0 ))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop,OrderTakeProfit(), 0 ,Red);
                     return ( 0 );
                    }
                 }
              }
           }
        }
     }
   return ( 0 );
  }
질문: 현재 양초의 위치가 닫히지 않았습니다(조건이 오지 않음), MA_0= iMA( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 )와 일치할 때 다음 양초에서 즉시 닫히게 하는 방법 ;

청산 조건이 있습니다: 현재 양초의 고점 또는 저점을 가로지르지만, 포지션을 연 후 다음 양초에서 해당 포지션을 청산할 수도 있어야 합니다.

if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point )를 작성할 수 있지만 두 번째 열린 촛불의 조건을 충족하는 방법.


코드로 대답할 수 있다면 예제가 더 명확합니다.
 
Zhunko :
가능성이있다.

엄청나게 상세한 답변 감사합니다.

새로운 사람이 질문을 가지고 포럼에 왔는지 이해하려면 이마에 7개의 스팬이 있어야 합니까? 그는 "모든 것이 가능하다"는 어리석은 변명이 아니라 특정 솔루션이나 유사한 것에 대한 링크가 필요합니까?

 
satorifx :

엄청나게 상세한 답변 감사합니다.

새로운 사람이 질문을 가지고 포럼에 왔는지 이해하려면 이마에 7개의 스팬이 있어야 합니까? 그는 "모든 것이 가능하다"는 어리석은 변명이 아니라 특정 솔루션이나 유사한 것에 대한 링크가 필요합니까?

그들은 스스로 무언가를 하려는 사람들을 돕습니다. 그들은 올바른 방향으로 당신을 가리키고 설명합니다. ...

당신은 질문을 했습니다 - 당신은 대답했습니다. 스스로 글을 쓰려고 노력한 적이 있습니까?

특정 형식으로 질문할 때 먼저 질문 형식에 대해 어떤 대답을 얻을지 생각하십시오 ...