초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 54

 
형님이 오셨습니다. 아마 내일.
 
Merkulovv_Artem :

오류가 있는 곳을 알려주세요. 정확한 값을 얻을 수 있지만 노출 로트를 계산할 수 있도록 "Obem_Pozic" 값을 1.00처럼 보이게 만들 수 없습니다. 값을 정규화하고 싶지 않습니다. 소수점 이하 4자리를 제공합니다. 장소 그리고 그게 다야.

MQL4로 작성합니다.

MQL4에 대해 해당 포럼에서 질문합니다. 여기에 5가지가 있습니다.


귀하의 질문에 - 소수점 이하 4자리 경고를 제공합니다. DoubleToStr() 함수를 사용해야 합니다. 보다 정확한 화면 출력을 위해

DoubleToStr - Документация на MQL4
  • docs.mql4.com
DoubleToStr - Документация на MQL4
 
Yedelkin :

대부분이 쌍은 터미널에서 제공하므로 연결하기 만하면됩니다. 수동인 경우 Market Watch에서. 그리고 성인 방식 이라면 SymbolSelect()를 통해 프로그래밍 방식으로.

하나의 실수가 나타나면 나머지가 따라옵니다. 첫 번째 오류는 차례로 맨 아래에 있는 터미널에 있습니다. 그래서 우리는 첫 번째 오류를 제거하려고 노력해야 합니다. 그리고 나서 보게 될 것입니다. :)

감사해요!! 매우 명확하고 잘 작성되었습니다. 내 전문가 고문 인디드의 SymbolSelect(). 필요하시면 53페이지에 코드와 함께 게시했습니다. 나는 도움으로 확인했습니다 - 모든 것이 정확합니다 !! 그런 다음 가장 가능성이 높은 경우이 쌍은 터미널에서 제공합니다. 어떻게 생각해야합니까?

또한 아래에서 터미널에 오류가 먼저 있는 경우 차례로 오류가 발생합니다. 오류 메시지와 터미널 메시지가 번갈아 인쇄되지 않는 이유는 무엇입니까? 아니요, 함께 그룹화되어 있습니까?

터미널에서 이 기능이 아닌 오류를 보고할 수 있습니까?

 
그리고 분명히 예, 이것은 아닙니다 !! 또는 이것에서, 그러나 그런 것은 아닙니다. 첫째, 프로그램 메시지(인쇄)와 최종 메시지가 실제로 번갈아 가며, 갑자기 붐 - 그리고 10-12번, 바로 오류 4002가 갑자기 군중 속으로 올라갑니다!!
 
나는 아마도 여전히 코드를 봐야 할 것입니다 .. 다른 곳에서 지표를 가질 수 있습니다
 
Dimka-novitsek : 내 Expert Advisor에 SymbolSelect()가 있습니다. 필요하시면 53페이지에 코드와 함께 게시했습니다.

그래, 난 참조. 다음과 같이 시도해보자.

 ResetLastError ();
if ( SymbolSelect (a_symbol, true) ) Print ( "Символ " ,a_symbol, " успешно выбран" );
else Print ( "Неудача с выбором символа " ,a_symbol, ", error = " , _LastError );
 

감사해요!! !!

시간 프레임 변수의 인쇄가 어떻게 보여야 하는지 알려주세요. 디지털이 될 수 있습니까? 나는 숫자 1이 표시된다는 의미에서 하나를 봅니다.

 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 
 double   iMAf( string symbol, ENUM_TIMEFRAMES timeframe, int period, int mama_shift, ENUM_MA_METHOD mama_method, int applied_pricece, int shift){
 
     Print ( " iMAfsymbol  " ,symbol, "    iMAftimeframe " ,timeframe, "  iMAfperiod  " ,period, " iMAfmama_shift  " ,mama_shift , "  iMAfmama_method " ,mama_method,
     "  iMAfapplied_pricece " , applied_pricece, "  iMAfshift " ,shift);
 
                     MA_handle= iMA (symbol,timeframe,periodd(period),mama_shift, mama_method,applied_pricece); Sleep ( 2000 );
                     //--- если не удалось создать хэндл
   if (MA_handle== INVALID_HANDLE )
     {
       //--- сообщим о неудаче и выведем номер ошибки
     PrintFormat ( "Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d" ,
                 symbol,
                   EnumToString (timeframe),
                   GetLastError ()); ResetLastError (); return ( 0.0 );} 
                     
                     CopyBuffer ( MA_handle, 0 , 0 , 100 ,MA);
                     ArraySetAsSeries (MA, true );
                     if (shift> 99 ) return ( 0 );
     return ( (MA[shift])); } 
                   
///////////////////////////////////////////////////////////////////////////////////////////////////////

이유를 묻습니다. 이것은 기능입니다. 지문이 있는 줄이 있습니다. 위에서 각각 두 번째.

다음 은 함수 호출 입니다.

/////////////////////////////////////////////////////////////////////
int Distance_from_MA(string symbb)
{
 double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0);
 
 int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD));
 double point = SymbolInfoDouble(symbb,SYMBOL_POINT);
 
if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5)
{spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10);
point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;}
 
 if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1);
 if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1);
 
 
 return(0);
} 

////////////////////////////////////////////////////////////////////

콜 라인에서 하나의 기능을 더 사용한다는 점에 유의하십시오. 시간대 변환에 사용됩니다. 고문이 4명에서 쫓겨났기 때문에 일어난 일이다. 저는 케이스 서포터를 사용했습니다. 나중에 만일의 경우를 대비하여 나는 5개의 기간을 4개의 기간에 추가하고 추가 사용을 위해 기금에 추가했습니다.

 ///////////////////////////////////////////////////////////////////////////////////////////////  
    
   ENUM_TIMEFRAMES   periodd( int per)
  {
   switch (per)
     {
       case 0 : return ( PERIOD_CURRENT );
       case 1 : return ( PERIOD_M1 );
       case 5 : return ( PERIOD_M5 );
       case 15 : return ( PERIOD_M15 );
       case 30 : return ( PERIOD_M30 );
       case 60 : return ( PERIOD_H1 );
       case 240 : return ( PERIOD_H4 );
       case 1440 : return ( PERIOD_D1 );
       case 10080 : return ( PERIOD_W1 );
       case 43200 : return ( PERIOD_MN1 );
      
       case 2 : return ( PERIOD_M2 );
       case 3 : return ( PERIOD_M3 );
       case 4 : return ( PERIOD_M4 );      
       case 6 : return ( PERIOD_M6 );
       case 10 : return ( PERIOD_M10 );
       case 12 : return ( PERIOD_M12 );
       case 16385 : return ( PERIOD_H1 );
       case 16386 : return ( PERIOD_H2 );
       case 16387 : return ( PERIOD_H3 );
       case 16388 : return ( PERIOD_H4 );
       case 16390 : return ( PERIOD_H6 );
       case 16392 : return ( PERIOD_H8 );
       case 16396 : return ( PERIOD_H12 );
       case 16408 : return ( PERIOD_D1 );
       case 32769 : return ( PERIOD_W1 );
       case 49153 : return ( PERIOD_MN1 );      
       default : return ( PERIOD_CURRENT );
     }
  }  
  
  
   ///////////////////////////////////////////////////////////////////////////

그리고 그것이 내가 보는 것입니다.

 
Dimka-novitsek : timeframe 변수의 인쇄가 어떻게 보여야 하는지 알려주실 수 있나요? 디지털이 될 수 있습니까? 나는 숫자 1이 표시된다는 의미에서 하나를 봅니다.

음, 이 코드에서 조금 더 낮지만 결국

 EnumToString (timeframe), 
 
고맙습니다! 지금 바로 살펴볼게요
 
Dimka-novitsek : 감사합니다! 지금 바로 살펴볼게요

문제가 어디에 있는지 파악한 것 같습니다. 이제 글을 쓰겠습니다.

그림은 Expert Advisor가 М1, timeframe==1, period==140에 시작되었음을 보여줍니다. 바르게?

timeframe==1 값은 timeframe==M1일 가능성이 높습니다. 이 때, periodd(period) 레코드는 periodd( 140 )를 의미한다. 코드에 따르면 periodd( 140 ) 함수는 PERIOD_CURRENT 값을 반환해야 합니다. 즉, periodd( 140 )==M1임을 알 수 있다.
이것은 iMA 호출이 iMA(symbol, M1 , M1 ...)와 유사하다는 것을 의미합니다. iMA를 계산할 때 두 번째 인수의 값이 세 번째 인수의 값과 일치하는지(즉, 기간의 값이 평균화 기간과 일치하는지) 허용 가능한지 여부는 알 수 없지만 다음과 같은 내용이 나와 있습니다. 잘못된.

사유: