코딩 도움말 - 페이지 321

 

이것은 내 그림의 예와 같이 MA를 SSA에 직접 적용하려고 시도한 것입니다.

물론, 나는 코딩의 완전한 멍청이입니다 ...

그래서 누군가 내가 무엇을 바꿔야 하는지 말해 줄 수 있다면 매우 감사할 것입니다.

나는 문제를 해결하는 것을 좋아합니다. 비록 내가 이 문제의 멍청이일지라도, 누군가가 그의 문제를 해결하려고 하지 않는다면 그는 영원히 멍청이로 남을 것입니다 ...

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

//| FullSSA.mq4 |

//| 저작권 © 2007, klot |

//| klot@mail.ru |

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

#property copyright "저작권 © 2007, klot"

#속성 링크 "klot@mail.ru"

#import "libSSA.dll"

void fastSingular(double& a[],int n,int lag ,int s,double&b[]);

#수입

#속성 표시기_분리_창

#속성 표시기_버퍼 2

#property indicator_color1 흰색

#property indicator_color2 딥핑크

#속성 표시기_너비1 3

#속성 표시기_레벨1 0.0

#property indicator_levelstyle STYLE_DASH

#property indicator_levelcolor 마젠타색

외부 문자열 note_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";

extern string TimeFrame = "현재 시간 프레임";

외부 int 지연 = 10;

외부 정수 NumComps = 2;

extern int PeriodNorm = 10;

외부 정수 N = 1000;

외부 int SSAMa_Mode = 3;

외부 정수 MaPeriod = 5;

외부 정수 Ma_Mode = 3;

extern bool 보간 = true;

이중 SSA[];

이중 ssaWork[];

이중 SSAma[];

이중 배열TimeSeries[];

문자열 표시기 파일 이름;

부울 returnBars;

부울 계산값;

int timeFrame;

정수 초기화()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSama);SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,바-N);

IndicatorFileName = WindowExpertName();

계산값 = (TimeFrame=="계산값"); if(값 계산) 반환(0);

returnBars = (TimeFrame=="returnBars"); if(반환 막대) 반환(0);

timeFrame = stringToTimeFrame(TimeFrame);

IndicatorShortName(timeFrameToString(timeFrame)+ " FullSSA 정상화 수정");

리턴(0);

}

int 초기화(){반환(0);}

정수 시작()

{

더블 dev,ma;

정수 nmax, nmin;

정수 크기 = N;

if (크기>막대) 크기 = 막대기;

if (ArraySize(arryTimeSeries) != 크기)

{

ArrayResize(arryTimeSeries, 크기);

ArrayResize(ssaWork,크기);

}

정수 한계, 나는;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=MathMin(막대-카운트된_막대,막대-1);

if (returnBars) { SSA[0] = 제한+1; 리턴(0); }

if (calculateValue || timeFrame==Period())

{

for( i=크기-1; i>=0; i--)

{

ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

if(dev==0) dev=0.1;

arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("판매"+시간);

ObjectDelete("구매"+시간);

}

fastSingular(arryTimeSeries, 크기, 지연, NumComps, ssaWork);

ArrayCopy(SSA, ssaWork);

nmax=ArrayMaximum(SSA,3,1);

nmin=ArrayMinimum(SSA,3,1);

if(nmax==2) {

ObjectCreate("판매"+시간[0],OBJ_ARROW,0,시간[0],개방[0]);

ObjectSet("판매"+시간[0],OBJPROP_ARROWCODE,226);

}

if(nm==2) {

ObjectCreate("구매"+시간[0],OBJ_ARROW,0,시간[0],개방[0]);

ObjectSet("구매"+시간[0],OBJPROP_ARROWCODE,225);

}

//----

리턴(0);

}

limit =MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"","returnBars",0,0)*timeFrame/Period()));

for(i=한계, i>=0, i--)

(i=한계, i>=0, i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);

{

정수 y = iBarShift(NULL, 시간 프레임, 시간);

SSA = iCustom(NULL,timeFrame,indicatorFileName,"","calculateValue",Lag,NumComps,PeriodNorm,N,0,y);

if (timeFrame <= Period() ||y==iBarShift(NULL,timeFrame,Time)) 계속;

(!보간) 계속하면;

날짜 시간 시간 = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =time; n++) 계속;

이중 계수 = 1.0 / n;

for(int x = 1; x < n; x++)

{

SSA = x*인자*SSA + (1.0-x*인자)*SSA;

}

}

리턴(0);

}

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

문자열 sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//

//

//

//

//

int stringToTimeFrame(문자열 tfs)

{

tfs = StringUpperCase(tfs);

(int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tfs==sTfTable || tfs==""+iTfTable)return(MathMax(iTfTable,Period()));

반환(마침표());

}

문자열 timeFrameToString(int tf)

{

(int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tf==iTfTable) return(sTfTable);

반품("");

}

//

//

//

//

//

문자열 StringUpperCase(문자열 str)

{

문자열 s = str;

(int 길이=StringLen(str)-1; 길이>=0; 길이--)

{

int tchar = StringGetChar(들, 길이);

if((문자 > 96 && 문자 223 && 문자 < 256))

s = StringSetChar(s, 길이, tchar - 32);

else if(문자열 > -33 && 문자형 < 0)

s = StringSetChar(s, 길이, tchar + 224);

}

보고);

}

 
mladen:
기울기 변경의 경우 다음과 같이 시도하십시오.[PHP]double current = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,0);double previous1 = iCustom(Symbol(),0,"HMA_Russian_Color", 20,3,0,1);이중 이전2 = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,2);if (현재>이전1 && 이전1

Mladen 감사합니다!! 이제 조건에 2번 Extmapbuffer를 추가하는 것을 잊었습니다.

기울기 변경이 아닌 주문에 대한 실행 조건이 이미 있으므로 "Uptrend일 때" 매수 또는 "Dnttrend일 때" 매도 조건은 어떻습니까?

다시 감사합니다

다니엘

 

친애하는 믈라덴,

나는 조건이 기울기의 정확한 변화가 아닌 "추세 중"이어야 하므로 이것을 썼지만 하락 추세에 문제가 있습니다. 이 조건이 맞습니까? 상승 추세가 잘 작동하는 것 같습니다 ... 하락 추세에 대해서도 동일한 문제가 있습니다 ... 당신이 저를 도울 수 있기를 바랍니다. 감사합니다.

if ( 현재 > 이전1 )

{

// 상승세

}

if ( 현재 < 이전1 )

{

// downtrend 이것은 작동하지 않으며 주문 판매를 촉발하지 않습니다...

}

 
Wulong10:
이것은 내 그림의 예와 같이 MA를 SSA에 직접 적용하려고 시도한 것입니다.

물론, 나는 코딩의 완전한 멍청이입니다 ...

그래서 누군가 내가 무엇을 바꿔야 하는지 말해 줄 수 있다면 매우 감사할 것입니다.

나는 문제를 해결하는 것을 좋아합니다. 비록 내가 이 문제의 멍청이일지라도, 누군가가 그의 문제를 해결하려고 하지 않는다면 그는 영원히 멍청이로 남을 것입니다 ...

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

//| FullSSA.mq4 |

//| 저작권 © 2007, klot |

//| klot@mail.ru |

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

#property copyright "저작권 © 2007, klot"

#속성 링크 "klot@mail.ru"

#import "libSSA.dll"

void fastSingular(double& a[],int n,int lag ,int s,double&b[]);

#수입

#속성 표시기_분리_창

#속성 표시기_버퍼 2

#property indicator_color1 흰색

#property indicator_color2 딥핑크

#속성 표시기_너비1 3

#속성 표시기_레벨1 0.0

#property indicator_levelstyle STYLE_DASH

#property indicator_levelcolor 마젠타색

외부 문자열 note_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";

extern string TimeFrame = "현재 시간 프레임";

외부 int 지연 = 10;

외부 정수 NumComps = 2;

extern int PeriodNorm = 10;

외부 정수 N = 1000;

외부 int SSAMa_Mode = 3;

외부 정수 MaPeriod = 5;

외부 정수 Ma_Mode = 3;

extern bool 보간 = true;

이중 SSA[];

이중 ssaWork[];

이중 SSAma[];

이중 배열TimeSeries[];

문자열 표시기 파일 이름;

부울 returnBars;

부울 계산값;

int timeFrame;

정수 초기화()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSama);SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,바-N);

IndicatorFileName = WindowExpertName();

계산값 = (TimeFrame=="계산값"); if(값 계산) 반환(0);

returnBars = (TimeFrame=="returnBars"); if(반환 막대) 반환(0);

timeFrame = stringToTimeFrame(TimeFrame);

IndicatorShortName(timeFrameToString(timeFrame)+ " FullSSA 정상화 수정");

리턴(0);

}

int 초기화(){반환(0);}

정수 시작()

{

더블 dev,ma;

정수 nmax, nmin;

정수 크기 = N;

if (크기>막대) 크기 = 막대기;

if (ArraySize(arryTimeSeries) != 크기)

{

ArrayResize(arryTimeSeries, 크기);

ArrayResize(ssaWork,크기);

}

정수 한계, 나는;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=MathMin(막대-카운트된_막대,막대-1);

if (returnBars) { SSA[0] = 제한+1; 리턴(0); }

if (calculateValue || timeFrame==Period())

{

for( i=크기-1; i>=0; i--)

{

ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

if(dev==0) dev=0.1;

arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("판매"+시간);

ObjectDelete("구매"+시간);

}

fastSingular(arryTimeSeries, 크기, 지연, NumComps, ssaWork);

ArrayCopy(SSA, ssaWork);

nmax=ArrayMaximum(SSA,3,1);

nmin=ArrayMinimum(SSA,3,1);

if(nmax==2) {

ObjectCreate("판매"+시간[0],OBJ_ARROW,0,시간[0],개방[0]);

ObjectSet("판매"+시간[0],OBJPROP_ARROWCODE,226);

}

if(nm==2) {

ObjectCreate("구매"+시간[0],OBJ_ARROW,0,시간[0],개방[0]);

ObjectSet("구매"+시간[0],OBJPROP_ARROWCODE,225);

}

//----

리턴(0);

}

limit =MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"","returnBars",0,0)*timeFrame/Period()));

for(i=한계, i>=0, i--)

(i=한계, i>=0, i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);

{

정수 y = iBarShift(NULL, 시간 프레임, 시간);

SSA = iCustom(NULL,timeFrame,indicatorFileName,"","calculateValue",Lag,NumComps,PeriodNorm,N,0,y);

if (timeFrame <= Period() ||y==iBarShift(NULL,timeFrame,Time)) 계속;

(!보간) 계속하면;

날짜 시간 시간 = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =time; n++) 계속;

이중 계수 = 1.0 / n;

for(int x = 1; x < n; x++)

{

SSA = x*인자*SSA + (1.0-x*인자)*SSA;

}

}

리턴(0);

}

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

문자열 sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//

//

//

//

//

int stringToTimeFrame(문자열 tfs)

{

tfs = StringUpperCase(tfs);

(int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tfs==sTfTable || tfs==""+iTfTable)return(MathMax(iTfTable,Period()));

반환(마침표());

}

문자열 timeFrameToString(int tf)

{

(int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tf==iTfTable) return(sTfTable);

반품("");

}

//

//

//

//

//

문자열 StringUpperCase(문자열 str)

{

문자열 s = str;

(int 길이=StringLen(str)-1; 길이>=0; 길이--)

{

int tchar = StringGetChar(들, 길이);

if((문자 > 96 && 문자 223 && 문자 < 256))

s = StringSetChar(s, 길이, tchar - 32);

else if(문자열 > -33 && 문자형 < 0)

s = StringSetChar(s, 길이, tchar + 224);

}

보고);

}

우롱10

사진이 안보이네요

첨부해 주시겠습니까?

 

사진은 이미 올렸었는데 여기 또 올립니다.

따라서 MT4에서 MA를 가져와 SSA에 적용하면(첫 번째 ind. 데이터에 적용) MA는 괜찮아 보이지만 MT4를 열면 실시간으로 실행될 때 더 이상 SSA를 따르지 않습니다. .

이것은 M1에서만 발생하며 M5에서는 문제 없이 실행됩니다.

그림은 시각적으로 설명해야 합니다.

감사해요.

파일:
ssa.png  72 kb
 
Wulong10:
사진은 이미 올렸었는데 여기 또 올립니다.

따라서 MT4에서 MA를 가져와 SSA에 적용하면(첫 번째 ind. 데이터에 적용) MA는 괜찮아 보이지만 MT4를 열면 실시간으로 실행될 때 더 이상 SSA를 따르지 않습니다. .

이것은 M1에서만 발생하며 M5에서는 문제 없이 실행됩니다.

그림은 시각적으로 설명해야 합니다.

감사해요.

SSA가 다시 계산한다는 것을 잊지 마십시오. 재계산된 모든 SSA 막대의 MA를 계산하지 않으면 SSA를 따르지 않습니다.

 

이제 M5에서 작동하는 이유를 이해합니다. MA 기간을 1로 설정하고 M1에서 2로 설정했기 때문입니다....그렇게 하면 문제가 해결될 것입니다. 내 거래 시뮬레이션에서 테스트했습니다. 완벽하지는 않지만 훨씬 좋습니다!

기간 1에서 MA는 SSA를 따라야 합니다.

그러나 SSA 코드에 MA를 직접 통합하는 방법은 무엇입니까? 그리고 그것은 또한 모든 SSA 막대를 다시 계산해야 합니다.... 아니면 불가능합니까?

 
Wulong10:
이제 M5에서 작동하는 이유를 이해합니다. MA 기간을 1로 설정하고 M1에서 2로 설정했기 때문입니다....그렇게 하면 문제가 해결될 것입니다. 내 거래 시뮬레이션에서 테스트했습니다. 완벽하지는 않지만 훨씬 좋습니다!

기간 1에서 MA는 SSA를 따라야 합니다.

그러나 SSA 코드에 MA를 직접 통합하는 방법은 무엇입니까? 그리고 그것은 또한 모든 SSA 막대를 다시 계산해야 합니다.... 아니면 불가능합니까?

우롱10

mq4 파일도 게시해 주시겠습니까(mql에 텍스트를 복사하면 거의 항상 문제가 발생함)?

 

마지막 요청은 신경쓰지 마세요

이동 평균이 추가된 버전은 다음과 같습니다. ssa__ma.mq4

파일:
ssa__ma.mq4  5 kb
ssa__ma.gif  75 kb
 

좋아, 고마워 Mladen, 당신은 최고야!

나는 지금 그것을 시험할 시간이 없다. 오늘 저녁에 발이다. 나는 당신에게 결과를 알려줄 것이다....시간이 되면.

이제 나는 또한 그것을 어떻게 했어야 하는지 알 수 있습니다. 그래서 나는 그것을 공부한 후에 0.5% 덜 멍청할 것입니다.