차트에서 가장 오른쪽과 가장 왼쪽에 막대가 있는 인덱스를 정확히 보려면 다음과 같은 간단한 트릭을 사용하십시오.
모든 표시기에서 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단계).
이 간단하고 명확한 방법이 지표에서 색인의 방향을 빠르게 확인하는 데 도움이되기를 바랍니다.
모두에게 좋은 날입니다. 저는 프로그래머는 아니지만 내 친구 중 한 명이 Bill Williams Market Facilitation Index(BW MFI) 의 지표 코드에서 계산이 고전적인 공식에 따라 엄격하게 이루어지지 않는다고 주장합니다 . BW MFI = ( HIGH - LOW) / VOLUME 및 일부 기타 데이터 조정이 추가로 사용됩니다. 이는 본질적으로 오류이므로 표시기에 잘못된 데이터가 표시됩니다!
표시기에서 이 오류를 수정하는 방법을 알려주십시오(추가 데이터 수정 제거). BW MFI = (HIGH - LOW) / VOLUME ???? 공식에 따라 엄격하게 작동하는 표시기
안녕하세요, 표시기를 mql4에서 mql5로 변환 하려고 합니다. 사실, 빨간색 막대가 나타날 때 MFI에서 소리 알림이 필요합니다. 지금 이 사운드 코드를 새 mfi에 추가하려면 어떻게 해야 합니까?
이전 작업 버전의 예를 첨부했습니다.
어떻게 맞는지 말해줘, 이것이 하이켄 아시의 계산이다.
이것은 표준에서 잘라낸 것입니다.
{
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 ; // <<<
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 ; // <<<
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 이 이전 막대로 검색되어야 하는 경우 코드에서 다음 막대로 검색되는 이유는 무엇입니까?
아마도 이것은 정확하거나 내가 뭔가를 오해하고 있습니다.
차트에서 가장 오른쪽과 가장 왼쪽에 막대가 있는 인덱스를 정확히 보려면 다음과 같은 간단한 트릭을 사용하십시오.
모든 표시기에서 MetaEditor에서 OnCakculate() 내부의 첫 번째 작업에 중단점을 설정합니다(1단계):
기록 데이터에 대한 디버깅을 시작합니다. 중단점에서 디버깅이 시작되는 즉시 디버깅이 일시 중지됩니다. 그런 다음 "time[rates_total-1]" 및 "time[0]"(2단계 및 3단계)의 두 표현식을 관찰에 추가합니다. 이제 이 상황(여기서 time[] 배열에는 기본 인덱싱 방향 이 있고 ArrayAsSeries는 사용되지 않음)에서 time[rates_total-1] 요소가 차트의 맨 오른쪽 막대가 된다는 것이 즉시 분명합니다(4단계).
이 간단하고 명확한 방법이 지표에서 색인의 방향을 빠르게 확인하는 데 도움이되기를 바랍니다.
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에 대한 표시기를 만드는 방법을 알려주십시오 ???
//이것은 볼륨 기반 표시기입니다. 적절한 볼륨 입력을 사용하십시오.
이 코드가 무엇이며 MT5에 대한 표시기를 만드는 방법을 알려주십시오 ???
//이것은 볼륨 기반 표시기입니다. 적절한 볼륨 입력을 사용하십시오.
BW MFI 스쿼트 바, 3 버퍼(메모리가 제공되는 경우)