커뮤니티
수식관련 문의입니다.
2018-03-15 15:44:17
178
글번호 117425
담당자님 안녕하세요. 협조 감사드립니다.
아래글로 수식변환 요청드렸고, 변환을 햇는데 시메에서와 예스에서 신호가 다르게 나옵니다.
이유를 알고 싶습니다.
1.
input : SSTIME(180000), EETIME(060000), Exit_P(200);
input : MaPeriod1(120),Period(120), Type(1);
Vars : SP(0), TickSize(0), TCOND(False), Price(0);
Vars : sLL(0), lHH(0), Ma1(0),V0(0);
Price = C;
If SSTIME < EETIME Then
Begin
If SSTIME <= TIME And TIME <= EETIME Then
TCOND = True;
Else
TCOND = False;
End
Else
Begin
If SSTIME <= TIME Or TIME <= EETIME Then
TCOND = True;
Else
TCOND = False;
End;
SP = MarketPosition;
TickSize = PriceScale;
MA1 = ma(C, MaPeriod1);
If Type == 1 Then
V0 = ma(Price, Period);
Else
V0 = ema(Price, Period);
If Price > V0 Then
sLL = L;
Else
sLL = sLL;
If Price < V0 Then
lHH = H;
Else
lHH = lHH;
input : targetB(10), targetS(10), targetEL(0), targetES(0);
If TCOND And CurrentBar > 1 And sLL[1] > 0 And lHH[1] > 0 Then
Begin
If Price > V0 Then
Begin
IF C < lHH + (targetB * Ticksize) Then
Buy("B", Atstop, lHH + (targetB * TickSize));
End;
MessageLog("%.2f %.2f", C, lHH);
If SP == 1 Then
Begin
If C < Ma1 Then ExitLong("maEXL", Atlimit, Ma1);
If C > Ma1 Then ExitLong("maEXL1", Atstop, Ma1);
End;
If Price < V0 Then
Begin
If C > sLL - (targetS * TickSize) Then Sell("S", Atstop, sLL - (targetS * TickSize));
End;
If SP == -1 Then
Begin
If C > Ma1 Then ExitShort("maEXS", Atlimit, Ma1);
If C < Ma1 Then ExitShort("maEXS1", Atstop, Ma1);
End;
End;
2
input :Period(120), Type(1);
Vars : sHH(0), sLL(0), lHH(0), lLL(0),Price(0),v0(0);
Price = C;
If Type == 1 Then
V0 = ma(Price, Period);
Else
V0 = ema(Price, Period);
If Price > V0 Then
Begin
sHH = H;
sLL = L;
End
Else
Begin
sHH = sHH;
sLL = sLL;
End;
If Price < V0 Then
Begin
lHH = H;
lLL = L;
End
Else
Begin
lHH = lHH;
lLL = lLL;
End;
If CurrentBar > 1 And lHH[1] > 0 And lLL[1] > 0 And sHH[1] > 0 And sLL[1] > 0 Then
Begin
Plot1(sHH, "사용X");
Plot2(sLL, "하락추세용");
Plot3(lHH, "상승추세용");
Plot4(lLL, "사용X");
End;
즐거운 하루되세요
> st002340 님이 쓴 글입니다.
> 제목 : 수식 요청드립니다.
> 수고하십니다. 담당자님
시그널메이커 수식인데 2개 변환요청드립니다. 감사합니다.
1.---------------------------------------------------------------
Params : SSTIME(180000), EETIME(060000), Exit_P(200);
Params : MaPeriod1(120), Price(C), Period(120), Type(1);
Vars : SP(0), TickSize(0), TCOND(False);
Vars : sLL(0), lHH(0), Ma1(0);
If SSTIME < EETIME Then
Begin
If SSTIME <= TIME And TIME <= EETIME Then TCOND = True
Else TCOND = False;
End
Else
Begin
If SSTIME <= TIME Or TIME <= EETIME Then TCOND = True
Else TCOND = False;
End;
SP = SignalPosition;
TickSize = OneTick * PriceScale;
MA1 = AvgFast(C, MaPeriod1);
If Type == 1 Then V0 = Average(Price, Period)
Else V0 = XAverage(Price, Period);
If Price > V0 Then sLL = L
Else sLL = sLL;
If Price < V0 Then lHH = H
Else lHH = lHH;
Params : targetB(10), targetS(10), targetEL(0), targetES(0);
If TCOND And CB > 1 And sLL[1] > 0 And lHH[1] > 0 Then
Begin
If Price > V0 Then
Begin
IF C < lHH + (targetB * Ticksize) Then Buy("B", Atstop, lHH + (targetB * TickSize));
End;
MessageLog("%.2f %.2f", C, lHH);
If SP = 1 Then
Begin
If C < Ma1 Then ExitLong("maEXL", Atlimit, Ma1);
If C > Ma1 Then ExitLong("maEXL1", Atstop, Ma1);
End;
If Price < V0 Then
Begin
If C > sLL - (targetS * TickSize) Then Sell("S", Atstop, sLL - (targetS * TickSize));
End;
If SP = -1 Then
Begin
If C > Ma1 Then ExitShort("maEXS", Atlimit, Ma1);
If C < Ma1 Then ExitShort("maEXS1", Atstop, Ma1);
End;
End;
2.---------------------------------------------------------------
Params : Price(C), Period(120), Type(1);
Vars : sHH(0), sLL(0), lHH(0), lLL(0);
If Type == 1 Then V0 = Average(Price, Period)
Else V0 = XAverage(Price, Period);
If Price > V0 Then
Begin
sHH = H;
sLL = L;
End
Else
Begin
sHH = sHH;
sLL = sLL;
End;
If Price < V0 Then
Begin
lHH = H;
lLL = L;
End
Else
Begin
lHH = lHH;
lLL = lLL;
End;
If CB > 1 And lHH[1] > 0 And lLL[1] > 0 And sHH[1] > 0 And sLL[1] > 0 Then
Begin
Plot1(sHH, "사용X");
Plot2(sLL, "하락추세용");
Plot3(lHH, "상승추세용");
Plot4(lLL, "사용X");
End;
답변 1
예스스탁 예스스탁 답변
2018-03-16 10:59:03
안녕하세요
예스스탁입니다.
시그널메이커는 사용해본 경험이 없어
올려주신 수식의 내용만 보고
저희 랭귀지의 문법에 맞게 변경을 해드립니다.
변경해 드린 수식에서 사용되는 함수가 다를 수도 있고
랭귀지의 내부구조등 체계가 달라 신호가 다를수도 있습니다.
혹은 랭귀지는 모두 차트의 데이터에서 값을 가져와 사용하므로
동일주기라도 차트의 데이터가 다르면 신호가 달라지게 됩니다.
해당 부분은 수식에 주석을 붙여드립니다.
주석참고하셔서 수정보완해 보셔야 할것 같습니다.
input : SSTIME(180000), EETIME(060000), Exit_P(200);
input : MaPeriod1(120),Period(120), Type(1);
Vars : SP(0), TickSize(0), TCOND(False), Price(0);
Vars : sLL(0), lHH(0), Ma1(0),V0(0);
#종가 지정
Price = C;
#SSTIME가 EETIME보다 작으면
If SSTIME < EETIME Then
Begin
#현재시간이 SSTIME보다 크고 EETIME보다는 작으면 true 아니면 false
If SSTIME <= TIME And TIME <= EETIME Then
TCOND = True;
Else
TCOND = False;
End
Else #SSTIME가 EETIME보다 크거나 같으면
Begin
#현재시간이 SSTIME보다 크거나 EETIME보다는 작으면 true 아니면 false
If SSTIME <= TIME Or TIME <= EETIME Then
TCOND = True;
Else
TCOND = False;
End;
#차트 포지션 상태
SP = MarketPosition;
#종목의 1틱값
TickSize = PriceScale;
#120 단순이평
MA1 = ma(C, MaPeriod1);
#Type이 1이면 120 단순이평, 아니면 120 지수이평
If Type == 1 Then
V0 = ma(Price, Period);
Else
V0 = ema(Price, Period);
#종가가 이평보다 크면
#sll에 저가 저장 아니면 이전값 유지
If Price > V0 Then
sLL = L;
Else
sLL = sLL;
#종가가 이평보다 작으면
#lHH에 고가 저장 아니면 이전값 유지
If Price < V0 Then
lHH = H;
Else
lHH = lHH;
input : targetB(10), targetS(10), targetEL(0), targetES(0);
#Tcond가 true이고(시간조건 충족되고)
#수식계산에 필요한 봉갯수가 충족된 이후이고
#전봉의 sLL값과 전봉의 lHH값이 0이상이고
If TCOND And CurrentBar > 1 And sLL[1] > 0 And lHH[1] > 0 Then
Begin
#종가가 이평보다 크고
If Price > V0 Then
Begin
#종가가 lHH+10틱보다 아래이면
#다음봉의 시세가 lHH+10틱 이상의 시세가 발생하면 매수
IF C < lHH + (targetB * Ticksize) Then
Buy("B", Atstop, lHH + (targetB * TickSize));
End;
MessageLog("%.2f %.2f", C, lHH);
#매수진입 이후에
If SP == 1 Then
Begin
#종가가 120이평보다 작으면
#다음봉의 시세가 120이평 이상의 시세 발생하면 청산
If C < Ma1 Then ExitLong("maEXL", Atlimit, Ma1);
#종가가 120이평보다 크면
#다음봉의 시세가 120이평 이하의 시세 발생하면 청산
If C > Ma1 Then ExitLong("maEXL1", Atstop, Ma1);
End;
#종가가 이평보다 작으면
If Price < V0 Then
Begin
#종가가 sLL-10틱보다 크면
#다음봉의 시세가 sLL-10틱 이하의 시세가 발생하면 매도
If C > sLL - (targetS * TickSize) Then
Sell("S", Atstop, sLL - (targetS * TickSize));
End;
#매도진입 이후에
If SP == -1 Then
Begin
#종가가 120이평보다 크면
#다음봉의 시세가 120이평 이하의 시세 발생하면 청산
If C > Ma1 Then ExitShort("maEXS", Atlimit, Ma1);
#종가가 120이평보다 작으면
#다음봉의 시세가 120이평 이상의 시세 발생하면 청산
If C < Ma1 Then ExitShort("maEXS1", Atstop, Ma1);
End;
End;
즐거운 하루되세요
> st002340 님이 쓴 글입니다.
> 제목 : 수식관련 문의입니다.
> 담당자님 안녕하세요. 협조 감사드립니다.
아래글로 수식변환 요청드렸고, 변환을 햇는데 시메에서와 예스에서 신호가 다르게 나옵니다.
이유를 알고 싶습니다.
1.
input : SSTIME(180000), EETIME(060000), Exit_P(200);
input : MaPeriod1(120),Period(120), Type(1);
Vars : SP(0), TickSize(0), TCOND(False), Price(0);
Vars : sLL(0), lHH(0), Ma1(0),V0(0);
Price = C;
If SSTIME < EETIME Then
Begin
If SSTIME <= TIME And TIME <= EETIME Then
TCOND = True;
Else
TCOND = False;
End
Else
Begin
If SSTIME <= TIME Or TIME <= EETIME Then
TCOND = True;
Else
TCOND = False;
End;
SP = MarketPosition;
TickSize = PriceScale;
MA1 = ma(C, MaPeriod1);
If Type == 1 Then
V0 = ma(Price, Period);
Else
V0 = ema(Price, Period);
If Price > V0 Then
sLL = L;
Else
sLL = sLL;
If Price < V0 Then
lHH = H;
Else
lHH = lHH;
input : targetB(10), targetS(10), targetEL(0), targetES(0);
If TCOND And CurrentBar > 1 And sLL[1] > 0 And lHH[1] > 0 Then
Begin
If Price > V0 Then
Begin
IF C < lHH + (targetB * Ticksize) Then
Buy("B", Atstop, lHH + (targetB * TickSize));
End;
MessageLog("%.2f %.2f", C, lHH);
If SP == 1 Then
Begin
If C < Ma1 Then ExitLong("maEXL", Atlimit, Ma1);
If C > Ma1 Then ExitLong("maEXL1", Atstop, Ma1);
End;
If Price < V0 Then
Begin
If C > sLL - (targetS * TickSize) Then Sell("S", Atstop, sLL - (targetS * TickSize));
End;
If SP == -1 Then
Begin
If C > Ma1 Then ExitShort("maEXS", Atlimit, Ma1);
If C < Ma1 Then ExitShort("maEXS1", Atstop, Ma1);
End;
End;
2
input :Period(120), Type(1);
Vars : sHH(0), sLL(0), lHH(0), lLL(0),Price(0),v0(0);
Price = C;
If Type == 1 Then
V0 = ma(Price, Period);
Else
V0 = ema(Price, Period);
If Price > V0 Then
Begin
sHH = H;
sLL = L;
End
Else
Begin
sHH = sHH;
sLL = sLL;
End;
If Price < V0 Then
Begin
lHH = H;
lLL = L;
End
Else
Begin
lHH = lHH;
lLL = lLL;
End;
If CurrentBar > 1 And lHH[1] > 0 And lLL[1] > 0 And sHH[1] > 0 And sLL[1] > 0 Then
Begin
Plot1(sHH, "사용X");
Plot2(sLL, "하락추세용");
Plot3(lHH, "상승추세용");
Plot4(lLL, "사용X");
End;
즐거운 하루되세요
> st002340 님이 쓴 글입니다.
> 제목 : 수식 요청드립니다.
> 수고하십니다. 담당자님
시그널메이커 수식인데 2개 변환요청드립니다. 감사합니다.
1.---------------------------------------------------------------
Params : SSTIME(180000), EETIME(060000), Exit_P(200);
Params : MaPeriod1(120), Price(C), Period(120), Type(1);
Vars : SP(0), TickSize(0), TCOND(False);
Vars : sLL(0), lHH(0), Ma1(0);
If SSTIME < EETIME Then
Begin
If SSTIME <= TIME And TIME <= EETIME Then TCOND = True
Else TCOND = False;
End
Else
Begin
If SSTIME <= TIME Or TIME <= EETIME Then TCOND = True
Else TCOND = False;
End;
SP = SignalPosition;
TickSize = OneTick * PriceScale;
MA1 = AvgFast(C, MaPeriod1);
If Type == 1 Then V0 = Average(Price, Period)
Else V0 = XAverage(Price, Period);
If Price > V0 Then sLL = L
Else sLL = sLL;
If Price < V0 Then lHH = H
Else lHH = lHH;
Params : targetB(10), targetS(10), targetEL(0), targetES(0);
If TCOND And CB > 1 And sLL[1] > 0 And lHH[1] > 0 Then
Begin
If Price > V0 Then
Begin
IF C < lHH + (targetB * Ticksize) Then Buy("B", Atstop, lHH + (targetB * TickSize));
End;
MessageLog("%.2f %.2f", C, lHH);
If SP = 1 Then
Begin
If C < Ma1 Then ExitLong("maEXL", Atlimit, Ma1);
If C > Ma1 Then ExitLong("maEXL1", Atstop, Ma1);
End;
If Price < V0 Then
Begin
If C > sLL - (targetS * TickSize) Then Sell("S", Atstop, sLL - (targetS * TickSize));
End;
If SP = -1 Then
Begin
If C > Ma1 Then ExitShort("maEXS", Atlimit, Ma1);
If C < Ma1 Then ExitShort("maEXS1", Atstop, Ma1);
End;
End;
2.---------------------------------------------------------------
Params : Price(C), Period(120), Type(1);
Vars : sHH(0), sLL(0), lHH(0), lLL(0);
If Type == 1 Then V0 = Average(Price, Period)
Else V0 = XAverage(Price, Period);
If Price > V0 Then
Begin
sHH = H;
sLL = L;
End
Else
Begin
sHH = sHH;
sLL = sLL;
End;
If Price < V0 Then
Begin
lHH = H;
lLL = L;
End
Else
Begin
lHH = lHH;
lLL = lLL;
End;
If CB > 1 And lHH[1] > 0 And lLL[1] > 0 And sHH[1] > 0 And sLL[1] > 0 Then
Begin
Plot1(sHH, "사용X");
Plot2(sLL, "하락추세용");
Plot3(lHH, "상승추세용");
Plot4(lLL, "사용X");
End;