커뮤니티
함수변경요청(SK증권)
2015-10-22 01:37:53
138
글번호 91571
안녕하세요?
아래는 SK증권에서 사용했던 함수입니다.
YT에서 사용할 수 있도록 함수 변경 요청드립니다.
Params :
TimeEnd( 144000 ),
FastLeng( 5 ),
MidLeng( 13 ),
SlowLeng( 34 ),
Brick( 0.06 ),
BarSize( 0.8 ),
BarLow( 0.4 ),
BarHigh( 0.4 ),
ProfitVal( 1.25 ),
Plok( 0.6 ),
Danger( 12 );
Var :
cnt( 0 ),
RangeValue( 0 );
// 총손익과 현재포지션의 손익을 저장함.
V8 = 1;
V9 = Danger;
V10 = NetProfit + OpenPositionProfit;
while V10 >= V9
Begin
V8 = V8 + 1;
V9 = V9 + (V8 * C * Danger * 0.01);
If V8 > 50 then V9 = V10 + 1;
End;
V11 = V8;
V1 = WMA(L, MidLeng); // 저가 이용한 중기 가중이동평균
V2 = WMA(H, MidLeng); // 고가 이용한 중기 가중이동평균
V3 = WMA(C, SlowLeng); // 종가 이용한 장기 가중이동평균
V4 = WMA(C, FastLeng); // 종가 이용한 단기 가중이동평균
If CB = 1
Then
Begin
v0 = 0;
For Cnt = 0 to 20 - 1 step 1
Begin
v0 = v0 + H[Cnt] - L[Cnt] ;
End;
End
Else v0 = v0[1] - (H[20] - L[20]) + (H - L);
RangeValue = v0/20;
Value1 = Rangevalue * Brick;
Value2 = Rangevalue * BarSize;
Value3 = Value2 * BarLow;
Value4 = Value2 * BarHigh;
// 전봉 고가 - 저가한 값이 BarSize 보다 작으면 V5 = 1
If H[1] - L[1] <= Value2 Then V5 = 1
Else V5 = 999999;
If AbsValue(L[1] - V3[1]) <= Value3 Then V12 = 1
Else V12 = 999999;
If AbsValue(H[1] - V3[1]) <= Value4 Then V13 = 1
Else V13 = 999999;
/*---------------- BRICK GAP FILTER -------------------------*/
// 5봉 최저가가 장기이평 위에 있으면 Byflag = 1(매수조건 완성)
If (V3 - Lowest(L, 5)) <= Value1 Then V14 = 1
Else V14 = 999999;
// 5봉 최고가가 장기이평 아래에 있으면 slflag = 1(매도조건 완성)
If (Highest(H, 5) - V3) <= Value1 Then V15 = 1
Else V15 = 999999;
If C > V3 // 종가가 장기이평 위에 있고
And V4[1] < V4[2] // 전봉의 단기 이평이 하락중 있었고
And V4[1] < V2[1] // 전봉의 단기 이평이 고가를 이용한 중기 이평보다 아래에 있었고
And V4 > V4[1] // 최근봉의 단기 이평이 상승중이고
And V14 = 1 // 단기 이평의 매수조건 완성
And V5 = 1 // 전봉의 봉사이즈가 작아야 함.
And V12 = 1 // 전봉의 저가와 단기 이평의 거리가 일정 범위 내에 있어야 함.
And V4 > V3 // 현재봉 기준의 단기이평이 장기이평 위에 있어야 함.
And TimeEnd > time
Then Buy("Le1", AtMarket, def, V11); // 다음봉 시가로 매수
If Close < V3 // 종가가 장기이평 아래에 있
And V4[1] > V4[2] // 전봉의 단기 이평이 상승중 있었고
And V4[1] > V1[1] // 전봉의 단기 이평이 저가를 이용한 중기 이평보다 위에 있었고
And V4 < V4[1] // 최근봉의 단기 이평이 하락중이고
And V13 = 1 // 전봉의 고가와 단기 이평의 거리가 일정 범위 내에 있어야 함.
And V4 < V3 // 현재봉 기준의 단기이평이 장기이평 아래에 있어야 함.
Then Sell("Se1", AtMarket, def, V11); // 다음봉 시가로 매도
Cond1 = SignalPosition = 1 And ((V4[1] > V3[1] And CrossUp(V4, V3)));
If Cond1 Then ExitLong("LX1", AtMarket); // 매수 청산
Cond2 = SignalPosition = -1 And ((V4[1] < V3[1] And CrossDown(V4, V3)));
if Cond2 Then ExitShort("SX1", AtMarket); // 매도 청산
/*
* 수익보존 청산
* - 포지션이 일정 포인트 이상 수익이 발생하는 상태에서
* - 손익이 줄어서 Plok 만큼 줄어들면 청산 하는 로직
*/
Cond3 = SignalPosition = 1 And MaxPositionProfit(0) >= (ProfitVal/100) * EntryPrice * V11;
If Cond3 Then ExitLong("LX2", AtStop, EntryPrice + (ProfitVal/100)*Plok * EntryPrice * v11); // 손익이 Plok 까지 줄어들면 매수청산
Cond4 = SignalPosition = -1 And MaxPositionProfit(0) >= (ProfitVal/100) * EntryPrice * V11;
If Cond4 Then ExitShort("SX2", AtStop, EntryPrice - (ProfitVal/100)*Plok * EntryPrice * v11); // 손익이 Plok 까지 줄어들면 매도청산
답변 1
예스스탁 예스스탁 답변
2015-10-23 11:03:17
안녕하세요
예스스탁입니다.
input :
TimeEnd( 144000 ),
FastLeng( 5 ),
MidLeng( 13 ),
SlowLeng( 34 ),
Brick( 0.06 ),
BarSize( 0.8 ),
BarLow( 0.4 ),
BarHigh( 0.4 ),
ProfitVal( 1.25 ),
Plok( 0.6 ),
Danger( 12 );
Var : cnt(0),RangeValue(0);
var : V0(0),V1(0),V2(0),V3(0),V4(0),v5(0);
var : V8(0),V9(0),V10(0),V11(0),V12(0),v13(0),v14(0),V15(0),CB(0);
var : Cond1(false),cond2(false),cond3(false),cond4(false);
// 총손익과 현재포지션의 손익을 저장함.
V8 = 1;
V9 = Danger;
V10 = NetProfit + OpenPositionProfit;
while V10 >= V9
Begin
V8 = V8 + 1;
V9 = V9 + (V8 * C * Danger * 0.01);
If V8 > 50 then V9 = V10 + 1;
End;
V11 = V8;
V1 = WMA(L, MidLeng); // 저가 이용한 중기 가중이동평균
V2 = WMA(H, MidLeng); // 고가 이용한 중기 가중이동평균
V3 = WMA(C, SlowLeng); // 종가 이용한 장기 가중이동평균
V4 = WMA(C, FastLeng); // 종가 이용한 단기 가중이동평균
If CB = 1
Then
Begin
v0 = 0;
For Cnt = 0 to 20 - 1 step 1
Begin
v0 = v0 + H[Cnt] - L[Cnt] ;
End;
End
Else v0 = v0[1] - (H[20] - L[20]) + (H - L);
RangeValue = v0/20;
Value1 = Rangevalue * Brick;
Value2 = Rangevalue * BarSize;
Value3 = Value2 * BarLow;
Value4 = Value2 * BarHigh;
// 전봉 고가 - 저가한 값이 BarSize 보다 작으면 V5 = 1
If H[1] - L[1] <= Value2 Then V5 = 1;
Else V5 = 999999;
If AbsValue(L[1] - V3[1]) <= Value3 Then V12 = 1;
Else V12 = 999999;
If AbsValue(H[1] - V3[1]) <= Value4 Then V13 = 1;
Else V13 = 999999;
/*---------------- BRICK GAP FILTER -------------------------*/
// 5봉 최저가가 장기이평 위에 있으면 Byflag = 1(매수조건 완성)
If (V3 - Lowest(L, 5)) <= Value1 Then V14 = 1;
Else V14 = 999999;
// 5봉 최고가가 장기이평 아래에 있으면 slflag = 1(매도조건 완성)
If (Highest(H, 5) - V3) <= Value1 Then V15 = 1;
Else V15 = 999999;
If C > V3 // 종가가 장기이평 위에 있고
And V4[1] < V4[2] // 전봉의 단기 이평이 하락중 있었고
And V4[1] < V2[1] // 전봉의 단기 이평이 고가를 이용한 중기 이평보다 아래에 있었고
And V4 > V4[1] // 최근봉의 단기 이평이 상승중이고
And V14 == 1 // 단기 이평의 매수조건 완성
And V5 == 1 // 전봉의 봉사이즈가 작아야 함.
And V12 == 1 // 전봉의 저가와 단기 이평의 거리가 일정 범위 내에 있어야 함.
And V4 > V3 // 현재봉 기준의 단기이평이 장기이평 위에 있어야 함.
And TimeEnd > time
Then Buy("Le1", AtMarket, def, V11); // 다음봉 시가로 매수
If Close < V3 // 종가가 장기이평 아래에 있
And V4[1] > V4[2] // 전봉의 단기 이평이 상승중 있었고
And V4[1] > V1[1] // 전봉의 단기 이평이 저가를 이용한 중기 이평보다 위에 있었고
And V4 < V4[1] // 최근봉의 단기 이평이 하락중이고
And V13 == 1 // 전봉의 고가와 단기 이평의 거리가 일정 범위 내에 있어야 함.
And V4 < V3 // 현재봉 기준의 단기이평이 장기이평 아래에 있어야 함.
Then Sell("Se1", AtMarket, def, V11); // 다음봉 시가로 매도
Cond1 = MarketPosition == 1 And ((V4[1] > V3[1] And CrossUp(V4, V3)));
If Cond1 Then ExitLong("LX1", AtMarket); // 매수 청산
Cond2 = MarketPosition == -1 And ((V4[1] < V3[1] And CrossDown(V4, V3)));
if Cond2 Then ExitShort("SX1", AtMarket); // 매도 청산
/*
* 수익보존 청산
* - 포지션이 일정 포인트 이상 수익이 발생하는 상태에서
* - 손익이 줄어서 Plok 만큼 줄어들면 청산 하는 로직
*/
Cond3 = MarketPosition == 1 And MaxPositionProfit(0) >= (ProfitVal/100) * EntryPrice * V11;
If Cond3 Then ExitLong("LX2", AtStop, EntryPrice + (ProfitVal/100)*Plok * EntryPrice * v11); // 손익이 Plok 까지 줄어들면 매수청산
Cond4 = MarketPosition == -1 And MaxPositionProfit(0) >= (ProfitVal/100) * EntryPrice * V11;
If Cond4 Then ExitShort("SX2", AtStop, EntryPrice - (ProfitVal/100)*Plok * EntryPrice * v11); // 손익이 Plok 까지 줄어들면 매도청산
즐거운 하루되세요
> 통큰베팅 님이 쓴 글입니다.
> 제목 : 함수변경요청(SK증권)
> 안녕하세요?
아래는 SK증권에서 사용했던 함수입니다.
YT에서 사용할 수 있도록 함수 변경 요청드립니다.
Params :
TimeEnd( 144000 ),
FastLeng( 5 ),
MidLeng( 13 ),
SlowLeng( 34 ),
Brick( 0.06 ),
BarSize( 0.8 ),
BarLow( 0.4 ),
BarHigh( 0.4 ),
ProfitVal( 1.25 ),
Plok( 0.6 ),
Danger( 12 );
Var :
cnt( 0 ),
RangeValue( 0 );
// 총손익과 현재포지션의 손익을 저장함.
V8 = 1;
V9 = Danger;
V10 = NetProfit + OpenPositionProfit;
while V10 >= V9
Begin
V8 = V8 + 1;
V9 = V9 + (V8 * C * Danger * 0.01);
If V8 > 50 then V9 = V10 + 1;
End;
V11 = V8;
V1 = WMA(L, MidLeng); // 저가 이용한 중기 가중이동평균
V2 = WMA(H, MidLeng); // 고가 이용한 중기 가중이동평균
V3 = WMA(C, SlowLeng); // 종가 이용한 장기 가중이동평균
V4 = WMA(C, FastLeng); // 종가 이용한 단기 가중이동평균
If CB = 1
Then
Begin
v0 = 0;
For Cnt = 0 to 20 - 1 step 1
Begin
v0 = v0 + H[Cnt] - L[Cnt] ;
End;
End
Else v0 = v0[1] - (H[20] - L[20]) + (H - L);
RangeValue = v0/20;
Value1 = Rangevalue * Brick;
Value2 = Rangevalue * BarSize;
Value3 = Value2 * BarLow;
Value4 = Value2 * BarHigh;
// 전봉 고가 - 저가한 값이 BarSize 보다 작으면 V5 = 1
If H[1] - L[1] <= Value2 Then V5 = 1
Else V5 = 999999;
If AbsValue(L[1] - V3[1]) <= Value3 Then V12 = 1
Else V12 = 999999;
If AbsValue(H[1] - V3[1]) <= Value4 Then V13 = 1
Else V13 = 999999;
/*---------------- BRICK GAP FILTER -------------------------*/
// 5봉 최저가가 장기이평 위에 있으면 Byflag = 1(매수조건 완성)
If (V3 - Lowest(L, 5)) <= Value1 Then V14 = 1
Else V14 = 999999;
// 5봉 최고가가 장기이평 아래에 있으면 slflag = 1(매도조건 완성)
If (Highest(H, 5) - V3) <= Value1 Then V15 = 1
Else V15 = 999999;
If C > V3 // 종가가 장기이평 위에 있고
And V4[1] < V4[2] // 전봉의 단기 이평이 하락중 있었고
And V4[1] < V2[1] // 전봉의 단기 이평이 고가를 이용한 중기 이평보다 아래에 있었고
And V4 > V4[1] // 최근봉의 단기 이평이 상승중이고
And V14 = 1 // 단기 이평의 매수조건 완성
And V5 = 1 // 전봉의 봉사이즈가 작아야 함.
And V12 = 1 // 전봉의 저가와 단기 이평의 거리가 일정 범위 내에 있어야 함.
And V4 > V3 // 현재봉 기준의 단기이평이 장기이평 위에 있어야 함.
And TimeEnd > time
Then Buy("Le1", AtMarket, def, V11); // 다음봉 시가로 매수
If Close < V3 // 종가가 장기이평 아래에 있
And V4[1] > V4[2] // 전봉의 단기 이평이 상승중 있었고
And V4[1] > V1[1] // 전봉의 단기 이평이 저가를 이용한 중기 이평보다 위에 있었고
And V4 < V4[1] // 최근봉의 단기 이평이 하락중이고
And V13 = 1 // 전봉의 고가와 단기 이평의 거리가 일정 범위 내에 있어야 함.
And V4 < V3 // 현재봉 기준의 단기이평이 장기이평 아래에 있어야 함.
Then Sell("Se1", AtMarket, def, V11); // 다음봉 시가로 매도
Cond1 = SignalPosition = 1 And ((V4[1] > V3[1] And CrossUp(V4, V3)));
If Cond1 Then ExitLong("LX1", AtMarket); // 매수 청산
Cond2 = SignalPosition = -1 And ((V4[1] < V3[1] And CrossDown(V4, V3)));
if Cond2 Then ExitShort("SX1", AtMarket); // 매도 청산
/*
* 수익보존 청산
* - 포지션이 일정 포인트 이상 수익이 발생하는 상태에서
* - 손익이 줄어서 Plok 만큼 줄어들면 청산 하는 로직
*/
Cond3 = SignalPosition = 1 And MaxPositionProfit(0) >= (ProfitVal/100) * EntryPrice * V11;
If Cond3 Then ExitLong("LX2", AtStop, EntryPrice + (ProfitVal/100)*Plok * EntryPrice * v11); // 손익이 Plok 까지 줄어들면 매수청산
Cond4 = SignalPosition = -1 And MaxPositionProfit(0) >= (ProfitVal/100) * EntryPrice * V11;
If Cond4 Then ExitShort("SX2", AtStop, EntryPrice - (ProfitVal/100)*Plok * EntryPrice * v11); // 손익이 Plok 까지 줄어들면 매도청산
이전글