[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 318

 
gyfto :

아니면 단순화하자

여기서 Δ는 차이를 의미합니다. Close[i]는 Open[i]이고 ^는 지수 기호입니다. const - 주어진 표현식의 상수, 즉 i_sizeOfSequentialCorrectionBar * pt, 표준 수학 표기법은 아무 것도 발명하지 않았습니다. 2*bVar-1은 ±1 과 유사합니다. 여기서 bVar는 모든 bool 변수입니다. 그리고 표현식 2*bVar-1은 0과 1이 아니라 -1과 +1의 값을 취합니다. ≥는 표준 수학 표기법이기도 한 MQL4 >=입니다. 단계 - 단계, 즉. cnt++에서 보폭은 1이고 cnt=0에서 보폭은 -cnt입니다. 표기법에서 명확하지 않은 것은 무엇입니까?

gyfto , 설명 감사합니다. 그러나 순간이 있습니다. 어쨌든 식의 출력 부호를 한 번만 변경해도 문제가 해결되지 않습니다. 결국 제로화가 발생하는 순간 시가와 종가를 "교환"해야 합니다. 저것들. 여기서 내가 이해하는 바에 따르면 특별한 보편성은 달성될 수 없습니다. 이것이 바로 내가 생각했던 것입니다.

Vadim 은 얼마 전에 함수 루프에 넣으면 속도 면에서 코드 실행 속도가 몇 배나 느려진다고 썼습니다. 이것이 함수가 루프의 각 반복에서 값을 계산하는 경우에만 적용되는지 아니면 일반적으로 어떤 것에 적용되는지 궁금합니다. 예를 들어, 아직 Expert Advisor를 추가하지 않았지만 gyfto가 다음과 같이 단순화하려고 했던 기능을 다시 작성했습니다.

 //+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType( int directionMA)
{
   int cntUp,                                                                             // Счётчик идущих друг за другом свечей с..
       cntDn;                                                                                 // .. требуемыми признаками
       
   for ( int i=i_AnyBarsToHistory; i>= 1 ; i--)
   {
       if (directionMA == CROSS_UP)
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntDn++;                                                                     // .. прибавим 1 к счётчику

         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0 ;                                                                   // .. счётчик обнуляем

         if (cntDn == i_sequentBarsСount)                                                   // Если cnt баров в подряд медвежьи..
             return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                         // .. Выходим из функции
      }

       if (directionMA == CROSS_DN)
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntUp++;                                                                     // .. прибавим 1 к счётчику

         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0 ;                                                                   // .. счётчик обнуляем
     
         if (cntUp == i_sequentBarsСount)                                                   // Если cnt баров в подряд бычьи..
             return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                         // .. Выходим из функции
      }
   }
}

카운터 cntUp  cntDn 을 다르게 만들었습니다. 계산된 막대의 주기에 계산이 있는 경우 directionMA즉시 하나의 값을 가질 수 있고 다른 값을 가질 수 있습니다. 그리고 카운터는 한 값을 합산하고 다른 값을 계속 합산할 수 있습니다. 그리고 변수가 하나만 있는 경우 한 속성 의 막대 수가 다른 속성의 막대 카운터에 추가됩니다.

  여기에 조언이 필요합니다. 어떻게 든 다르게 작성하는 것이 더 낫습니까?

문제는 그 전문가가 크지 않다는 것입니다. 자동차와 이 기능이 있습니다. 그리고 긴 대신 올빼미가 팔고 그 반대도 마찬가지입니다. 나는 이것이 어떻게 될 수 있는지 이해하려고 노력하고 있습니다. 여기에 일종의 잼이 있는 것은 아닐까?

 

안녕하세요, 저는 mql4에 익숙해지기 시작했고 수익성이 없는 주문을 잠그는 스크립트를 작성했습니다. 한 가지 문제를 해결할 수 없습니다. 스크립트는 손실이 -10인 모든 주문을 잠그지만 가격이 -10 미만인 한 계속 잠급니다. 잠금이 한 번 발생하도록 하는 방법은 무엇입니까? 저것들. 주문이 -10의 손실에 도달하면 스크립트가 차단한 다음 손실이 계속 증가하더라도 이 주문을 건드리지 않습니다.

외부 이중 정지 손실 = 150;

extern 더블 이익=-10;

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

//----
무효 시작()
{
이중 이익 = 이익;
이중 로트=0;
for(int i=0;i<OrdersTotal();i++)
{
if(! OrderSelect (i,SELECT_BY_POS))
계속하다;

if(OrderType()==OP_BUY && OrderProfit()<이익*포인트)
랏+=OrderLots();
if(OrderType()==OP_SELL && OrderProfit()<이익*포인트)
많은-=OrderLots();


}
if(많은>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(많은 <0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);
//----
리턴(0);
}

 

안녕하세요.

코드를 봐주세요. 트랜잭션의 평균 시간을 계산하고 싶습니다( 보류 주문으로 거래)

 //+------------------------------------------------------------------+
//| Расчет среднего времени сделки            |
//+------------------------------------------------------------------+
double Sredneevremyasdelky(){
datetime Tsd= 0 ; // общее время сделок
datetime Tsvsd= 0 ; // среднее время сделки 
int n= 0 ;
int orders=HistoryTotal();   // history orders total

         for (   int i=orders- 1 ;i>= 0 ;i--)
                  {
                 if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== false ) 
                   { 
                         Print ( "Ошибка в истории!" ); 
                         break ;
                   }
                 if (OrderSymbol()!= Symbol () || OrderType()>OP_SELL) 
                   continue ;
                  n++;
                 Tsd=Tsd+(OrderCloseTime()-OrderOpenTime());
                   }
            if (n>0) Tsvsd=Tsd/n/ 60 ;


            return (Tsvsd);
         }

주문이 시작된 순간부터 마감까지.

 
Stells :

안녕하세요.

코드를 봐주세요 트랜잭션의 평균 시간을 계산하고 싶습니다(보류 주문으로 거래)

주문이 시작된 순간부터 마감까지.


그리고 사이클의 평균 시간을 계산하는 이유는 무엇입니까? 추가 작업. 주기 후에 나중에 더 나을 수도 있습니다. 예, 계산 기간을 설정하는 것이 좋습니다.
 
Vinin :

그리고 사이클의 평균 시간을 계산하는 이유는 무엇입니까? 추가 작업. 주기 후에 나중에 더 나을 수도 있습니다. 예, 계산 기간을 설정하는 것이 좋습니다.
주기에서 제거되었습니다. 계산 기간은 어떻게 되나요?
 
Stells :
주기에서 제거되었습니다. 계산 기간은 어떻게 되나요?

예를 들어 외부 변수
 

이해했어 어떻게든 데이트를 해야겠어

이게 무슨 기능이야

 
Stells :

이해했어 어떻게든 데이트를 해야겠어

이게 무슨 기능이야


extern이 있으면 왜 복잡합니까?
 

호즈 처럼   나는 자유로울 것이다, 나는 갈 것이다, 그렇게 하라.

최적화에 대해 질문이 있습니다. EMA 알고리즘 이해하기. 아시다시피, 실제로 시간을 보내는 재귀가 있습니다. 원래 코드에 따르면:

...

https://www.mql5.com/ru/forum/144691 로 이동했습니다.

 
gyfto :

호즈 처럼   나는 자유로울 것이다, 나는 갈 것이다, 그렇게 하라.

최적화에 대해 질문이 있습니다. EMA 알고리즘 이해하기. 아시다시피, 실제로 시간을 보내는 재귀가 있습니다. 원래 코드 에 따르면:

EMA가 생성하는 가중치를 처리하기 위해 특별히 matcad를 사용했습니다.

그건 그렇고, 이제 EMA를 사용하는 지표(지수라기보다 멱법칙이라고 하는 것이 더 정확할 것입니다)가 14와 같은 기간을 사용하는 이유가 명확해졌습니다. 마지막 가중치가 너무 높은데 다음 가중치가 이전 가중치보다 더 중요하다면 파워 함수를 그냥 감쌀 수 있다면? 재귀 종료 후의 최종 가중치가 공식으로 도출될 수 있다면 왜 재귀를 사용하는지 더 이상 묻지 않습니다(F(n,x) 및 y(n,x) 참조).


아마도 자신의 스레드를 열어야 할 것입니다. "초보자를 위한 브랜치"가 필요한 이유