커뮤니티

수식관련 문의입니다.

프로필 이미지
st002340
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;