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

 
lil_lil :

나는 연속으로 손실을 계산하는 기능에서 동시에 4개의 위치를 닫습니다. 하나의 위치로 계산하는 방법은 무엇입니까?

닫기, 미끄러짐으로 인해 동일한 가격이 아닐 수 있으며 시간이 다를 수 있습니다.

시도:

브로커가 카운터 클로징을 허용하는 경우 종가를 고정하기 위해 총 마감된 주문 수량과 동일한 볼륨으로 카운터 주문을 열어야 합니다. 그 후 종가가 고정된 것으로 판명되어 반대의 종가에 대한 4개의 거래 조작을 천천히 수행할 수 있습니다.

 

마진 계산 방법을 결정하는 방법을 알려주세요.

일부 브로커는 각 포지션에 마진을 부과합니다. 그리고 일부의 경우 구매 및 판매 볼륨의 차이만 있습니다. (즉, 계정에 전체 잠금이 있는 경우 마진은 0입니다)


마진 계산 방법을 프로그래밍 방식으로 결정하는 방법은 무엇입니까?

 

안녕하세요. 도와주세요, 제발.

나는 MA 위의 프랙탈을 찾고 있습니다. 나는 막대를 기억하고, 더 나아가 이 막대에서 프랙탈을 찾고, 그것이 처음 발견된 것보다 작으면 참입니다.

댓글에서 지속적으로 거짓

 Comment(f_ma(Symbol(),0,i));
//+----------------------------------------------------------------------------+

bool f_ma( string sy= "0" , int tf= 0 , int nf= 0 ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ,MA= 0 ,fr1,fr2;
   int     d= MarketInfo (sy, MODE_DIGITS ),s;
   if (d== 0 ) if ( StringFind (sy, "JPY" )< 0 ) d= 4 ; else d= 2 ;
   int     i,k= iBars (sy,tf),kf,num_bar;

   for (i=nf+ 2 ; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
      MA= iMA ( NULL , 0 , 35 , 0 , MODE_EMA , PRICE_CLOSE ,i);
       if (f!= 0 ) 
        {
         // kf++;
         if (f>MA) {num_bar=i; fr1= NormalizeDouble (f, d); continue ;}
         
        }
     }
     //
       for (i=nf+ num_bar; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
       if (f!= 0 ) 
        {
        fr2= NormalizeDouble (f, d);
         if (fr2<fr1) return ( true );
        }
     }
     
     
   return ( false );
  }
 
Ghabo :

안녕하세요. 도와주세요, 제발.

나는 MA 위의 프랙탈을 찾고 있습니다. 나는 막대를 기억하고, 더 나아가 이 막대에서 프랙탈을 찾고, 그것이 처음 발견된 것보다 작으면 참입니다.

댓글에서 지속적으로 거짓

문제는 이 줄에 있다

         if (f>MA) {num_bar=i; fr1= NormalizeDouble (f, d); continue ;}


프랙탈이 발견되고 MA보다 높으면 주기를 중단해야 하며 계속해서는 안 됩니다. 결국, 첫 번째 발견 후, 다른 것과 세 번째가 있을 것입니다.

 
Alexey Viktorov :

문제는 이 줄에 있다


프랙탈이 발견되고 MA보다 높으면 주기를 중단해야 하며 계속해서는 안 됩니다. 결국, 첫 번째 발견 후, 다른 것과 세 번째가 있을 것입니다.

덕분에. break로 대체됨, 이제 항상 true입니다. 그러나 if (fr2<fr1) 조건이 충족되지 않습니다.
 
Ghabo :
덕분에. break로 대체됨, 이제 항상 true입니다. 그러나 if (fr2<fr1) 조건이 충족되지 않습니다.

함수 결과 출력 전에 이 조건을 추가해야 함을 의미합니다. 이게 뭐가 그렇게 어렵나요???

 
Alexey Viktorov :

함수 결과 출력 전에 이 조건을 추가해야 함을 의미합니다. 이게 뭐가 그렇게 어렵나요???

조건이 충족되지 않으면 함수가 false를 반환해야 하지 않습니까?

 #property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
if (rates_total< 100 ) return ( 0 );
int limit=rates_total-prev_calculated;
if (limit> 200 )limit= 200 ;
   for ( int i=limit; i> 0 ; i--)
     {
     
     
     Comment (f_ma( Symbol (), 0 ,i));
     }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
   //-------------------
   bool f_ma( string sy= "0" , int tf= 0 , int nf= 0 ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ,MA= 0 ,fr1,fr2;
   int     d= MarketInfo (sy, MODE_DIGITS ),s;
   if (d== 0 ) if ( StringFind (sy, "JPY" )< 0 ) d= 4 ; else d= 2 ;
   int     i,k= iBars (sy,tf),kf,num_bar;

   for (i=nf+ 2 ; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
      MA= iMA ( NULL , 0 , 35 , 0 , MODE_EMA , PRICE_CLOSE ,i);
       if (f!= 0 ) 
        {
         // kf++;
         if (f>MA) {num_bar=i; fr1= NormalizeDouble (f, d); break ;}
         
        }
     }
     //
       for (i=nf+ num_bar; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
       if (f!= 0 ) 
        {
        fr2= NormalizeDouble (f, d);
         if (fr2<fr1) return ( true );
        }
     }
     
     
   return ( false );
  }
  
 
Ghabo :

조건이 충족되지 않으면 함수가 false를 반환해야 하지 않습니까?

iFractals가 0을 반환하거나 비어 있는지 확인합니다.

 
Alexey Viktorov :

iFractals가 0을 반환하거나 비어 있는지 확인합니다.

데이터 창 에 값이 비어 있습니다. if (f!= 0 ) 를 if(f!=EMPTY_VALUE)로 교체하면 결과가 변경되지 않습니다.
 
Ghabo :
데이터 창 에 값이 비어 있습니다. if (f!= 0 ) 를 if(f!=EMPTY_VALUE)로 교체하면 결과가 변경되지 않습니다.

1. 교체가 아니라 확인이라고 했습니다. iFractals는 프랙탈이 없으면 0을 반환합니다. 꾸준하게 사용하지도 않고 자연스럽게 이런 사소한 일로 마르지 않은 기억도 막히지 않는다.

2. 이 기능은 끔찍하게 작성되었지만 여전히 제대로 작동합니다.

3. 마지막 값이 Comment에 표시됩니다. 로 변경

     Print ( "************ " , f_ma( Symbol (), 0 , 0 ));
몇 번이나 인쇄되는지 확인하십시오.
 2018.07 . 30 21 : 02 : 43.656 00 EURUSD.e,H1: ************ true