커뮤니티
수식변환 부탁드립니다
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);
다음글
이전글