답변완료
안녕하세요! 문의드립니다~ 꼭좀 답변 부탁드립니다~
안녕하세요 꾸준히 공부를 하며 실투자를 진행하고 있는 투자자입니다.
책이나 인터넷 등에서 지표를 보고 해당 지표를 실제 트레이딩에 접목하는 것을 통해
여러 지혜를 배우기도 하고 시스템트레이딩역시 배우고 있는데,
이번 지표는 정말 어렵더라구요. 아무리 많은 디버깅을 해도 이해가 안되는 부분이
있습니다. 그래서 이렇게 질문 드리오니 확인 후 답변 꼭 부탁드립니다!
------------------------------------------------------------------------------
VPCI 기반 지표, 시스템 입니다. 코드는 기존 Q&A를 참고하여 작성하였습니다.
1. 지표
inputs : short(5), Signal(25);
var : long(0), Sum1(0), Sum2(0), VWMA1(0), VWMA2(0), VPC(0), VPR(0), VM(0), VPCI(0), AvgVPCI(0);
long = short * 5;
Sum1 = AccumN(v,short);
if Sum1 > 0 then
VWMA1 = AccumN(C*v,short)/Sum1 ;
Sum2 = AccumN(v,long);
if Sum2 > 0 then
VWMA2 = AccumN(C*v,long)/Sum2;
VPC = VWMA2 - Ma(C,long) ;
VPR = VWMA1 / Ma(c, short) ;
VM = Ma(v, short) / ma(v, long) ;
VPCI = VPC * VPR * VM ;
AvgVPCI = Ma( VPCI, Signal ) ;
Plot1(VPCI, "VPCI" ) ;
Plot2(AvgVPCI, "VPCIsig" ) ;
plot3(0, "Zero");
2. VPCI와 VPCIs 의 크로스를 통한 매매 시스템
inputs : short(5), Signal(20);
var : long(0), Sum1(0), Sum2(0), VWMA1(0), VWMA2(0), VPC(0), VPR(0), VM(0), VPCI(0), AvgVPCI(0), VPCIosc(0) ;
long = short * 5;
Sum1 = AccumN(data3(v),short);
if Sum1 > 0 then
VWMA1 = AccumN(data3(C)*data3(v),short)/Sum1 ;
Sum2 = AccumN(data3(v),long);
if Sum2 > 0 then
VWMA2 = AccumN(data3(C)*data3(v),long)/Sum2;
VPC = VWMA2 - Ma(data3(C),long) ;
VPR = VWMA1 / Ma(data3(c), short) ;
VM = Ma(data3(v), short) / ma(data3(v), long) ;
VPCI = VPC * VPR * VM ;
AvgVPCI = Ma( VPCI, Signal ) ;
VPCIosc = VPCI-AvgVPCI;
if CrossUp(VPCI, AvgVPCI) then
{
Buy("B",AtMarket);
}
if MarketPosition == 1 and VPCI < AvgVPCI then
{
ExitLong("S",AtMarket);
}
차트창 에는
DATA1 실거래 1분봉
DATA2 지표참조용 주봉
DATA3 지표참조용 일봉
으로 구성되어 있고 지표를 적용후 설정에서 대상을 DATA3인 일봉을 선택함.
문제는 지표와 시스템상의 이격이 계속 발생이 되고 있다는 겁니다.
※ 참고로 해당 거래는 001 코스피주가지수를 참조하여 테스트를 하였습니다.
지표상에서 아무런 움직임이 없는데 데드크로스 발생후 진행되어야 할 매도가
진행되고 또는 골드크로스 발생 후 진행되어야 할 매수가 뜬금없이 진행되고 합니다.
차트를 DATA1 ~ DATA3 으로 구성되어 있는 점 참고 부탁드리고
답변에 대해 미리 감사드립니다.
2021-03-16
1103
글번호 147122
시스템
답변완료
아래 문의드린 수식이 오류가 있는것 같아 재문의 드립니다.
자꾸 문의를 드리는 것 같아 죄송하네요..ㅜ.ㅜ
어제 문의드렸던 내용 중에 횡보시 청산 관련 타점에 대해 수식을
의뢰 했었는데 실제 시스템에 적용해서 보니. 매수 하자 마자 바로 청산되는
수식으로 바뀌어진것 같습니다.
확인좀 부탁드리겠습니다.
기존 의뢰내용입니다.
--------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
시간청산이 첫진입 기준으로 되어 있었습니다.
최근진입기준으로 변경했습니다.
var : entry(0),AP(0),TT(0);
if Bdate != Bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if MarketPosition == 0 and Dayopen(0) >= DayClose(1)*1.005 Then
{
if entry == 0 or
(entry >= 1 and (sTime < 115000 or Highest(H,BarsSinceExit(1)) < AP*1.06) and IsExitName("Bp1",1) == true) Then
Buy("b1",AtLimit,DayOpen*0.97);
}
if Dayopen(0) >= DayClose(1)*1.005 and
( (MarketPosition == 1 and MaxEntries == 1 and IsEntryName("b1") == true) or
(MarketPosition == 0 and entry >= 1 and IsExitName("Bp2",1) == true and (sTime < 115000 or Highest(H,BarsSinceExit(1)) < AP*1.06))) Then
Buy("b2",AtLimit,DayOpen*0.94);
if Dayopen(0) >= DayClose(1)*1.005 and
((MarketPosition == 1 and MaxEntries == 2 and IsEntryName("b1") == true) or
(MarketPosition == 1 and MaxEntries == 1 and IsEntryName("b2") == true)) Then
Buy("b3",AtLimit,DayOpen*0.91);
if MarketPosition == 1 Then
{
AP = AvgEntryPrice;
if CurrentContracts > CurrentContracts[1] Then
TT = TimeToMinutes(stime);
if MaxEntries == 1 and IsEntryName("b1") == true Then
{
ExitLong("bp1",AtLimit,AP*1.02);
if TimeToMinutes(sTime) >= TimeToMinutes(TT)+60 Then
ExitLong("bx1");
}
if (MaxEntries == 2 and IsEntryName("b1") == true) or
(MaxEntries == 1 and IsEntryName("b2") == true) Then
{
ExitLong("bp2",AtLimit,AP*1.01);
if TimeToMinutes(sTime) >= TimeToMinutes(TT)+60 Then
ExitLong("bx2");
}
if (MaxEntries == 3 and IsEntryName("b1") == true) or
(MaxEntries == 2 and IsEntryName("b2") == true) Then
{
ExitLong("bp3",AtLimit,AP*1.005);
if TimeToMinutes(sTime) >= TimeToMinutes(TT)+60 Then
ExitLong("bx3");
}
ExitLong("bl",AtStop,DayOpen*0.88);
}
SetStopEndofday(151800);
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 자꾸 재문의를 드리네요
> 안녕하세요
전에 도식화로 시스템식을 요청드렷던 사람입니다.
시스템 검증 과정에서 저의 생각과 좀 틀린부분이 있어 요청을 드립니다.
매수포지션을 가져가서 횡보할때 매수한지 1시간 이후에 청산하는 부분이 있었습니다.
1타점 매수, 2타점 매수, 3타점 매수 분할매수로 되어있는데. 매수한지 1시간 이후는
1타점 매수에 대해서만. 해당 되는 것 같아 요청드립낟.
예를 들면, 1타점 매수후 2타점이 까지 조건이 만족해서 2타점 까지 매수하여
횡보하던중.. 제 기준은 2타점 매수후 1시간 횡보하면, 청산이였는데..
시스템식을 돌려보니 1타점 매수후부터로 1시간 횡보하면 청산되는 것으로 나오게 됩니다.
기존에 요청드렸던 시스템식을 같이 송부합니다. 확인 부탁드리겠습니다.
2021-03-15
831
글번호 147119
시스템
답변완료
죄송~~^^ 이 수식에 맞는 신호도 부탁 드립니다.
정말 죄송 합니다.
한 번에 이야기 드렸어야 되었는데,
여기 수식에 대한 신호도 같이 만들어 주셨으면 합니다.
죄송 하고 고맙습니다.
input : midPeriod(52); ("이 부분은 잘못 하셔서 제가 수정 했습니다")
var1 = ma(c,5);
Var2 = ma(c,60);
Var3 = ma(c,226);
Var4 = (highest(high,midPeriod)+lowest(low,midPeriod))/2;
Var5 = BollBandUp(300,2);
Condition1 = dayClose(1) < C and
var1[1] < var1[4] and
var1[1] < var1 and
C > Var3 and
C > Var2 and
Var2 > var2[5] and
C > Var4;
Condition2 = DayOpen() < dayClose(1)*1.10 and
dayClose(1) < C and
var1[1] < var1[4] and
var1[1] < var1 and
C > Var5 and
C > var3 and
C > Var2 and
Var2 > var2[5] and
C > Var4;
if Condition1 == true and Condition2 == true Then
Find(1);
2021-03-16
807
글번호 147118
강조
답변완료
부탁드립니다.
if STd(c3,s2)>mm Then {s1=100, 손절=loss1, 익절=profit1}
if STd(c3,s2)<mm Then {s1=40, 손절=loss2, 익절=profit2}
이부분에서 변수?가 ?꼬인거같은데 어떻게 풀어야할지 모르겠습니다.
컨셉은 loss1이 숫자로 나오고 이 숫자를 손절에 대입하는것입니다.
var : loss1(2),profit1(5),loss2(1),profit2(3);
var : 손절(2),익절(5);
Var : value(0);
var : s1(100),s2(200);
var : C2(0,Data2);
var : C3(0,Data3);
loss1=STd(c,s2)*2;
loss2=STd(c,s2);
profit1=STd(c,s2)*2;
profit2=STd(c,s2);
if STd(c3,s2)>mm Then {s1=100, 손절=loss1, 익절=profit1}
if STd(c3,s2)<mm Then {s1=40, 손절=loss2, 익절=profit2}
.
.
.
.
SetStopProfittarget(익절,PointStop);
SetStoploss(손절,PointStop);
2021-03-15
514
글번호 147113
시스템
답변완료
시스템 수식 관련 문의 드립니다.
매수 손절과 매도 손절을 다른가격으로 설정하고 싶은데
제대로 작성 수식 작성한건지 알고 싶어서 문의 드립니다.
매수 진입 및 청산은 진입조건 만족시 다음봉 기준 진입이구여
매수 손절은 진입 가격 기준 SL_Long틱 이하로 빠질 경우 즉시 청산
매도 손절은 진입 가격 기준 SL_Short틱 이하로 빠질 경우 즉시 청산을 구현하고 싶습니다.
주석처리한 부분을 살려서 쓸 수 있는지 아니면 밑에 if else문으로 작성 하는게 맞는지
아니면 다른 방법이 있는지 꼭 알려주세요.
Input : SL_Long(50), SL_Short(70);
TickPoint = PriceScale;
# 매수 진입
If MarketPosition == 0 and CrossUP(value1, value2) and Condition1 == True and condition3 == True Then
Buy("매수");
# 매수 청산 및 손절
if MarketPosition == 1 Then
{
if CrossUp(value,Exit_Long) Then
ExitLong("매수청산");
// if IsEntryName("매수") == True and c <= EntryPrice - PriceScale*SL_Long Then
// SetStopLoss(PriceScale * SL_Long,PointStop);
}
# 매도 진입
if MarketPosition == 0 and CrossDown(value3, value4)and Condition2 == True and condition4 == True Then
Sell("매도");
# 매도 청산 및 손절
if MarketPosition == -1 Then
{
if CrossDown(value,Exit_Short) Then
ExitShort("매도청산");
// if IsEntryName("매도") == True and c >= EntryPrice + PriceScale*SL_Short Then
// SetStopLoss(PriceScale * SL_Short,PointStop);
}
# 손절
if MarketPosition == 1 and IsEntryName("매수") == True and c <= EntryPrice - (PriceScale * SL_Long) Then {
SetStopLoss(PriceScale * SL_Long,PointStop);
}
Else if MarketPosition == -1 and IsEntryName("매도") == True and c >= EntryPrice + (PriceScale * SL_Short) Then {
SetStopLoss(PriceScale * SL_Short,PointStop);
}
Else {
SetStopLoss(0);
}
2021-03-15
740
글번호 147104
시스템
답변완료
부탁드립니다.
수고 많으십니다.
아래와 같이 호가잔량차(+-권 RGB컬러로 표기)와 피보나치 비율라인을 표기하고자 합니다.
잘 안되네요.
부탁드립니다
감사합니다. 꾸뻑
input : P(20);
var : HH(0),LL(0);
var1 = ma(Bids-asks,P);
PlotBaseLine1(0);
plot1(Bids-asks, "잔량차");
plot2(var1, "잔량차이평");
value1 = Bids-asks;
if CrossUp(value1,0) Then
HH = value1;
if value1 > 0 and value1 > HH Then
HH = value1;
if CrossDown(value1,0) Then
LL = value1;
if value1 < 0 and value1 < LL Then
LL = value1;
Plot3(HH,"고점");
plot4(LL,"저점");
Plot5(0(LowD(0)+(HighD(0)- LowD(0))*0.236),"23.6%");
Plot6(0(LowD(0)+(HighD(0)- LowD(0))*0.764),"76.4%");
Plot7(0(LowD(0)+(HighD(0)- LowD(0))*0.382),"38.2%");
Plot8(0(LowD(0)+(HighD(0)- LowD(0))*0.618),"61.8%");
Plot9(0(LowD(0)+(HighD(0)- LowD(0))*0.50),"50.0%");
2021-03-15
730
글번호 147102
지표