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

 
Forexman77 :

질문이 제거되지 않았습니다. 그래서, 먼저.

최대값이 발견되면 이를 따라 선이 그려집니다. 이 최대 라인과 현재 최소값 사이의 거리가 확인됩니다. "Rmax"를 초과하면 최대값이 발견되는 막대에 화살표가 배치됩니다. 화살표가 놓여 있지만 거기에는 없습니다. 명확성을 위해 BufferLow[i] 버퍼를 추가했습니다. 이 버퍼는 차이점을 보여주고 해당 데이터가 브라우저 창에 표시됩니다.

항상 그렇습니다. 겨울에는 눈이 안 와요) 제가 직접 했어요.

누군가가 그런 비슷한 생각으로 괴로워했다면 다음과 같은 코드가 있습니다.

 #property copyright "Kamil Gazizullin"
#property link        "forexman77@yandex.ru"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Magenta
#property indicator_color2 Aqua
#property indicator_color3 SlateBlue
#property indicator_color4 SlateBlue
#property indicator_color5 clrNONE
//--- input parameters
extern int        Period_= 10 ;
extern double diapazon  = 0.003 ;
//--- buffers
double Max[];
double Min[];
double MaxIndex[];
double MinIndex[];
double rAZNOST[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 5 );
   SetIndexBuffer ( 0 ,MaxIndex);
   SetIndexBuffer ( 1 ,MinIndex);
   SetIndexStyle( 0 , DRAW_ARROW );
   SetIndexArrow( 0 , 116 );
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW );
   SetIndexArrow( 1 , 116 );
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexBuffer ( 2 ,Max);
   SetIndexBuffer ( 3 ,Min);
   SetIndexBuffer ( 4 ,rAZNOST);
   IndicatorDigits( Digits + 1 );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars=IndicatorCounted(),limit, i,k,r,p,t,f;
     double minimum,maximum,Dmax,Dmin;
   if (counted_bars> 0 )
      counted_bars--;  
   limit= Bars -counted_bars;
   for (i= 0 ;i<limit;i++)
   {
      maximum=High[iHighest( NULL , 0 ,MODE_HIGH,Period_,i)];
      minimum=Low[iLowest( NULL , 0 ,MODE_LOW,Period_,i)];
      Max[i]=maximum;
      Min[i]=minimum;
   }
   for (i= 0 ;i<limit;i++)
   {
      k=iHighest( NULL , 0 ,MODE_HIGH,Period_,i);
      t=iLowest( NULL , 0 ,MODE_LOW,Period_,i);
      Dmax=Max[i]-Low[i];
      Dmin=High[i]-Min[i];
       if (Dmax > diapazon){p=k; for (r=p;r>=k;r--)MaxIndex[k]=Max[k];}
       if (Dmin > diapazon){p=t; for (f=p;f>=t;f--)MinIndex[t]=Min[t];}
       if (MaxIndex[i]==Max[i+ 1 ])MaxIndex[i]= 0 ;
       if (MinIndex[i]==Min[i+ 1 ])MinIndex[i]= 0 ;
      rAZNOST[i]=Max[i]-Min[i];
   }
   return ( 0 );
  }
 
Awwl :

빌트인 하이켄 아시는 솔직히 불완전한 것 같지만(745에서 나만 그런 걸까?), 어떻게 작동하는지 명확해졌습니다. 그리고 WmiFor가 어떻게 작동하는지 명확하지 않습니다!

Heiken Ashi 코드에서 촛대는 4개의 히스토그램 막대에서 그려집니다.

저것들. 버퍼 번호가 증가하면(0에서 3으로) 새 스트라이프가 이전 스트라이프 위에 그려집니다. 그리고 순서는 다음과 같습니다.

LowHigh - HighLow - 열기 - 닫기.

그리고 양초가 몸체와 꼬리가 있는 것처럼 보이려면 순서가 다음과 같아야 합니다.

최대(열기, 닫기)//굵은 색선// - 최소(열기, 닫기)//굵은 흰색 선// - 높음//가는 색선// - 낮음//가는 흰색 선//.

지표를 컴파일하고 차트에 올려 놓고 모든 문제를 확인합니다(그림 참조).

그러나 Heiken Ashi에서와 같은 이러한 방법에는 단점이 있습니다. 각 "촛불" 아래에서 흰색 깃털이 아래의 모든 것을 덮는 배경색으로 얻어집니다. 그리고 WmiFor는 완벽합니다! 문서화되지 않은 기능 ?

첫 번째 사진은 Heiken Ashi(별도 창에 배치), 두 번째 사진은 WmiFor, 배경은 선명도를 위해 밝은 녹색으로 설정했습니다.

부드러운 것과 둥근 것을 비교합니까? 차트창용인데 왜 하이켄을 별도의 창에 넣어두는데 거기에 그림자와 몸통이 있는 양초처럼 정확히 그려지나요? 그리고 이전 막대 위에 새 막대가 그려지지 않습니다. 버퍼 값이 변경되면 동일한 막대의 크기가 변경되고 새 막대가 그 위에 그려지지 않습니다.

MT4에서는 양초 형태로 그리는 방법이 없어서 히스토그램만 가능하고 버퍼값을 어떻게 계산하느냐는 본인의 몫입니다. 그건 그렇고 WmiFor는 히스토그램으로도 그립니다. 별도의 창에 넣고 결함에 감탄합시다)))

별도의 창에 있는 양초를 그림자가 있는 양초처럼 보이게 하려면 액셀러레이터와 같이 0을 기준으로 그려야 합니다. 또는 개체로 그리기, 수행 방법, 예를 들어 All_Stars 참조

 

모두에게 좋은 하루!

뇌가 부었다. 설명서에서 답을 찾지 못했지만 누군가가 발견했을 수 있습니다. 다음은 고문의 한 줄입니다(긍정적인 거래의 비율):

Print(OderPlushCount,"/",OderTotal,"=",DoubleToStr((OderPlushCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);

로그에 출력(예:

3/6=0.00=0 0 40

또한 솔루션이 1에서 오는 경우:

3/3=1.00=1 0 40

변수 BestOd= Double 유형의 OderPluseCount/OderTotal , 나머지는 int입니다.

즉, 1보다 작은 값이 발생하자마자 컴파일러는 자동으로 이를 0으로 바꿉니다... 상수의 마지막 두 표현식은 일반적으로 놀라운 결과를 제공합니다. 같은 것 같지만 그렇지는 않습니다)))

나는 다른 치환을 시도했다 - 1보다 큰 모든 것은 정확한 분수 부분 을 갖는다.

 
Igor_ :

모두에게 좋은 하루!

뇌가 부어있다. 설명서에서 답을 찾지 못했지만 누군가가 발견했을 수 있습니다. 다음은 Expert Advisor의 한 줄입니다(긍정적인 거래 비율):

Print(OderPlushCount,"/",OderTotal,"=",DoubleToStr((OderPlushCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);

로그에 출력(예:

3/6=0.00=0 0 40

또한 솔루션이 1에서 오는 경우:

3/3=1.00=1 0 40

변수 BestOd= Double 유형의 OderPluseCount/OderTotal , 나머지는 int입니다.

즉, 1보다 작은 값이 발생하자마자 컴파일러는 자동으로 이를 0으로 바꿉니다... 상수의 마지막 두 표현식은 일반적으로 놀라운 결과를 제공합니다. 같은 것 같지만 그렇지는 않습니다)))

나는 다른 대체를 시도했습니다 - 1보다 큰 모든 것은 올바른 분수 부분을 가지고 있습니다.

이 시도

DoubleToStr( (더블) (OderPluseCount/OderTotal),2)

 
AlexeyVik :

이 시도

DoubleToStr( (더블) (OderPluseCount/OderTotal),2)

도움이 되지 않습니다. 하지만 감사합니다)
 
Igor_ :
도움이 되지 않습니다. 하지만 감사합니다)
DoubleToStr( (더블) (OderPluseCount/(OderTotal*1.0)),2)
 
Vinin :
DoubleToStr( (더블) (OderPluseCount/(OderTotal*1.0)),2)

그것이 작동하는 방식입니다. 감사합니다. 샤머니즘처럼 보입니다)))

솔직히 디스플레이가 아니라 BestOd의 정확한 계산이 더 걱정입니다. 나도 수정해야 했다.

다음과 같이 했습니다.

BestOd=(OderPluseCount/(OderTotal*1.0));

이에 대한 설명이 있습니까? 결국 인쇄가 아니었다면 그런 오류를 잡기가 매우 어려웠을 것입니다. 어떤 경우에 그녀가 나갈 수 있습니까?

 
Igor_ :

그것이 작동하는 방식입니다. 감사합니다. 샤머니즘처럼 보입니다)))

솔직히 디스플레이가 아니라 BestOd의 정확한 계산이 더 걱정입니다. 나도 수정해야 했다.

다음과 같이 했습니다.

BestOd=(OderPluseCount/(OderTotal*1.0));

이에 대한 설명이 있습니까? 결국 인쇄가 아니었다면 그런 오류를 잡기가 매우 어려웠을 것입니다. 어떤 경우에 그녀가 나갈 수 있습니까?

정수 값을 사용하는 모든 작업은 정수가 됩니다.
 

참고서의 " Type Casting " 섹션에서 답을 찾았습니다.

Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме: 

그러나 이중 유형은 이 체계에서 가장 오래된 유형입니다. 그리고 나는 둘 다 int를 가지고있었습니다. 따라서 결과는 정수입니다. 더 높은 유형의 상수(double, float)를 도입하고 모든 int로 변환합니다.

세기를 산다 - 세기를 배우고 문서를 살펴보십시오)))

 
안녕하세요! 질문이 있습니다.
열린 위치 를 반복하고 수정하는 Expert Advisor에서와 같이 다음 단계에서 수정된 주문을 다시 수정하지 않도록 하십시오. 그들은 어떻게 "기름부음"받아야합니까?
아무것도 생각나지 않습니다.
나는 매우 감사하게 될 것입니다.