나는 정확히 언제 첫 번째 게시물에서 하나를 만들었는지 기억나지 않지만 (따라서 해당 오류 메시지가 없음) 솔직히 말해서 그 오류 메시지에 대해 너무 많이 신경 쓰지 않았기 때문에 몇 가지 코딩 스타일을 변경했습니다. 무엇이든 바꾸십시오. 그 후 나는 단순히 최종 오류를 위한 공간을 남기지 않기로 결정했기 때문에 한계를 결정할 때 "안전 점검"을 했습니다.
당신이 찾고자 하는 일일 트렌드 중 : 당신은 그것을 재정의해야 합니다(다시 작성해야 합니다). 현재 다음과 같이 작성되어 있습니다.
int GetDailyTrend (int res){
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
BarCount=Bars;
return (res);
}[/php]and you are calling it like this :
if (GetDailyTrend(1) && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;
[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.
_________________________
Redefine the GetDailyTrend() to something like this:
[php]int GetDailyTrend ()
{
int res = 0;
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
return (res);
}
And then use it this way :
[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;
_______________________________________
책과 코딩의 현재 : 나는 항상 코딩을 배우는 가장 좋은 방법은 예제와 작업 프로그램에서 있다고 믿었습니다. 믿거나 말거나 하지만 Microsoft 사람들은 배우기에 탁월합니다(코드를 균일하게 작성합니다(즉, 코드 작성 방법에 대한 확고한 팀 규칙이 있음을 의미). 매우 깨끗하고 최대한 효율적으로 만들려고 노력함) .
이미 해당 스레드에서 언급한 이유로 누구나 사용할 수 있는 엘리트 섹션에는 많은 예제와 작업 EA가 있습니다(이 항목을 추천할 수 있습니다( https://www.mql5.com/en/forum/180383 )). 다른 EA의 "프레임"으로 쉽게 사용할 수 있습니다. 그러나 또한 학습하고 작동하는 EA를 만드는 데 사용할 수 있는 다른 매우 유용한 EA가 많이 있습니다.
그리고 항상 한 가지를 기억하십시오. 코딩 언어는 바로 "언어"입니다. 즉, 다른 대화와 마찬가지로 간단한 대화입니다. 컴퓨터는 사람과 달리 사용자가 말한 내용에 대해 질문하지 않고 단순히 실행하기 때문에 컴퓨터에 무엇을 "말"하는지 주의하십시오. ) 그리고 얼마 후 PC와 "대화"하는 데 익숙해지면 모든 것이 훨씬 쉬워집니다.
누군가가 adxvma 표시기의 기본 논리가 무엇인지 궁금해하는 경우 표시기 자체만큼 유용할 수 있는 중간 단계가 있습니다. (이 단계 이후에 추가 단계가 있으므로 2개의 지표를 비교하지 마십시오. 그러나 이 단계가 특히 흥미로운 것 같습니다)
누구에게나 친숙한 것처럼 보인다면 대답은 "예"입니다. 그것은 전력 추세 지표인 것 같습니다(게시되고 게시되는 것이 아니라 "실제" 전력 추세 - 이것에 대해서는 100% 확신할 수 없습니다(내가 "실제"에서 본 것은 모두 그것), 그러나 지옥처럼 보이는 것은 확실합니다)
나는 정확히 언제 첫 번째 게시물에서 하나를 만들었는지 기억나지 않지만 (따라서 해당 오류 메시지가 없음) 솔직히 말해서 그 오류 메시지에 대해 너무 많이 신경 쓰지 않았기 때문에 몇 가지 코딩 스타일을 변경했습니다. 무엇이든 바꾸십시오. 그 후 나는 단순히 최종 오류를 위한 공간을 남기지 않기로 결정했기 때문에 한계를 결정할 때 "안전 점검"을 했습니다.
mladen: 얘들아 지표에서 한 가지 불합리한 점을 발견했다 (adx 부분 계산하는 첫 번째 단계) 나는 tradestation 지표를 모델로 사용했으며 생각하지 않고 상속받은 오류가있는 것 같습니다 . 이 오류가 수정됩니다. 결과도 이 방법이 더 좋습니다.
이 계산은 시간의 99%에서 훨씬 빠른 코드와 엘리트 섹션에 게시된 이들에 특정한 추가 기능을 사용하여 공개 섹션의 계산에 훨씬 더 가깝습니다(공개 섹션의 계산은 상당히 정확한 지표입니다). 따라서 이전 게시물에서 지표를 다운로드했다면 대신 사용하십시오. 또한 "일반" 버전에 옵션이 하나 더 추가되었습니다. MultiColorMode - false로 설정하면 adxvma를 표시하는 데 한 가지 색상만 사용됩니다(신호로 십자가를 확인하기 위해 두 개의 adxvma를 사용하려는 경우 유용)
// in order to make it right the "pdm=0; mdm=0;" must be added (it does not
// exist in original and that is an error, tradestation inherits values fom
// a previous loop and they must be zeroed before these calculations)
//
pdm=0; mdm=0;
if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;
pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;
mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;
TR=pdm+mdm;
if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; end
else begin
pdi=0;
mdi=0;
end;
pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;
mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;
DI_Diff=pdi-mdi;
if (DI_Diff<0) then DI_Diff= -DI_Diff;
DI_Sum=pdi+mdi;
DI_Factor=0;
if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;
out=((WeightDX-1)*out[1] + out)/WeightDX;
if (out>out[1]) then begin HHV=out; LLV=out[1]; end
else begin
HHV=out[1];
LLV=out;
end;
for j = 1 to Length-1 begin
if(out[j+1]>HHV)then HHV=out[j+1];
if(out[j+1]<LLV) then LLV=out[j+1];
end;
diff = HHV - LLV;
VI=0;
if (diff>0) then VI=(out-LLV)/diff;
ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;
ADXVMA = ma;
원본에 존재하지 않는 주석 및 코드 수정을 추가 했습니다. 일부 변수 이름은 오해의 소지가 있습니다. 모든 단계에서 EMA 계산이 없습니다. 이는 EMA가 아닌 중간 평활 단계에서 사용되는 평활 이동 평균입니다. 또한 기본 계산 논리가 ADX에서 나온 것이라 하더라도 실제로는 ADX가 아니지만 이 "하이브리드" 표시기의 경우 이름을 붙일 만큼 충분히 가깝습니다.
DTSC 메시지...
믈라덴,
Expers 폴더에 ......."Incorrect start position 10148 for Array Maximum function "이라는 메시지가 표시됩니다. 표시기는 완벽하게 작동하는 것 같습니다.
어떤 설명 부탁드립니다?
미리 감사드립니다.
발레오FX
어떤 지표인지 모른 채 일반적으로 다음과 같습니다. 한계가 결정된 위치를 찾아 다음과 같이 변경합니다.
이 경우 이 표현식의 두 번째 매개변수(Bars-1)는 제한이 chart 의 막대 수 보다 크지 않도록 합니다.
그러나 이미 눈치채셨듯이 "양호한" 오류입니다. 한 번만 발생하며(지표가 로드되거나 시간 프레임이 변경될 때) 다른 오류와 달리 표시기 계산을 중지하지 않으므로 모든 나머지 계산이 올바르게 수행되고 값이 올바르게 계산됩니다.
문안 인사
믈라덴
믈라덴,
Expers 폴더에 ......."Array Maximum 기능에 대한 잘못된 시작 위치 10148"이라는 메시지가 나타납니다. 하지만 표시기는 완벽하게 작동하는 것 같습니다.
어떤 설명 부탁드립니다?
미리 감사드립니다.감사해요...
발레오FX
어떤 지표인지 모른 채 일반적으로 다음과 같습니다. 한계가 결정된 위치를 찾아 다음과 같이 변경합니다.
이 경우 이 표현식의 두 번째 매개변수(Bars-1)는 제한이 차트의 막대 수보다 크지 않도록 합니다.
그러나 이미 눈치채셨듯이 "양호한" 오류입니다. 한 번만 발생하며(지표가 로드되거나 시간 프레임이 변경될 때) 다른 오류와 달리 표시기 계산을 중지하지 않으므로 모든 나머지 계산이 올바르게 수행되고 값이 올바르게 계산됩니다.
문안 인사
믈라덴========================
죄송합니다 Mladen, "제목" 창(DTOsc)에 표시기의 이름이 있었고 다시 반복할 생각을 하지 않았습니다. 그래도 설명해주셔서 감사합니다 - 바로 보도록 하겠습니다.
124행에서 다음을 찾았습니다.
limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,IndicatorFileName,"getBarsCount",0,0)*timeFrame/Period()));
말씀하신 내용과 다른데 어떻게 수정해야 하는지 자세히 설명해 주시겠습니까?
매우 감사.
발레오FX
메시지 부제에 신경을 안써서 죄송합니다
어쨌든, 이 게시물의 https://www.mql5.com/en/forum/general 을 사용하는 경우 해당 메시지가 표시됩니다.
반면에 이 게시물의 https://www.mql5.com/en/forum/general (최신 버전)을 사용하는 경우 해당 메시지를 받지 못할 것입니다.
나는 정확히 언제 첫 번째 게시물에서 하나를 만들었는지 기억나지 않지만 (따라서 해당 오류 메시지가 없음) 솔직히 말해서 그 오류 메시지에 대해 너무 많이 신경 쓰지 않았기 때문에 몇 가지 코딩 스타일을 변경했습니다. 무엇이든 바꾸십시오. 그 후 나는 단순히 최종 오류를 위한 공간을 남기지 않기로 결정했기 때문에 한계를 결정할 때 "안전 점검"을 했습니다.
__________________________________________________
추신: 해당 라인은 다중 시간 프레임 모드에서 작동합니다. 필요한 현재 시간 프레임의 정확한 막대 수를 다시 계산할 수 있도록 목표 시간 프레임에 몇 개의 막대가 변경되었는지 '요청'합니다. 따라서 해당 라인은 mtf 모드일 때만 유효합니다.
믈라덴,
저는 코딩이 처음입니다. 그리고 어렵다. 하지만 EA를 할 수 있는 CodersGuru의 책만 있으면 충분하지 않을 것입니다...
내 게시물 페이지 183 참조
Tradefx1
당신이 찾고자 하는 일일 트렌드 중 : 당신은 그것을 재정의해야 합니다(다시 작성해야 합니다). 현재 다음과 같이 작성되어 있습니다.
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
BarCount=Bars;
return (res);
}[/php]and you are calling it like this :
if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;
[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true .
_________________________
Redefine the GetDailyTrend() to something like this:
[php]int GetDailyTrend ()
{
int res = 0;
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
return (res);
}
And then use it this way :
[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;
_______________________________________
책과 코딩의 현재 : 나는 항상 코딩을 배우는 가장 좋은 방법은 예제와 작업 프로그램에서 있다고 믿었습니다. 믿거나 말거나 하지만 Microsoft 사람들은 배우기에 탁월합니다(코드를 균일하게 작성합니다(즉, 코드 작성 방법에 대한 확고한 팀 규칙이 있음을 의미). 매우 깨끗하고 최대한 효율적으로 만들려고 노력함) .
이미 해당 스레드에서 언급한 이유로 누구나 사용할 수 있는 엘리트 섹션에는 많은 예제와 작업 EA가 있습니다(이 항목을 추천할 수 있습니다( https://www.mql5.com/en/forum/180383 )). 다른 EA의 "프레임"으로 쉽게 사용할 수 있습니다. 그러나 또한 학습하고 작동하는 EA를 만드는 데 사용할 수 있는 다른 매우 유용한 EA가 많이 있습니다.
그리고 항상 한 가지를 기억하십시오. 코딩 언어는 바로 "언어"입니다. 즉, 다른 대화와 마찬가지로 간단한 대화입니다. 컴퓨터는 사람과 달리 사용자가 말한 내용에 대해 질문하지 않고 단순히 실행하기 때문에 컴퓨터에 무엇을 "말"하는지 주의하십시오. ) 그리고 얼마 후 PC와 "대화"하는 데 익숙해지면 모든 것이 훨씬 쉬워집니다.
만일을 대비하여 ...
누군가가 adxvma 표시기의 기본 논리가 무엇인지 궁금해하는 경우 표시기 자체만큼 유용할 수 있는 중간 단계가 있습니다. (이 단계 이후에 추가 단계가 있으므로 2개의 지표를 비교하지 마십시오. 그러나 이 단계가 특히 흥미로운 것 같습니다) 누구에게나 친숙한 것처럼 보인다면 대답은 "예"입니다. 그것은 전력 추세 지표인 것 같습니다(게시되고 게시되는 것이 아니라 "실제" 전력 추세 - 이것에 대해서는 100% 확신할 수 없습니다(내가 "실제"에서 본 것은 모두 그것), 그러나 지옥처럼 보이는 것은 확실합니다)발레오FX
메시지 부제에 신경을 안써서 죄송합니다
어쨌든, 이 게시물의 https://www.mql5.com/en/forum/general 을 사용하는 경우 해당 메시지가 표시됩니다.
반면에 이 게시물의 https://www.mql5.com/en/forum/general (최신 버전)을 사용하는 경우 해당 메시지를 받지 못할 것입니다.
나는 정확히 언제 첫 번째 게시물에서 하나를 만들었는지 기억나지 않지만 (따라서 해당 오류 메시지가 없음) 솔직히 말해서 그 오류 메시지에 대해 너무 많이 신경 쓰지 않았기 때문에 몇 가지 코딩 스타일을 변경했습니다. 무엇이든 바꾸십시오. 그 후 나는 단순히 최종 오류를 위한 공간을 남기지 않기로 결정했기 때문에 한계를 결정할 때 "안전 점검"을 했습니다.
__________________________________________________
추신: 해당 라인은 다중 시간 프레임 모드에서 작동합니다. 필요한 현재 시간 프레임의 정확한 막대 수를 다시 계산할 수 있도록 목표 시간 프레임에 몇 개의 막대가 변경되었는지 '요청'합니다. 따라서 해당 라인은 mtf 모드일 때만 유효합니다.==================================================== =======
설명 정말 감사합니다. 많은 감사를 드리며 코딩을 더 잘 이해하는 데 도움이됩니다.
2편은 바로 다운받겠습니다.
최고의 소원.
adxvma
믈라덴,
Tradestation 버전을 게시해 달라고 요청하는 것은 불가능합니까?
레이
얘들아 지표에서 한 가지 불합리한 점을 발견했다 (adx 부분 계산하는 첫 번째 단계) 나는 tradestation 지표를 모델로 사용했으며 생각하지 않고 상속받은 오류가있는 것 같습니다 . 이 오류가 수정됩니다. 결과도 이 방법이 더 좋습니다. 이 계산은 시간의 99%에서 훨씬 빠른 코드와 엘리트 섹션에 게시된 이들에 특정한 추가 기능을 사용하여 공개 섹션의 계산에 훨씬 더 가깝습니다(공개 섹션의 계산은 상당히 정확한 지표입니다). 따라서 이전 게시물에서 지표를 다운로드했다면 대신 사용하십시오. 또한 "일반" 버전에 옵션이 하나 더 추가되었습니다. MultiColorMode - false로 설정하면 adxvma를 표시하는 데 한 가지 색상만 사용됩니다(신호로 십자가를 확인하기 위해 두 개의 adxvma를 사용하려는 경우 유용)
문안 인사
믈라덴레이,
여기있어. 표시기:
Price (close),
length (14);
vars:
av (0);
av = ADXVMA(Price, length);
Plot1(av, "Rising");
Plot2(av, "Falling");
Plot3(av, "Neutral");
Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));
NoPlot(1);
NoPlot(2);
NoPlot(3); [/php]and the adxvma function
[php]inputs:
Price (NumericSeries),
Length (NumericSimple);
vars:
TR(0),
DI_Diff(0),
DI_Sum(0),
ma(0),
pdm(0),
mdm(0),
pdi(0),
mdi(0),
DI_Factor(0),
VI(0),
diff(0),
HHV(0),
LLV(0),
WeightDM(Length),
WeightDI(Length),
WeightDX(Length),
ChandeEMA(Length),
out(0),
j(0);
once ma=Price;
//
// in order to make it right the "pdm=0; mdm=0;" must be added (it does not
// exist in original and that is an error, tradestation inherits values fom
// a previous loop and they must be zeroed before these calculations)
//
pdm=0; mdm=0;
if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;
pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;
mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;
TR=pdm+mdm;
if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; endelse begin
pdi=0;
mdi=0;
end;
pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;
mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;
DI_Diff=pdi-mdi;
if (DI_Diff<0) then DI_Diff= -DI_Diff;
DI_Sum=pdi+mdi;
DI_Factor=0;
if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;
out=((WeightDX-1)*out[1] + out)/WeightDX;
if (out>out[1]) then begin HHV=out; LLV=out[1]; end
else begin
HHV=out[1];
LLV=out;
end;
for j = 1 to Length-1 begin
if(out[j+1]>HHV)then HHV=out[j+1];
if(out[j+1]<LLV) then LLV=out[j+1];
end;
diff = HHV - LLV;
VI=0;
if (diff>0) then VI=(out-LLV)/diff;
ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;
ADXVMA = ma;
원본에 존재하지 않는 주석 및 코드 수정을 추가 했습니다. 일부 변수 이름은 오해의 소지가 있습니다. 모든 단계에서 EMA 계산이 없습니다. 이는 EMA가 아닌 중간 평활 단계에서 사용되는 평활 이동 평균입니다. 또한 기본 계산 논리가 ADX에서 나온 것이라 하더라도 실제로는 ADX가 아니지만 이 "하이브리드" 표시기의 경우 이름을 붙일 만큼 충분히 가깝습니다.
문안 인사
믈라덴
믈라덴,
Tradestation 버전을 게시해 달라고 요청하는 것은 불가능합니까?
레이