커뮤니티

수식변환 부탁드립니다

프로필 이미지
vlfaud3
2019-03-12 15:37:53
308
글번호 126991
답변완료
렌코차트를 활용하여 MACD 크로스 전략을 작성하여 보았습니다. 하나의 시그널 메이커 수식 입니다 벽돌크기는 20틱으로 설정했으며, 국내시간제한으로 09;00 - 익일05:00 까지로 강제청산되게 하였습니다 이익설정은 0.3% 이며, 0.2% 도달후 10%하락시도 이익청산 입니다 죄송 스럽지만 변환 부탁 드립니다 Params : vSSTIME(090000), vEETIME(050000); Vars : TCOND(False); If vSSTIME < vEETIME Then Begin IF vSSTIME <= TIME And TIME < vEETIME Then TCOND = True Else TCOND = False; End Else Begin IF vSSTIME <= TIME Or TIME < vEETIME Then TCOND = True Else TCOND = False; End; Param : BlockSize_Tick( 20 ); // 벽돌의 최소 변화폭(단위 : 틱) Vars : BlockSize( 0 ), // 벽돌크기 BlockN( 0 ), // 벽돌 개수 Trend( 0 ); // 추세 Arrays : HighValue[2](0), // 벽돌의 고가 LowValue[2](0); // 벽돌의 저가 If TCOND Then Begin If CB = 1 // 초기 벽돌의 고가와 저가 설정 Then Begin BlockSize = PriceScale * OneTick * BlockSize_Tick; HighValue[0] = Close; LowValue[0] = Close; End; // 렌코 계산 If Trend = 0 // 추세 없음 Then Begin // 종가가 현재 벽돌의 저가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세 If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); LowValue[0] = LowValue[0] - (BlockSize * BlockN); Trend = -1; End // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승 추세 Else if close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); HighValue[0] = HighValue[0] + (BlockSize * BlockN); Trend = 1; End; End Else if Trend = -1 // 하락 추세 Then Begin // 종가가 현재 벽돌의 저가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세 지속 If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); HighValue[0] = LowValue[0]; LowValue[0] = LowValue[0] - (BlockSize * BlockN); // 벽돌의 저가 갱신 End // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승추세로 전환 Else If Close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); HighValue[1] = HighValue[0]; HighValue[0] = HighValue[1] + (BlockSize * BlockN); LowValue[0] = HighValue[1]; Trend = 1; End; End Else if Trend = 1 // 상승 추세 Then Begin // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승추세 지속 If Close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); LowValue[0] = HighValue[0]; HighValue[0] = HighValue[0] + (BlockSize * BlockN); End // 종가가 현재 벽돌의 고가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세로 전환 Else If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); LowValue[1] = LowValue[0]; LowValue[0] = LowValue[1] - (BlockSize * BlockN); HighValue[0] = LowValue[1]; Trend = -1; End; End; End; Var : Renko_price(0), oMACD(0), oSignal(0); // 렌코차트의 종가? : 상승벽돌에서는 고가, 하락벽돌에서는 저가 If trend = 1 Then Renko_price = HighValue[0] Else If trend = -1 Then Renko_price = LowValue[0]; // 최초 렌코차트의 MACD 값은 첫번째 렌코차트 값으로 정의 If Renko_price <> 0 And Renko_price[1] = 0 Then Begin oMACD = Renko_price; oSignal = Renko_price; End; input : period1(12), period2(26), period3(9); // 벽돌이 갱신될 때마다 MACD 와 시그널 계산 If Renko_price <> Renko_price[1] Then Begin oMACD = EMA(C, period1) - EMA(C, period2); oSignal = EMA(oMACD, period3); End; //////////////////////////////////////////////////////////////////////////////////////// Inputs: MyProfitTargetPercent(0.3); //////////////////////////////////////////////////////////////////////////////////////// Inputs: MyPercentTrailingBefore(0.2), MyPercentTrailingAfter(10); If TCOND Then Begin // MACD 가 시그널 상향돌파 시, 매수 If CrossUp(oMACD, oSignal) Then Buy(); // MACD 가 시그널 하향돌파 시, 매도 If CrossDown(oMACD, oSignal) Then Sell(); SetStopProfittarget( MyProfitTargetPercent, PercentStop ); SetStopTrailing( MyPercentTrailingAfter, MyPercentTrailingBefore, PercentStop ); End Else Begin SetStopProfitTarget(0); SetStopTrailing(0, 0); End; SetStopEndOfday(vEETIME);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-03-13 11:00:39

안녕하세요 예스스탁입니다. input : vSSTIME(090000), vEETIME(050000); Vars : TCOND(False); If vSSTIME < vEETIME Then Begin IF vSSTIME <= TIME And TIME < vEETIME Then TCOND = True; Else TCOND = False; End Else Begin IF vSSTIME <= TIME Or TIME < vEETIME Then TCOND = True; Else TCOND = False; End; input : BlockSize_Tick( 20 ); // 벽돌의 최소 변화폭(단위 : 틱) Vars : BlockSize( 0 ), // 벽돌크기 BlockN( 0 ), // 벽돌 개수 Trend( 0 ); // 추세 Arrays : HighValue[2](0), // 벽돌의 고가 LowValue[2](0); // 벽돌의 저가 If TCOND Then Begin If CurrentBar == 1 // 초기 벽돌의 고가와 저가 설정 Then Begin BlockSize = PriceScale * BlockSize_Tick; HighValue[0] = Close; LowValue[0] = Close; End; // 렌코 계산 If Trend == 0 // 추세 없음 Then Begin // 종가가 현재 벽돌의 저가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세 If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); LowValue[0] = LowValue[0] - (BlockSize * BlockN); Trend = -1; End // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승 추세 Else if close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); HighValue[0] = HighValue[0] + (BlockSize * BlockN); Trend = 1; End; End Else if Trend == -1 // 하락 추세 Then Begin // 종가가 현재 벽돌의 저가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세 지속 If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); HighValue[0] = LowValue[0]; LowValue[0] = LowValue[0] - (BlockSize * BlockN); // 벽돌의 저가 갱신 End // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승추세로 전환 Else If Close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); HighValue[1] = HighValue[0]; HighValue[0] = HighValue[1] + (BlockSize * BlockN); LowValue[0] = HighValue[1]; Trend = 1; End; End Else if Trend == 1 // 상승 추세 Then Begin // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승추세 지속 If Close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); LowValue[0] = HighValue[0]; HighValue[0] = HighValue[0] + (BlockSize * BlockN); End // 종가가 현재 벽돌의 고가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세로 전환 Else If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); LowValue[1] = LowValue[0]; LowValue[0] = LowValue[1] - (BlockSize * BlockN); HighValue[0] = LowValue[1]; Trend = -1; End; End; End; Var : Renko_price(0), oMACD(0), oSignal(0); // 렌코차트의 종가? : 상승벽돌에서는 고가, 하락벽돌에서는 저가 If trend == 1 Then Renko_price = HighValue[0]; Else If trend == -1 Then Renko_price = LowValue[0]; // 최초 렌코차트의 MACD 값은 첫번째 렌코차트 값으로 정의 If Renko_price <> 0 And Renko_price[1] == 0 Then Begin oMACD = Renko_price; oSignal = Renko_price; End; input : period1(12), period2(26), period3(9); // 벽돌이 갱신될 때마다 MACD 와 시그널 계산 If Renko_price <> Renko_price[1] Then Begin oMACD = EMA(C, period1) - EMA(C, period2); oSignal = EMA(oMACD, period3); End; //////////////////////////////////////////////////////////////////////////////////////// Inputs: MyProfitTargetPercent(0.3); //////////////////////////////////////////////////////////////////////////////////////// Inputs: MyPercentTrailingBefore(0.2), MyPercentTrailingAfter(10); If TCOND Then Begin // MACD 가 시그널 상향돌파 시, 매수 If CrossUp(oMACD, oSignal) Then Buy(); // MACD 가 시그널 하향돌파 시, 매도 If CrossDown(oMACD, oSignal) Then Sell(); SetStopProfittarget( MyProfitTargetPercent, PercentStop ); SetStopTrailing( MyPercentTrailingAfter, MyPercentTrailingBefore, PercentStop ); End Else Begin SetStopProfitTarget(0); SetStopTrailing(0, 0); End; if sdate != sdate[1] Then SetStopEndOfday(vEETIME); if bdate != bdate[1] Then SetStopEndofday(0); 즐거운 하루되세요 > vlfaud3 님이 쓴 글입니다. > 제목 : 수식변환 부탁드립니다 > 렌코차트를 활용하여 MACD 크로스 전략을 작성하여 보았습니다. 하나의 시그널 메이커 수식 입니다 벽돌크기는 20틱으로 설정했으며, 국내시간제한으로 09;00 - 익일05:00 까지로 강제청산되게 하였습니다 이익설정은 0.3% 이며, 0.2% 도달후 10%하락시도 이익청산 입니다 죄송 스럽지만 변환 부탁 드립니다 Params : vSSTIME(090000), vEETIME(050000); Vars : TCOND(False); If vSSTIME < vEETIME Then Begin IF vSSTIME <= TIME And TIME < vEETIME Then TCOND = True Else TCOND = False; End Else Begin IF vSSTIME <= TIME Or TIME < vEETIME Then TCOND = True Else TCOND = False; End; Param : BlockSize_Tick( 20 ); // 벽돌의 최소 변화폭(단위 : 틱) Vars : BlockSize( 0 ), // 벽돌크기 BlockN( 0 ), // 벽돌 개수 Trend( 0 ); // 추세 Arrays : HighValue[2](0), // 벽돌의 고가 LowValue[2](0); // 벽돌의 저가 If TCOND Then Begin If CB = 1 // 초기 벽돌의 고가와 저가 설정 Then Begin BlockSize = PriceScale * OneTick * BlockSize_Tick; HighValue[0] = Close; LowValue[0] = Close; End; // 렌코 계산 If Trend = 0 // 추세 없음 Then Begin // 종가가 현재 벽돌의 저가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세 If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); LowValue[0] = LowValue[0] - (BlockSize * BlockN); Trend = -1; End // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승 추세 Else if close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); HighValue[0] = HighValue[0] + (BlockSize * BlockN); Trend = 1; End; End Else if Trend = -1 // 하락 추세 Then Begin // 종가가 현재 벽돌의 저가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세 지속 If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); HighValue[0] = LowValue[0]; LowValue[0] = LowValue[0] - (BlockSize * BlockN); // 벽돌의 저가 갱신 End // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승추세로 전환 Else If Close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); HighValue[1] = HighValue[0]; HighValue[0] = HighValue[1] + (BlockSize * BlockN); LowValue[0] = HighValue[1]; Trend = 1; End; End Else if Trend = 1 // 상승 추세 Then Begin // 종가가 현재 벽돌의 고가에서 벽돌크기 더한 가격보다 올라가면 => 상승추세 지속 If Close > HighValue[0] + BlockSize Then Begin BlockN = IntPortion((Close - HighValue[0])/BlockSize); LowValue[0] = HighValue[0]; HighValue[0] = HighValue[0] + (BlockSize * BlockN); End // 종가가 현재 벽돌의 고가에서 벽돌크기 뺀 가격보다 내려가면 => 하락 추세로 전환 Else If Close < LowValue[0] - BlockSize Then Begin BlockN = IntPortion((LowValue[0] - Close)/BlockSize); LowValue[1] = LowValue[0]; LowValue[0] = LowValue[1] - (BlockSize * BlockN); HighValue[0] = LowValue[1]; Trend = -1; End; End; End; Var : Renko_price(0), oMACD(0), oSignal(0); // 렌코차트의 종가? : 상승벽돌에서는 고가, 하락벽돌에서는 저가 If trend = 1 Then Renko_price = HighValue[0] Else If trend = -1 Then Renko_price = LowValue[0]; // 최초 렌코차트의 MACD 값은 첫번째 렌코차트 값으로 정의 If Renko_price <> 0 And Renko_price[1] = 0 Then Begin oMACD = Renko_price; oSignal = Renko_price; End; input : period1(12), period2(26), period3(9); // 벽돌이 갱신될 때마다 MACD 와 시그널 계산 If Renko_price <> Renko_price[1] Then Begin oMACD = EMA(C, period1) - EMA(C, period2); oSignal = EMA(oMACD, period3); End; //////////////////////////////////////////////////////////////////////////////////////// Inputs: MyProfitTargetPercent(0.3); //////////////////////////////////////////////////////////////////////////////////////// Inputs: MyPercentTrailingBefore(0.2), MyPercentTrailingAfter(10); If TCOND Then Begin // MACD 가 시그널 상향돌파 시, 매수 If CrossUp(oMACD, oSignal) Then Buy(); // MACD 가 시그널 하향돌파 시, 매도 If CrossDown(oMACD, oSignal) Then Sell(); SetStopProfittarget( MyProfitTargetPercent, PercentStop ); SetStopTrailing( MyPercentTrailingAfter, MyPercentTrailingBefore, PercentStop ); End Else Begin SetStopProfitTarget(0); SetStopTrailing(0, 0); End; SetStopEndOfday(vEETIME);