MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1730

 
anrei2002 # :

관련 없는 화살표가 바로 사라졌어요!!!

나는 당신이 이해하기를 바라지 않습니다. 비슷한 문제를 가진 고객이 있었고 1 년 동안 그에게이 순간을 설명 할 수 없었습니다. 다른 지표가 있었지만 엿보기도있었습니다. 그도 바보는 아닌 것 같지만, 이윤에 대한 갈증이 정말 논리와 생각을 꺾는 것 같다.. 돈을 많이 흘렸을 때 결국 모든 것을 이해했다. 현재 시간에 미래에서 온 막대가 없기 때문에 왼쪽 화살표가 나타납니다. 그래서 인디케이터는 어찌할 바를 모르고 이 화살을 맞지 않는 곳에 던집니다. 다시 장전하면 오른쪽 화살표만 남게 되고, 그러나 역사에서 .. 나는 그러한 지표를 많이 보았습니다.

 
MakarFX # :
당신이 이미 한 일을 보여주세요.
#속성 설명 "스토캐스틱 오실레이터"
#속성엄격

#속성 표시기_분리_창
#속성 표시기_최소 0
#속성 표시기_최대 100
#속성 표시기_버퍼 2
#property indicator_color1 LightSeaGreen
#property indicator_color2 빨간색
#속성 표시기_레벨1 20.0
# 속성 표시기_레벨2 80.0
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- 입력 매개변수
입력 int InpKPeriod=5; // K 기간
입력 int InpDPeriod=3; // D 기간
입력 int InpSlowing=3; // 느려짐

입력 문자열 PARA_Ref = "$USDX";
입력 문자열 PARA = "ETHUSD";


//--- 버퍼
이중 ExtMainBuffer[];
이중 ExtSignalBuffer[];
더블ExtHighesBuffer[];
이중 ExtLowesBuffer[];

이중 cl[];
더블하이[];
이중 lo[];



//---
int draw_begin1=0;
int draw_begin2=0;
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
int OnInit(무효)
{
문자열 short_name;
//--- 2개의 추가 버퍼가 계산에 사용됩니다.
표시기버퍼(4);
SetIndexBuffer(2, ExtHighesBuffer);
SetIndexBuffer(3, ExtLowesBuffer);
//--- 표시줄
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, ExtMainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1, ExtSignalBuffer);
//--- DataWindow의 이름 및 표시기 하위 창 레이블
short_name="Stochastic_Mult_1("+IntegerToString(InpKPeriod)+","+IntegerToString(InpDPeriod)+","+IntegerToString(InpSlowing)+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1, "신호");
//---
draw_begin1=InpKPeriod+InpSlowing;
draw_begin2=draw_begin1+InpDP 기간;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//--- 초기화 완료
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- --------------------+
//| 확률적 발진기 |
//+----------------------------------------------- --------------------+
int OnCalculate(const int rate_total,
const int prev_calculated,
const 날짜/시간 및 시간[],
const 이중 및 열기[],
const 더블 & 하이[],
const 더블 & 로우[],
const 이중 및 닫기[],
const long &tick_volume[],
const 긴 볼륨[],
const int &spread[])
{
int i,k,pos,n;

//--- 막대 개수 확인
if(rates_total<=InpKPeriod+InpDPPeriod+InpSlowing)
리턴(0);
//--- 0에서 Rates_total까지 계산
ArraySetAsSeries(ExtMainBuffer, false);
ArraySetAsSeries(ExtSignalBuffer, false);
ArraySetAsSeries(ExtHighesBuffer, false);
ArraySetAsSeries(ExtLowesBuffer, false);
ArraySetAsSeries(낮음,거짓);
ArraySetAsSeries(높음,거짓);
ArraySetAsSeries(닫기,거짓);

//---
pos=InpKPeriod-1;
if(pos+1<prev_calculated)
pos=prev_calculated-2;
또 다른
{
for(i=0; i<pos; i++)
{
ExtLowesBuffer[i]=0.0;
ExtHighesBuffer[i]=0.0;
}
}
//--- HighesBuffer[] 및 ExtHighesBuffer[] 계산
for(i=pos; i<rates_total && !IsStopped(); i++)
{
이중 admin=1000000.0;
이중 dmax=-1000000.0;
for(k=i-InpKPeriod+1; k<=i; k++)
{
n = 아이크;
if(dmin>iLow(PARA,0,n)* iLow(PARA_Ref,0,n)) // 원본: if(dmin>low[k])
dmin=iLow(PARA,0,n)* iLow(PARA_Ref,0,n); // 원본: dmin=low[k];
if(dmax<iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n)) // 원본: if(dmax<high[k])
dmax=iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n); // 원본: dmax=high[k];

}
ExtLowesBuffer[i]=dmin;
ExtHighesBuffer[i]=dmax;
}
//--- %클라인
pos=InpKPeriod-1+InpSlowing-1;
if(pos+1<prev_calculated)
pos=prev_calculated-2;
또 다른
{
for(i=0; i<pos; i++)
ExtMainBuffer[i]=0.0;
}
//--- 메인 사이클
for(i=pos; i<rates_total && !IsStopped(); i++)
{
더블섬로우=0.0;
이중 합계=0.0;
for(k=(i-InpSlowing+1); k<=i; k++)
{
n = 아이크;
sumlow +=((iClose(PARA,0,n) * iClose(PARA_Ref,0,n))-ExtLowesBuffer[k]); // 원본: sumlow +=(close[k]-ExtLowesBuffer[k]);
sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
}
if(sumhigh==0.0)
ExtMainBuffer[i]=100.0;
또 다른
ExtMainBuffer[i]=sumlow/sumhigh*100.0;
}
//--- 신호
pos=InpDP 기간-1;
if(pos+1<prev_calculated)
pos=prev_calculated-2;
또 다른
{
for(i=0; i<pos; i++)
ExtSignalBuffer[i]=0.0;
}
for(i=pos; i<rates_total && !IsStopped(); i++)
{
이중합 = 0.0;
for(k=0; k<InpDPeriod; k++)
합계+=ExtMainBuffer[ik];
ExtSignalBuffer[i]=합계/InpDPeriod;
}
//--- OnCalculate 완료. 새로운 prev_calculated를 반환합니다.
반환(요금 합계);
}
//+----------------------------------------------- --------------------+
 
논리를 잃지 않고 수정할 수 있지만 8번째 막대 또는 9번째 막대에 화살표를 그립니다(그러나 다시 그리기 및 왼쪽 신호 없음). 이런게 필요할까요? 즉, 새롭고 가장 신선한 화살표는 막대 9에 있습니다. 그리고 오프닝 딜레이도 9마디인데 필요하신가요?
 
Nikolay Ivanov # :

나는 당신이 이해하기를 바라지 않습니다. 비슷한 문제를 가진 고객이 있었고 1 년 동안 그에게이 순간을 설명 할 수 없었습니다. 다른 지표가 있었지만 엿보기도있었습니다. 그도 바보는 아닌 것 같지만, 이윤에 대한 갈증이 정말 논리와 생각을 꺾는 것 같다.. 돈을 많이 흘렸을 때 결국 모든 것을 이해했다. 현재 시간에는 미래에서 온 막대가 없기 때문에 왼쪽 화살표가 나타납니다. 그래서 표시기는이 화살표를 치지 않는 곳으로 던지고 무엇을해야할지 모릅니다. 다시로드하면 오른쪽 화살표 만 남습니다. ,하지만 역사에서 .. 나는 그러한 지표를 많이 보았습니다.

나는 프로그래머는 아니지만 새로운 양초 모양으로 화살표를 수정하는 것이 왜 불가능한지 여전히 이해하지 못합니까?

세상은 다시 그리는 지표로 가득 차 있으며 모든 사람에게 잘 작동합니다! 화살표는 주어진 교차로를 따라 이동하며 던지기는 발생하지 않습니다.

모두 같은 코드를 가지고 있습니다 ...

파일:
02.png  15 kb
 
asdkika1 # :

하고 싶은 것을 더 잘 쓰십시오 ... 한 점 한점

 
anrei2002 # :

나는 프로그래머는 아니지만 새로운 양초 모양으로 화살표를 수정하는 것이 왜 불가능한지 여전히 이해하지 못합니까?

세상은 다시 그리는 지표로 가득 차 있으며 모든 사람에게 잘 작동합니다! 화살표는 주어진 교차로를 따라 이동하며 던지기는 발생하지 않습니다.

모두 같은 코드를 가지고 있습니다 ...

일반적인 다시 그리기는 신호 막대 자체(화살표 표시)가 신호 모양 계산에 참여하고 0의 인덱스를 가질 수 있는 경우입니다. THEN은 현재 막대입니다.. 매 틱마다 다시 그려지고 따라서, 신호를 다시 그릴 수도 있습니다..

그러나 0 bar 외에도 -1 -2 -3 -4 -5 -6 -7 .. 마이너스 8 번째 막대는 어디에서 왔습니까 ??? 0번째 막대를 사용하는 것조차 이미 잘못된 형태이고 마이너스 지수가 있는 막대는 단순히 받아 들일 수 없습니다..

나는 그것을 수정하는 방법 위에 썼습니다 .. 신호 오른쪽에 8 개의 막대가있을 때까지 기다리면 올바르게 작동합니다. 그러면 모든 것이 괜찮을 것입니다. 화살표가 항상 9 개의 막대만큼 늦을 것이라고 생각하지 않습니다. 이게 필요해?

 
MakarFX # :

하고 싶은 것을 더 잘 쓰십시오 ... 한 점 한점

두 쌍의 곱에서 스토캐스틱 계산.
방금 표준 스토캐스틱 지표를 가져 와서 변경했습니다.
입력 데이터(선이 표시됨).
OnCalculate는 결코 사용되지 않습니다 - 분명히 여기에 개가 묻혀 있습니다.
작동하지 않습니다 - 이유를 이해하지 못합니다.
나는 전체 지표를 스스로 취할 필요가 없기를 바랐다.
재구성 - 결국 모든 것이 매우 간단해야 합니다.
 
Nikolay Ivanov # :

일반적인 다시 그리기는 신호 막대 자체(화살표 표시)가 신호 모양 계산에 참여하고 0의 인덱스를 가질 수 있는 경우입니다. THEN은 현재 막대입니다.. 매 틱마다 다시 그려지고 따라서, 신호를 다시 그릴 수도 있습니다..

그러나 0 bar 외에도 -1 -2 -3 -4 -5 -6 -7 .. 마이너스 8 번째 막대는 어디에서 왔습니까 ??? 0번째 막대를 사용하는 것조차 이미 잘못된 형태이고 마이너스 지수가 있는 막대는 단순히 받아 들일 수 없습니다..

나는 그것을 수정하는 방법 위에 썼습니다 .. 신호 오른쪽에 8 개의 막대가있을 때까지 기다리면 올바르게 작동합니다. 그러면 모든 것이 괜찮을 것입니다. 화살표가 항상 9 개의 막대만큼 늦을 것이라고 생각하지 않습니다. 이게 필요해?

다음은 그러한 지표의 또 다른 예입니다!

차트의 화살표 외에도 지하실의 선 교차점에 원이 있습니다.

그리고 원은 화살표와 달리 선의 교차점 이후에 엄격하게 이동합니다! 추가 원이 없습니다.

화살표가 왜 잘못된거죠???

파일:
03.png  98 kb
EATA__Alert.mq4  20 kb
 
anrei2002 # :

다음은 그러한 지표의 또 다른 예입니다!

차트의 화살표 외에도 지하실의 선 교차점에 원이 있습니다.

그리고 원은 화살표와 달리 선의 교차점 이후에 엄격하게 이동합니다! 추가 원이 없습니다.

화살표가 왜 잘못된거죠???

테스터에서 이 표시기를 실행하고 시각화의 선과 원을 가속된 속도로 관찰하십시오.

 
asdkika1 # :
두 쌍의 곱에서 스토캐스틱 계산.
방금 표준 스토캐스틱 지표를 가져 와서 변경했습니다.
입력 데이터(선이 표시됨).
OnCalculate는 결코 사용되지 않습니다 - 분명히 여기에 개가 묻혀 있습니다.
작동하지 않습니다 - 이유를 이해하지 못합니다.
나는 전체 지표를 스스로 취할 필요가 없기를 바랐다.
재구성 - 결국 모든 것이 매우 간단해야 합니다.

무엇의 곱셈??? 열려 있는? 닫다? 스토치?