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

 
novichok2018 :

모두 동일하게 작동 12분에 메시지를 표시합니다.

배열이 채워지는 함수의 시작 부분에 인쇄 삽입

 Print ( "Range = " , ArrayRange (NewsArr, 1 ));

두 번째 차원의 값 수를 표시합니다.

 
Ilya Prozumentov :

내가 말할 수 있는 모든 것에서 NomNews는 이미 999보다 큰 상태에서 While 루프에 들어갑니다. 그런 다음 이 문제를 일으키는 원인을 찾고 이 변수를 어딘가에서 재설정해야 합니다.

이를 확인하려면 루프의 맨 처음에 다음을 입력하십시오.

네, 11분에 1000장을 발행했습니다.

 
Alekseu Fedotov :

배열이 채워지는 함수의 시작 부분에 인쇄 삽입

두 번째 차원의 값 수를 표시합니다.

While 루프 의 시작 부분에 삽입됨   무한 범위 = 1000을 얻었습니다. 잘못된 위치에 넣었습니까?

그리고 이 숫자(또는 함수)는 무엇입니까? datetime TimeNewsFunck(int nomf)

{

문자열 s=NewsArr[0][nomf];

문자열 시간=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2 ),":",StringSubstr(s,14,4));

return((날짜 시간)(StringToTime(시간) + GMTplus*3600));

}

int nomf는 어디에서 값을 얻습니까? 나는 찾지 못했다.

 
novichok2018 :

While 루프 의 시작 부분에 삽입됨   무한 범위 = 1000을 얻었습니다. 잘못된 위치에 넣었습니까?

그리고 이 숫자(또는 함수)는 무엇입니까? datetime TimeNewsFunck(int nomf)

{

문자열 s=NewsArr[0][nomf];

문자열 시간=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2 ),":",StringSubstr(s,14,4));

return((날짜 시간)(StringToTime(시간) + GMTplus*3600));

}

int nomf는 어디에서 값을 얻습니까? 나는 찾지 못했다.

그리고 아무리 애를 써봐도 알 수 없는 그런 기능도 있다. 아마도 개가 거기에 묻혀있을 것입니다.

 bool CheckInvestingNews( int &pwr, datetime &mintime)
  {

   bool CheckNews= false ; pwr= 0 ; int maxPower= 0 ;
   if (MidleNews || HighNews)
     {
       if ( TimeCurrent ()-LastUpd>=Upd){ Print ( "Investing.com News Loading..." );UpdateNews();LastUpd= TimeCurrent (); Comment ( "" );}
       WindowRedraw ();
       //---Draw a line on the chart news--------------------------------------------
       if (DrawNewsLines)
        {
         for ( int i= 0 ;i<NomNews;i++)
           {
             string Name= StringSubstr ( "NS_" + TimeToStr (TimeNewsFunck(i), TIME_MINUTES )+ "_" +NewsArr[ 1 ][i]+ "_" +NewsArr[ 3 ][i], 0 , 63 );
             if (NewsArr[ 3 ][i]!= "" ) if ( ObjectFind (Name)== 0 ) continue ;
             if (OnlySymbolNews && StringFind (ValStr,NewsArr[ 1 ][i])< 0 ) continue ;
             if (TimeNewsFunck(i)< TimeCurrent () && Next) continue ;

             color clrf= clrNONE ;
             if (HighNews && StringFind (NewsArr[ 2 ][i], "High" )>= 0 )clrf=HighColor;
             if (MidleNews && StringFind (NewsArr[ 2 ][i], "Moderate" )>= 0 )clrf=MidleColor;
   //         if(LowNews && StringFind(NewsArr[2][i],"Low")>=0)clrf=LowColor;

             if (clrf== clrNONE ) continue ;

             if (NewsArr[ 3 ][i]!= "" )
              {
               ObjectCreate ( 0 ,Name, OBJ_VLINE , 0 ,TimeNewsFunck(i), 0 );
               ObjectSet (Name, OBJPROP_COLOR ,clrf);
               ObjectSet (Name, OBJPROP_STYLE ,LineStyle);
               ObjectSetInteger ( 0 ,Name, OBJPROP_WIDTH ,LineWidth);
               ObjectSetInteger ( 0 ,Name, OBJPROP_BACK , true );
              }
           }
        }
       //---------------event Processing------------------------------------
       int ii;
       for (ii= 0 ;ii<NomNews;ii++)
        {
         int power= 0 ;
         if (HighNews && StringFind (NewsArr[ 2 ][ii], "High" )>= 0 ){ power= 3 ; MinBefore=HighIndentBefore; MinAfter=HighIndentAfter; }
         if (MidleNews && StringFind (NewsArr[ 2 ][ii], "Moderate" )>= 0 ){ power= 2 ; MinBefore=MidleIndentBefore; MinAfter=MidleIndentAfter; }
 //        if(LowNews && StringFind(NewsArr[2][ii],"Low")>=0){ power=1; MinBefore=LowIndentBefore; MinAfter=LowIndentAfter; }
         if (NFPNews && StringFind (NewsArr[ 3 ][ii], "Nonfarm Payrolls" )>= 0 ){ power= 4 ; MinBefore=NFPIndentBefore; MinAfter=NFPIndentAfter; }
         if (power== 0 ) continue ;

         if ( TimeCurrent ()+MinBefore* 60 >TimeNewsFunck(ii) && TimeCurrent ()-MinAfter* 60 <TimeNewsFunck(ii) && (!OnlySymbolNews || (OnlySymbolNews && StringFind (ValStr,NewsArr[ 1 ][ii])>= 0 )))
           {
             if (power>maxPower){   maxPower=power; mintime=TimeNewsFunck(ii); }
              } else {
            CheckNews= false ;
           }
        }
       if (maxPower> 0 ){ CheckNews= true ; oppoz= true ; }
     }
   pwr=maxPower; 
   return (CheckNews);
  }
 
novichok2018 :

그리고 아무리 애를 써봐도 알 수 없는 그런 기능도 있다. 아마도 개가 거기에 묻혀있을 것입니까?

이것은 저자 자신만이 여기서 무슨 일이 일어나고 있는지 이해할 것입니다. OnTick()의 더 나은 코드 캐리

 
novichok2018 :

네, 11분에 1000장을 발행했습니다.

교체 시도

 while (! IsStopped ())

여기 이 줄에

 while (NomNews< 300 && ! IsStopped ())
 
Ilya Prozumentov :

수식에 추가 (( 2 *psd*usd)*(( 2 *psd*usd)-C))/(C- 1 )) .

지수: ^0.5는 *0.5가 아닙니다.

본 심볼과 마법에 대한 단일 거래가 없거나 수익 또는 손실 거래가 하나도 없거나 한 쌍(C=1)만 있는 경우 0으로 나눕니다.

공식 자체 전에 psd와 usd가 > 0이고 C !=1인지 확인해야 합니다.

수익성이 있는 것은 이익 > 1, 무익한 것 < 1, 이익 = 1인 것으로 간주됩니다. 즉, 1도 한 그룹 또는 다른 그룹의 어딘가에 포함되어야 합니다.

함수에서 먼저 기호와 마법과 일치하는 거래 번호를 선택한 다음 번호가 변경되었는지 확인하고 변경되었으면 zn을 다시 계산하고 그렇지 않으면 zn을 반환합니다(이 경우 zn을 재설정하지 말고 확인하십시오! = 인쇄가 필요하지 않은 경우 0)

올빼미는 변수 ww와 nn에 의존하기 때문에 작동을 멈춥니다. 함수가 시작되면 올빼미 알고리즘이 변경되고 파괴됩니다.

코드 서식 오류가 있으면 아무 것도 컴파일되지 않습니다.

고맙다는 말밖에 할 수 없습니다. 이것은 RuNet에서 그들이 도움을 준 유일한 곳입니다.

이제 인쇄는 다음 "Stop_Ma_v_5.1 EURUSD,M15: == Z-score equals = -nan(ind)"를 출력합니다. 그것이 무엇을 의미하는지 말하지 마십시오. 코드는 숫자를 제공해야 합니까?

코드 :

//+------------------------------------------------------------------+
//| Подсчёт z-вероятности. @axe44 Алексей Корольков                  |
//+------------------------------------------------------------------+
  
double Z()
  {
    zn= 0 ;           // z-число
    psd= 0 ;         // кол. положительных сделок
    usd= 0 ;         // количество отрицательных сделок 
    www= 0 ;         // боол переменная 
    nnn= 0 ;         // боол переменная
    kolichestvo= 0 ; // подсчёт закрытых ордеров открытых роботом
    C= 0 ;           // C = количество чередований между отрицательными и положительными сделками
    index= OrdersHistoryTotal (); 
       if ( OrdersHistoryTotal ()> 302 ) index= 301 ; // берём не более 301 сделки
     //if(index<30) return(0);                 // берём не менее 30
    count= OrdersHistoryTotal ();             // считаем от скольки 
    prom=count-index;                       // выделяем только последние сделки
     if (prom< 0 ) prom= 0 ;                     // исключаем ошибки
  
   for ( i=prom;i<=count;i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           { // далее магия
           pribul= OrderProfit (); 
           if (ww== 0 &&pribul> 1 ){C++;www= 1 ;nnn= 0 ;} // подсчитываем смену тенденции
           if (nn== 0 &&pribul< 1 ){C++;www= 0 ;nnn= 1 ;} // подсчитываем смену тенденции 
           if (pribul> 1 ){psd++;} //прибыльные сделки
           if (pribul< 1 ){usd++;} // убыточные сделки
           kolichestvo++;
           }
        }
     }
     /*
Величина Z = (A * (C — 0.5) — B)/   ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
          */ 
            
             if (kolichestvo> 30 &&psd> 0 &&usd> 0 &&C!= 1 )
            zn=(index*(C- 0.5 )- 2 *psd*usd)  /   pow ((( 2 *psd*usd*( 2 *psd*usd-C))/(C- 1 )), 0.5 );
      
     
     
   return (zn);
  }
감사해요
 
aleksandr bebishev :

Mql5 전문가 여러분, 헤지 계정 에서 포지션 청산 요청을 도와드립니다. 상황: BUY 위치 가 열려 있으므로 지정가 판매로 닫아야 합니다. 질문: 선택한 위치 가 닫히고 새로운 SELL 잠금 BUY가 열리지 않도록 올바르게 요청하는 방법??? 댓글로 코드를 작성해주세요! 미리 감사합니다!

동일한 상품에 의해 열린 다른 주문의 하나의 열린 주문에 의해 마감되지만 반대 방향입니다.

bool OrderCloseBy (
    정수         티켓 ,        // 닫을 주문 번호
    정수         반대 ,      // 반대 순서의 번호
    색깔       arrow_color    // 색깔
);

옵션

티켓

【인】 마감 중인 주문의 고유 일련 번호입니다.

반대

【인】 반대 순서의 고유한 일련 번호입니다.

arrow_color

【인】 차트에서 닫기 화살표의 색입니다. 매개변수가 없거나 해당 값이 CLR_NONE과 같으면 차트에 화살표가 표시되지 않습니다.

반환 값

성공하면 true를, 실패하면 false를 반환합니다. 오류 에 대한 정보를 얻으려면 GetLastError() 함수를 호출해야 합니다.

예시:

   if ( iRSI ( NULL ,0,14, PRICE_CLOSE ,0)>75)
{
      OrderCloseBy (order_id, 반대 ID);
      리턴 (0);
}

추신 여기 이 스레드에서는 MQL4만 분석됩니다.

 
Aliaksei Karalkou :

감사하다는 말밖에 드릴 수 없습니다. 이것은 RuNet에서 그들이 도움을 준 유일한 곳입니다.

이제 인쇄는 다음 "Stop_Ma_v_5.1 EURUSD,M15: == Z-score equals = -nan(ind)"를 출력합니다. 그것이 무엇을 의미하는지 말하지 마십시오. 코드는 숫자를 제공해야 합니까?

코드 :

감사해요
nan - NaN - 숫자가 아님 - 숫자가 아닙니다. Z-점수 계산에서 숫자를 정규화해 보십시오.
 
Aliaksei Karalkou :

동일한 상품에 의해 열린 다른 주문의 하나의 열린 주문에 의해 마감되지만 반대 방향입니다.

bool OrderCloseBy (
    정수         티켓 ,        // 닫을 주문 번호
    정수         반대 ,      // 반대 순서의 번호
    색깔       arrow_color    // 색깔
);

옵션

티켓

【인】 마감 중인 주문의 고유 일련 번호입니다.

반대

【인】 반대 순서의 고유한 일련 번호입니다.

arrow_color

【인】 차트에서 닫기 화살표의 색입니다. 매개변수가 없거나 해당 값이 CLR_NONE과 같으면 차트에 화살표가 표시되지 않습니다.

반환 값

성공하면 true를, 실패하면 false를 반환합니다. 오류 에 대한 정보를 얻으려면 GetLastError() 함수를 호출해야 합니다.

예시:

   if ( iRSI ( NULL ,0,14, PRICE_CLOSE ,0)>75)
{
      OrderCloseBy (order_id, 반대 ID);
      리턴 (0);
}

추신 여기 이 스레드에서는 MQL4만 분석됩니다.

아니요. 여기 이 스레드에서 mql4와 mal5에 대한 모든 질문을 분류합니다. 주요 작업이 알고리즘 및 코드에 대한 도움말로 설정되었을 뿐만 아니라 mql4에서 mql5로의 전환을 용이하게 하는 데 도움이 되었기 때문입니다.