커뮤니티

함수요청(12-1호)

프로필 이미지
통큰베팅
2015-07-30 07:43:11
125
글번호 89011
답변완료
아래의 함수를 수정하고 싶습니다. 가상매매를 하여 손절이 발생될 경우에, 손절의 방향으로 진입을 하고 싶습니다. 가령 가상으로 아래 식으로 진입 후 손절발생이 되면(여기서는 실제로 포지션을 진입하지 않습니다), 바로 그시점에 그가격 매수로 진입을 당일 매매하는 것입니다. 수익청산조건은 손절한 틱수의 2배값입니다. 가령 50틱 손절 이후 진입했으면 수익청산조건은 100틱 이익값입니다. 포지션의 진입후 강제청산의 기준은 SetStopLoss(0.8,PercentStop); SetStopProfittarget(3,PercentStop); SetStopInactivity(3,23,PercentStop); 로 동일합니다. 매도의 경우도 마찬가지입니다. var : entry(0),NP(0),NP1(0),NP2(0); var : ho(0),OL(0),HL(0); var : maho(0),maOL(0),maHL(0); var : cnt(0),sumho(0),sumOL(0),sumHL(0); var : EntryCnt(0),cond1(false); var : V1(0),V2(0),V3(0),V4(0),V5(0),V6(0),V7(0),V8(0),V9(0),V10(0); NP = NetProfit; if bdate != bdate[1] Then{ entry = 0; NP1 = NP[1]; NP2 = NP1[1]; Cond1 = true; if NP1 > NP2 Then cond1 = false; } if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then entry = entry+1; ho = Dayhigh-Dayopen; OL = DayOpen-DayLow; HL = DayHigh-DayLow; sumho = 0; sumOL = 0; sumHL = 0; for cnt = 1 to 10{ sumho = sumho + (dayhigh(cnt)-dayopen(cnt)); sumOL = sumOL + (DayOpen(cnt)-DayLow(cnt)); sumHL = sumHL + (DayHigh(cnt)-DayLow(cnt)); } maho = sumho/10; maOL = sumOL/10; maHL = sumHL/10; V1 = dayopen(0)+maho; V2 = DayOpen(0)-maOL; V3 = DayOpen(0)+maHL; V4 = DayOpen(0)-maHL; V5 = NthMaxList(1,V1,V2,V3,V4); V6 = NthMaxList(2,V1,V2,V3,V4); V9 = NthMaxList(3,V1,V2,V3,V4); V10 = NthMaxList(4,V1,V2,V3,V4); V7 = (V5+V10)/2; V8 = (V6+V9)/2; if MarketPosition == 0 and entry == 0 and cond1 == true Then{ if V7 > V8 Then sell("s1",AtStop,V7); if V7 < V8 Then sell("s2",Atlimit,V8); } if MarketPosition == -1 and IsEntryName("s1") == true Then{ ExitShort("sp1",atlimit,V9); ExitShort("sl1",AtStop,V6); } if MarketPosition == -1 and IsEntryName("s2") == true Then{ ExitShort("sp2",atlimit,V9); ExitShort("sl2",AtStop,V6); } var : TF(0); var : Xtime(0), Etime(false),mav1(0),mav2(0); var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0); Array : HH[50](0),LL[50](0),CC[50](0); mav1 = ma(c,5); mav2 = ma(C,20); TF = TimeToMinutes(stime)%30; if Bdate != Bdate[1] Then{ Etime = true; if stime >= 090000 Then Xtime = 060000; Else Xtime = 060000; } if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{ HH[0] = H; LL[0] = L; for cnt = 1 to 49{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; } } if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; CC[0] = C; if HH[25+2] > 0 Then{ HV = HH[0]; LV = LL[0]; HV1 = HH[1]; LV1 = LL[1]; HV2 = HH[2]; LV2 = LL[2]; for cnt = 0 to 25{ if HH[cnt] > HV Then HV = HH[cnt]; if LL[cnt] < LV Then LV = LL[cnt]; if HH[cnt+1] > HV Then HV = HH[cnt+1]; if LL[cnt+1] < LV Then LV = LL[cnt+1]; if HH[cnt+2] > HV Then HV = HH[cnt+2]; if LL[cnt+2] < LV Then LV = LL[cnt+2]; } var1 = (HV+LV)/2; var2 = (HV1+LV1)/2; var3 = (HV2+LV2)/2; if Etime == true then{ if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then buy("b",AtMarket); if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then ExitLong("bx",AtMarket); } } if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{ Etime = false; ExitLong(); } SetStopLoss(0.8,PercentStop); SetStopProfittarget(3,PercentStop); SetStopInactivity(3,23,PercentStop);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-08-03 10:11:34

안녕하세요 예스스탁입니다. 문의하신 내용은 수식으로 작성해 드리기 어렵습니다. 가상매매는 수식으로 작성해 보는데 너무 많은 시간이 소모가되어 가상매매와 연계해 시스템을 구동하는 부분은 수식으로 작성해 드리기 어렵습니다. 즐거운 하루되세요 > 통큰베팅 님이 쓴 글입니다. > 제목 : 함수요청(12-1호) > 아래의 함수를 수정하고 싶습니다. 가상매매를 하여 손절이 발생될 경우에, 손절의 방향으로 진입을 하고 싶습니다. 가령 가상으로 아래 식으로 진입 후 손절발생이 되면(여기서는 실제로 포지션을 진입하지 않습니다), 바로 그시점에 그가격 매수로 진입을 당일 매매하는 것입니다. 수익청산조건은 손절한 틱수의 2배값입니다. 가령 50틱 손절 이후 진입했으면 수익청산조건은 100틱 이익값입니다. 포지션의 진입후 강제청산의 기준은 SetStopLoss(0.8,PercentStop); SetStopProfittarget(3,PercentStop); SetStopInactivity(3,23,PercentStop); 로 동일합니다. 매도의 경우도 마찬가지입니다. var : entry(0),NP(0),NP1(0),NP2(0); var : ho(0),OL(0),HL(0); var : maho(0),maOL(0),maHL(0); var : cnt(0),sumho(0),sumOL(0),sumHL(0); var : EntryCnt(0),cond1(false); var : V1(0),V2(0),V3(0),V4(0),V5(0),V6(0),V7(0),V8(0),V9(0),V10(0); NP = NetProfit; if bdate != bdate[1] Then{ entry = 0; NP1 = NP[1]; NP2 = NP1[1]; Cond1 = true; if NP1 > NP2 Then cond1 = false; } if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then entry = entry+1; ho = Dayhigh-Dayopen; OL = DayOpen-DayLow; HL = DayHigh-DayLow; sumho = 0; sumOL = 0; sumHL = 0; for cnt = 1 to 10{ sumho = sumho + (dayhigh(cnt)-dayopen(cnt)); sumOL = sumOL + (DayOpen(cnt)-DayLow(cnt)); sumHL = sumHL + (DayHigh(cnt)-DayLow(cnt)); } maho = sumho/10; maOL = sumOL/10; maHL = sumHL/10; V1 = dayopen(0)+maho; V2 = DayOpen(0)-maOL; V3 = DayOpen(0)+maHL; V4 = DayOpen(0)-maHL; V5 = NthMaxList(1,V1,V2,V3,V4); V6 = NthMaxList(2,V1,V2,V3,V4); V9 = NthMaxList(3,V1,V2,V3,V4); V10 = NthMaxList(4,V1,V2,V3,V4); V7 = (V5+V10)/2; V8 = (V6+V9)/2; if MarketPosition == 0 and entry == 0 and cond1 == true Then{ if V7 > V8 Then sell("s1",AtStop,V7); if V7 < V8 Then sell("s2",Atlimit,V8); } if MarketPosition == -1 and IsEntryName("s1") == true Then{ ExitShort("sp1",atlimit,V9); ExitShort("sl1",AtStop,V6); } if MarketPosition == -1 and IsEntryName("s2") == true Then{ ExitShort("sp2",atlimit,V9); ExitShort("sl2",AtStop,V6); } var : TF(0); var : Xtime(0), Etime(false),mav1(0),mav2(0); var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0); Array : HH[50](0),LL[50](0),CC[50](0); mav1 = ma(c,5); mav2 = ma(C,20); TF = TimeToMinutes(stime)%30; if Bdate != Bdate[1] Then{ Etime = true; if stime >= 090000 Then Xtime = 060000; Else Xtime = 060000; } if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{ HH[0] = H; LL[0] = L; for cnt = 1 to 49{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; } } if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; CC[0] = C; if HH[25+2] > 0 Then{ HV = HH[0]; LV = LL[0]; HV1 = HH[1]; LV1 = LL[1]; HV2 = HH[2]; LV2 = LL[2]; for cnt = 0 to 25{ if HH[cnt] > HV Then HV = HH[cnt]; if LL[cnt] < LV Then LV = LL[cnt]; if HH[cnt+1] > HV Then HV = HH[cnt+1]; if LL[cnt+1] < LV Then LV = LL[cnt+1]; if HH[cnt+2] > HV Then HV = HH[cnt+2]; if LL[cnt+2] < LV Then LV = LL[cnt+2]; } var1 = (HV+LV)/2; var2 = (HV1+LV1)/2; var3 = (HV2+LV2)/2; if Etime == true then{ if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then buy("b",AtMarket); if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then ExitLong("bx",AtMarket); } } if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{ Etime = false; ExitLong(); } SetStopLoss(0.8,PercentStop); SetStopProfittarget(3,PercentStop); SetStopInactivity(3,23,PercentStop);