돕다!!!! 표시기를 MT4에서 MT5로 변환합니다.(무료) - 페이지 5

 

안녕하세요, 표시기를 mql4에서 mql5로 변환 하려고 합니다. 사실, 빨간색 막대가 나타날 때 MFI에서 소리 알림이 필요합니다. 지금 이 사운드 코드를 새 mfi에 추가하려면 어떻게 해야 합니까?

이전 작업 버전의 예를 첨부했습니다.

파일:
 

어떻게 맞는지 말해줘, 이것이 하이켄 아시의 계산이다.

이것은 표준에서 잘라낸 것입니다.

for (i=pos /*pos=1*/ ; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i - 1 ]+ExtCloseBuffer0[i - 1 ])/ 2 ; // <<<
   haClose=( Open [i]+ High [i]+ Low [i]+ Close [i])/ 4 ;
   haHigh= MathMax ( High [i], MathMax (haOpen,haClose));
   haLow= MathMin ( Low [i], MathMin (haOpen,haClose));

질문이 생깁니다. Open 이 이전 막대로 검색되어야 하는 경우 코드의 다음 막대에서 검색되는 이유는 무엇입니까?

아마도 이것은 정확하거나 내가 뭔가를 오해하고 있습니다.

haOpen=(ExtOpenBuffer0[i + 1 ]+ExtCloseBuffer0[i + 1 ])/ 2 ;
고맙습니다!
 
Vitaly Muzichenko :

어떻게 맞는지 말해줘, 이것이 하이켄 아시의 계산이다.

이것은 표준에서 잘라낸 것입니다.

for (i=pos /*pos=1*/ ; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i - 1 ]+ExtCloseBuffer0[i - 1 ])/ 2 ; // <<<
   haClose=( Open [i]+ High [i]+ Low [i]+ Close [i])/ 4 ;
   haHigh= MathMax ( High [i], MathMax (haOpen,haClose));
   haLow= MathMin ( Low [i], MathMin (haOpen,haClose));

질문이 생깁니다. Open 이 이전 막대로 검색되어야 하는 경우 코드의 다음 막대에서 검색되는 이유는 무엇입니까?

아마도 이것은 정확하거나 내가 뭔가를 오해하고 있습니다.

haOpen=(ExtOpenBuffer0[i + 1 ]+ExtCloseBuffer0[i + 1 ])/ 2 ;
고맙습니다!
mql5에서 막대 인덱싱의 방향은 기본적으로 만들어집니다. 따라서 [i-1]은 오른쪽의 첫 번째 막대일 뿐입니다.
 
Vitaly Muzichenko :

어떻게 맞는지 말해줘, 이것이 하이켄 아시의 계산이다.

이것은 표준에서 잘라낸 것입니다.

for (i=pos /*pos=1*/ ; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i - 1 ]+ExtCloseBuffer0[i - 1 ])/ 2 ; // <<<
   haClose=( Open [i]+ High [i]+ Low [i]+ Close [i])/ 4 ;
   haHigh= MathMax ( High [i], MathMax (haOpen,haClose));
   haLow= MathMin ( Low [i], MathMin (haOpen,haClose));

질문이 발생합니다. Open 이 이전 막대로 검색되어야 하는 경우 코드에서 다음 막대로 검색되는 이유는 무엇입니까?

아마도 이것은 정확하거나 내가 뭔가를 오해하고 있습니다.

haOpen=(ExtOpenBuffer0[i + 1 ]+ExtCloseBuffer0[i + 1 ])/ 2 ;
고맙습니다!

차트에서 가장 오른쪽과 가장 왼쪽에 막대가 있는 인덱스를 정확히 보려면 다음과 같은 간단한 트릭을 사용하십시오.

모든 표시기에서 MetaEditor에서 OnCakculate() 내부의 첫 번째 작업에 중단점을 설정합니다(1단계):

인덱싱 확인

기록 데이터에 대한 디버깅을 시작합니다. 중단점에서 디버깅이 시작되는 즉시 디버깅이 일시 중지됩니다. 그런 다음 "time[rates_total-1]" 및 "time[0]"(2단계 및 3단계)의 두 표현식을 관찰에 추가합니다. 이제 이 상황(여기서 time[] 배열에는 기본 인덱싱 방향 이 있고 ArrayAsSeries는 사용되지 않음)에서 time[rates_total-1] 요소가 차트의 맨 오른쪽 막대가 된다는 것이 즉시 분명합니다(4단계).

이 간단하고 명확한 방법이 지표에서 색인의 방향을 빠르게 확인하는 데 도움이되기를 바랍니다.

 
Alexey Viktorov :
mql5에서 막대 인덱싱의 방향은 기본적으로 만들어집니다. 따라서 [i-1]은 오른쪽의 첫 번째 막대일 뿐입니다.

대략 이해하고 있으므로 ArraySetAsSeries 사용을 잊지 않습니다.

문제는 mql4와 mql5의 코드가 동일한 "i - 1" 계산을 사용한다는 것입니다. 공식이 미래가 아닌 이전 막대에 대해 말하는 경우 빼기 이유는 무엇입니까?

블라디미르 카르푸토프 :

차트에서 가장 오른쪽과 가장 왼쪽에 막대가 있는 인덱스를 정확히 보려면 다음과 같은 간단한 트릭을 사용하십시오.

모든 표시기에서 MetaEditor에서 OnCakculate() 내부의 첫 번째 작업에 중단점을 설정합니다(1단계):

기록 데이터에 대한 디버깅을 시작합니다. 중단점에서 디버깅이 시작되는 즉시 디버깅이 일시 중지됩니다. 그런 다음 "time[rates_total-1]" 및 "time[0]"(2단계 및 3단계)의 두 표현식을 관찰에 추가합니다. 이제 이 상황(여기서 time[] 배열에는 기본 인덱싱 방향이 있고 ArrayAsSeries는 사용되지 않음)에서 time[rates_total-1] 요소가 차트의 가장 오른쪽 막대가 된다는 것이 즉시 명확해졌습니다(4단계).

이 간단하고 명확한 방법이 지표에서 색인의 방향을 빠르게 확인하는 데 도움이되기를 바랍니다.

고마워, 그건 몰랐어.

계산의 정확성에 대한 가정이 있습니까?

 
안녕하세요.
CCI ARROWS 표시기에 경고를 표시해야 합니다.
화살표가 나타난 직후 신호가 필요합니다.
MT5
 

모두 화이팅!!! MT5 땀 표시기 리메이크 시작했는데 귀찮아요, iTime 기능 으로 이해가 안되네요, 뭔가 작동이 안되는데, 누가 표시기를 작동 상태로 끝낼 수 있을까요????

표시기는 MQL5\Files\evolution-dvoid\ 폴더에 있는 파일을 읽습니다.

다운로드 후 .csv로 이름 변경

미리 감사드립니다.

파일:
 

모두에게 좋은 날입니다. 저는 프로그래머는 아니지만 내 친구 중 한 명이 Bill Williams Market Facilitation Index(BW MFI) 의 지표 코드에서 계산이 고전적인 공식에 따라 엄격하게 이루어지지 않는다고 주장합니다 . BW MFI = ( HIGH - LOW) / VOLUME 및 일부 기타 데이터 조정이 추가로 사용됩니다. 이는 본질적으로 오류이므로 표시기에 잘못된 데이터가 표시됩니다!

표시기에서 이 오류를 수정하는 방법을 알려주십시오(추가 데이터 수정 제거).
BW MFI = (HIGH - LOW) / VOLUME ???? 공식에 따라 엄격하게 작동하는 표시기


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

//| MarketFacilitationIndex.mq5 |

//| Copyright 2009, MetaQuotes Software Corp. |

//| http://www.mql5.com |

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

#property copyright "2009, MetaQuotes Software Corp."

#속성 링크 "http://www.mql5.com"

//--- 표시기 설정

#속성 표시기_분리_창

#속성 표시기_버퍼 2

#property indicator_plots 1

#속성 표시기_유형1 DRAW_COLOR_HISTOGRAM

#property indicator_color1 라임, 새들브라운, 블루, 핑크

#속성 표시기_너비1 2

//--- 입력 매개변수

ENUM_APPLIED_VOLUME 입력 InpVolumeType=VOLUME_TICK; // 볼륨

//---- 버퍼

이중 ExtMFIBuffer[];

더블ExtColorBuffer[];

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

//| 사용자 지정 표시기 초기화 기능 |

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

무효 OnInit()

{

//---- 표시기

SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA);

SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);

//--- DataWindow의 이름

IndicatorSetString(INDICATOR_SHORTNAME,"BWMFI");

//--- 정확도 설정

IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//----

}

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

//| |

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

void CalculateMFI(const int start, const int Rates_total,

const 더블 & 하이[],

const 더블 & 로우[],

상수 긴 볼륨[])

{

정수 i = 시작;

부울 mfi_up=true,vol_up=true;

//--- mfi_up 및 vol_up의 첫 번째 값 계산

if(i>0)

{

정수 = 나;

동안(n>0)

{

if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; 부서지다; }

if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=거짓; 부서지다; }

//--- mfi 값이 같으면 계속

N--;

}

n=나;

동안(n>0)

{

if(볼륨[n]>볼륨[n-1]) { 볼륨업=참; 부서지다; }

if(볼륨[n]<볼륨[n-1]) { 볼륨업=거짓; 부서지다; }

//--- 실제 볼륨이 동일한 경우 계속

N--;

}

}

//---

동안(i<rates_total && !IsStopped())

{

if(볼륨[i]==0)

{

if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];

그렇지 않으면 ExtMFIBuffer[i]=0;

}

else ExtMFIBuffer[i]=(높음[i]-낮음[i])/_포인트/볼륨[i];

//--- 변경 사항 계산

if(i>0)

{

if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;

if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=거짓;

if(볼륨[i]>볼륨[i-1]) vol_up=true;

if(볼륨[i]<볼륨[i-1]) vol_up=false;

}

//--- 색상 설정

if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;

if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;

if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;

if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;

나는 ++;

}

}

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

//| 사용자 지정 표시기 반복 기능 |

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

int OnCalculate(const int rate_total,

const int prev_calculated,

const 날짜/시간 및 시간[],

const 이중 및 열기[],

const 더블 & 하이[],

const 더블 & 로우[],

const 이중 및 닫기[],

const long &tick_volume[],

const 긴 볼륨[],

const int &spread[])

{

//---

정수 시작 = 0;

//---

if(start<prev_calculated) start=prev_calculated-1;

//--- 틱 또는 실제 볼륨으로 계산

if(InpVolumeType==VOLUME_TICK)

CalculateMFI(start,rate_total,high,low,tick_volume);

또 다른

CalculateMFI(start,rates_total,high,low,volume);

//--- 마지막 mfi 값을 정규화

if(rate_total>1)

{

datetime ctm=TimeTradeServer(),lasttm=시간[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds());

if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)

{

이중 수정_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);

ExtMFIBuffer[rate_total-1]*=수정_koef;

}

}

//---

반환(요금 합계);

}

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

 

이 코드가 무엇이며 MT5에 대한 표시기를 만드는 방법을 알려주십시오 ???


//이것은 볼륨 기반 표시기입니다. 적절한 볼륨 입력을 사용하십시오.


//스쿼트 바는 매수와 매도는 많지만 가격 변동은 거의 없는 황소와 곰의 싸움입니다.
//스쿼트 바는 추세가 끝날 때 85%의 확률로 상위 3개 또는 하위 3개 바 중 하나가 됩니다.
//모든 트렌드가 스쿼트로 끝나는 반면 모든 스쿼트는 트렌드의 끝이 아닙니다.

study("윌리엄스 스쿼트 바", shorttitle="스쿼트 바", 오버레이=true)
r_hl=roc((고-저)/볼륨,1)
r_v=roc(볼륨,1)
squat_f=(r_hl < 0) 및 (r_v > 0)
barcolor(squat_f ? 파란색 : na)
 
Olexiy Polyakov :

이 코드가 무엇이며 MT5에 대한 표시기를 만드는 방법을 알려주십시오 ???


//이것은 볼륨 기반 표시기입니다. 적절한 볼륨 입력을 사용하십시오.


//스쿼트 바는 매수와 매도는 많지만 가격 변동은 거의 없는 황소와 곰의 싸움입니다.
//스쿼트 바는 추세가 끝날 때 85%의 확률로 상위 3개 또는 하위 3개 바 중 하나가 됩니다.
//모든 트렌드가 스쿼트로 끝나는 반면 모든 스쿼트는 트렌드의 끝이 아닙니다.

study("윌리엄스 스쿼트 바", shorttitle="스쿼트 바", 오버레이=true)
r_hl=roc((고-저)/볼륨,1)
r_v=roc(볼륨,1)
squat_f=(r_hl < 0) 및 (r_v > 0)
barcolor(squat_f ? 파란색 : na)

BW MFI 스쿼트 바, 3 버퍼(메모리가 제공되는 경우)