커뮤니티

문의드립니다

프로필 이미지
cjfdk
2024-09-10 12:05:06
631
글번호 183314
답변완료
input : tenkan_len(9),tenkan_mult(2),kijun_len(26),kijun_mult(4),spanB_len(52),spanB_mult(6),offset(26); Input : 수량1(1),수량2(2),당일수익틱수1(100),당일손실틱수1(200); Input : 당일수익틱수2(200),당일손실틱수2(300); Var : N1(0),dayPl(0),당일수익1(0),당일손실1(0),당일수익2(0),당일손실2(0),vol(0); var : Xcond(false); var : ATR1(0),up1(0),dn1(0),upper1(0),lower1(0),os1(0),spt1(0),max1(0),min1(0),tenkan(0); var : ATR2(0),up2(0),dn2(0),upper2(0),lower2(0),os2(0),spt2(0),max2(0),min2(0),kijun(0); var : senkouA(0); var : ATR3(0),up3(0),dn3(0),upper3(0),lower3(0),os3(0),spt3(0),max3(0),min3(0),senkouB(0); var : tenkan_css(0),kijun_css(0),cloud_a(0),cloud_b(0),chikou_css(0),tx(0); ATR1 = ATR(tenkan_len)*tenkan_mult; up1 = (h+L)/2 + ATR1; dn1 = (h+L)/2 - ATR1; upper1 = iff(C[1] < upper1[1],min(up1,upper1[1]),up1); lower1 = iff(C[1] > lower1[1],max(dn1,lower1[1]),dn1); os1 = iff(c > upper1 , 1 ,IFf(c < lower1, 0 , os1[1])); spt1 = iff(os1 == 1 , lower1 , upper1); max1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , max(c,max1[1]) , IFf(os1 == 1 , max(c,max1[1]) , spt1)); min1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , min(c,min1[1]) , iff(os1 == 0 , min(c,min1[1]) , spt1)); tenkan = avg(max1,min1); ATR2 = ATR(kijun_len)*kijun_mult; up2 = (h+L)/2 + ATR2; dn2 = (h+L)/2 - ATR2; upper2 = iff(C[1] < upper2[1],min(up2,upper2[1]),up2); lower2 = iff(C[1] > lower2[1],max(dn2,lower2[1]),dn2); os2 = iff(c > upper2 , 1 ,IFf(c < lower2, 0 , os2[1])); spt2 = iff(os2 == 1 , lower2 , upper2); max2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , max(c,max2[1]) , IFf(os2 == 1 , max(c,max2[1]) , spt2)); min2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , min(c,min2[1]) , iff(os2 == 0 , min(c,min2[1]) , spt2)); kijun = avg(max2,min2); senkouA = avg(kijun,tenkan); ATR3 = ATR(spanB_len)*spanB_mult; up3 = (h+L)/2 + ATR3; dn3 = (h+L)/2 - ATR3; upper3 = iff(C[1] < upper3[1],min(up3,upper3[1]),up3); lower3 = iff(C[1] > lower3[1],max(dn3,lower3[1]),dn3); os3 = iff(c > upper3 , 1 ,IFf(c < lower3, 0 , os3[1])); spt3 = iff(os3 == 1 , lower3 , upper3); max3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , max(c,max3[1]) , IFf(os3 == 1 , max(c,max3[1]) , spt3)); min3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , min(c,min3[1]) , iff(os3 == 0 , min(c,min3[1]) , spt3)); senkouB = avg(max3,min3); tenkan_css = Red; kijun_css = Blue; cloud_a = teal; cloud_b = red; chikou_css = Green; 당일수익1 = PriceScale*당일수익틱수1; 당일손실1 = PriceScale*당일손실틱수1; 당일수익2 = PriceScale*당일수익틱수2; 당일손실2 = PriceScale*당일손실틱수2; if Bdate != Bdate[1] Then { Xcond = false; N1 = NetProfit; vol = 수량1; } daypl = NetProfit-N1; if TotalTrades > TotalTrades[1] then { if daypl >= 당일수익1 or daypl >= 당일수익2 Then Xcond = true; if IsExitName("dbp1",1) == true or IsExitName("dsp1",1) == true or IsExitName("dbp2",1) == true or IsExitName("dsp2",1) == true Then Xcond = true; if vol == 수량1 and daypl <= -당일손실1 Then { vol = 수량2; } if vol == 수량2 and daypl <= -당일손실2 Then { Xcond = true; } if vol == 수량1 and (IsExitName("dbl1",1) == true or IsExitName("dsl1",1) == true) then { vol = 수량2; } if vol == 수량2 and (IsExitName("dbl2",1) == true or IsExitName("dsl2",1) == true) then { Xcond = true; } } if Xcond == false Then { if CrossUp(tenkan,kijun) Then { Buy("b",OnClose,Def,vol); } if CrossDown(tenkan,kijun) Then { sell("s",OnClose,Def,vol); } } if MarketPosition == 1 then { if vol == 수량1 Then { ExitLong("dbp1",atlimit,EntryPrice+((당일수익1-daypl)/CurrentContracts)); ExitLong("dbl1",AtStop,EntryPrice-((당일손실1+daypl)/CurrentContracts)); } if vol == 수량2 Then { ExitLong("dbp2",atlimit,EntryPrice+((당일수익2-daypl)/CurrentContracts)); ExitLong("dbl2",AtStop,EntryPrice-((당일손실2+daypl)/CurrentContracts)); } } if MarketPosition == -1 then { if vol == 수량1 Then { ExitShort("dsp1",atlimit,EntryPrice-((당일수익1-daypl)/CurrentContracts)); ExitShort("dsl1",AtStop,EntryPrice+((당일손실1+daypl)/CurrentContracts)); } if vol == 수량2 Then { ExitShort("dsp2",atlimit,EntryPrice-((당일수익2-daypl)/CurrentContracts)); ExitShort("dsl2",AtStop,EntryPrice+((당일손실2+daypl)/CurrentContracts)); } } 수고 많으십니다 도움주신 수식 감사드립니다 위 수식이 제가 설명이 부족해 의도한데로 돼지않아 송구하지만 한번 더 도움 부탁드립니다 처음 수식은 1계약 진입하여 100틱 익절이나 손실이면 당일 매매 종료 였으나 100틱이 익절이면 당일 매매를 종료하고 만약 100틱이 소실이 난다면 그 시간부터 다시 2차를 적용하여 2계약으로 손실 200틱 이면 당일 2차매매 종료 익절 300틱 이면 당일 2차매매 종료 이렇게 부탁드립니다 현재 수식은 손절이 1차 2차 합처서 100틱면 당일 종료로 나와서 수정 요청드립니다 감사드립니다
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-09-10 17:00:02

안녕하세요 예스스탁입니다. 현재 손익이 당일 누적수익으로 계산이 됩니다. 1차손절이 100틱, 2차손절이 200틱 설정상태에서 1차 손절이 발생하면 수량은 2가 되므로 이후 누적손실이 1계약당 50틱이면 청산이 되서 2계약 총 100틱으로 청산이 되고 1차 2차 합쳐서 200틱이 됩니다. 1차 손절이 나면 손익을 해당시점부터 다시 체크하게 수정해 드립니다. 2차는 2계약이므로 1계약당 100틱 손실이면 청산이되고 당일 누적은 100틱+200틱으로 300틱이 됩니다. input : tenkan_len(9),tenkan_mult(2),kijun_len(26),kijun_mult(4),spanB_len(52),spanB_mult(6),offset(26); Input : 수량1(1),수량2(2),당일수익틱수1(100),당일손실틱수1(200); Input : 당일수익틱수2(200),당일손실틱수2(300); Var : N1(0),dayPl(0),당일수익1(0),당일손실1(0),당일수익2(0),당일손실2(0),vol(0); var : Xcond(false); var : ATR1(0),up1(0),dn1(0),upper1(0),lower1(0),os1(0),spt1(0),max1(0),min1(0),tenkan(0); var : ATR2(0),up2(0),dn2(0),upper2(0),lower2(0),os2(0),spt2(0),max2(0),min2(0),kijun(0); var : senkouA(0); var : ATR3(0),up3(0),dn3(0),upper3(0),lower3(0),os3(0),spt3(0),max3(0),min3(0),senkouB(0); var : tenkan_css(0),kijun_css(0),cloud_a(0),cloud_b(0),chikou_css(0),tx(0); ATR1 = ATR(tenkan_len)*tenkan_mult; up1 = (h+L)/2 + ATR1; dn1 = (h+L)/2 - ATR1; upper1 = iff(C[1] < upper1[1],min(up1,upper1[1]),up1); lower1 = iff(C[1] > lower1[1],max(dn1,lower1[1]),dn1); os1 = iff(c > upper1 , 1 ,IFf(c < lower1, 0 , os1[1])); spt1 = iff(os1 == 1 , lower1 , upper1); max1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , max(c,max1[1]) , IFf(os1 == 1 , max(c,max1[1]) , spt1)); min1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , min(c,min1[1]) , iff(os1 == 0 , min(c,min1[1]) , spt1)); tenkan = avg(max1,min1); ATR2 = ATR(kijun_len)*kijun_mult; up2 = (h+L)/2 + ATR2; dn2 = (h+L)/2 - ATR2; upper2 = iff(C[1] < upper2[1],min(up2,upper2[1]),up2); lower2 = iff(C[1] > lower2[1],max(dn2,lower2[1]),dn2); os2 = iff(c > upper2 , 1 ,IFf(c < lower2, 0 , os2[1])); spt2 = iff(os2 == 1 , lower2 , upper2); max2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , max(c,max2[1]) , IFf(os2 == 1 , max(c,max2[1]) , spt2)); min2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , min(c,min2[1]) , iff(os2 == 0 , min(c,min2[1]) , spt2)); kijun = avg(max2,min2); senkouA = avg(kijun,tenkan); ATR3 = ATR(spanB_len)*spanB_mult; up3 = (h+L)/2 + ATR3; dn3 = (h+L)/2 - ATR3; upper3 = iff(C[1] < upper3[1],min(up3,upper3[1]),up3); lower3 = iff(C[1] > lower3[1],max(dn3,lower3[1]),dn3); os3 = iff(c > upper3 , 1 ,IFf(c < lower3, 0 , os3[1])); spt3 = iff(os3 == 1 , lower3 , upper3); max3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , max(c,max3[1]) , IFf(os3 == 1 , max(c,max3[1]) , spt3)); min3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , min(c,min3[1]) , iff(os3 == 0 , min(c,min3[1]) , spt3)); senkouB = avg(max3,min3); tenkan_css = Red; kijun_css = Blue; cloud_a = teal; cloud_b = red; chikou_css = Green; 당일수익1 = PriceScale*당일수익틱수1; 당일손실1 = PriceScale*당일손실틱수1; 당일수익2 = PriceScale*당일수익틱수2; 당일손실2 = PriceScale*당일손실틱수2; if Bdate != Bdate[1] Then { Xcond = false; N1 = NetProfit; vol = 수량1; } daypl = NetProfit-N1; if TotalTrades > TotalTrades[1] then { if daypl >= 당일수익1 or daypl >= 당일수익2 Then Xcond = true; if IsExitName("dbp1",1) == true or IsExitName("dsp1",1) == true or IsExitName("dbp2",1) == true or IsExitName("dsp2",1) == true Then Xcond = true; if vol == 수량1 and daypl <= -당일손실1 Then { vol = 수량2; N1 = NetProfit; } if vol == 수량2 and daypl <= -당일손실2 Then { Xcond = true; } if vol == 수량1 and (IsExitName("dbl1",1) == true or IsExitName("dsl1",1) == true) then { vol = 수량2; N1 = NetProfit; } if vol == 수량2 and (IsExitName("dbl2",1) == true or IsExitName("dsl2",1) == true) then { Xcond = true; } } if Xcond == false Then { if CrossUp(tenkan,kijun) Then { Buy("b",OnClose,Def,vol); } if CrossDown(tenkan,kijun) Then { sell("s",OnClose,Def,vol); } } if MarketPosition == 1 then { if vol == 수량1 Then { ExitLong("dbp1",atlimit,EntryPrice+((당일수익1-daypl)/CurrentContracts)); ExitLong("dbl1",AtStop,EntryPrice-((당일손실1+daypl)/CurrentContracts)); } if vol == 수량2 Then { ExitLong("dbp2",atlimit,EntryPrice+((당일수익2-daypl)/CurrentContracts)); ExitLong("dbl2",AtStop,EntryPrice-((당일손실2+daypl)/CurrentContracts)); } } if MarketPosition == -1 then { if vol == 수량1 Then { ExitShort("dsp1",atlimit,EntryPrice-((당일수익1-daypl)/CurrentContracts)); ExitShort("dsl1",AtStop,EntryPrice+((당일손실1+daypl)/CurrentContracts)); } if vol == 수량2 Then { ExitShort("dsp2",atlimit,EntryPrice-((당일수익2-daypl)/CurrentContracts)); ExitShort("dsl2",AtStop,EntryPrice+((당일손실2+daypl)/CurrentContracts)); } } 즐거운 하루되세요 > cjfdk 님이 쓴 글입니다. > 제목 : 문의드립니다 > input : tenkan_len(9),tenkan_mult(2),kijun_len(26),kijun_mult(4),spanB_len(52),spanB_mult(6),offset(26); Input : 수량1(1),수량2(2),당일수익틱수1(100),당일손실틱수1(200); Input : 당일수익틱수2(200),당일손실틱수2(300); Var : N1(0),dayPl(0),당일수익1(0),당일손실1(0),당일수익2(0),당일손실2(0),vol(0); var : Xcond(false); var : ATR1(0),up1(0),dn1(0),upper1(0),lower1(0),os1(0),spt1(0),max1(0),min1(0),tenkan(0); var : ATR2(0),up2(0),dn2(0),upper2(0),lower2(0),os2(0),spt2(0),max2(0),min2(0),kijun(0); var : senkouA(0); var : ATR3(0),up3(0),dn3(0),upper3(0),lower3(0),os3(0),spt3(0),max3(0),min3(0),senkouB(0); var : tenkan_css(0),kijun_css(0),cloud_a(0),cloud_b(0),chikou_css(0),tx(0); ATR1 = ATR(tenkan_len)*tenkan_mult; up1 = (h+L)/2 + ATR1; dn1 = (h+L)/2 - ATR1; upper1 = iff(C[1] < upper1[1],min(up1,upper1[1]),up1); lower1 = iff(C[1] > lower1[1],max(dn1,lower1[1]),dn1); os1 = iff(c > upper1 , 1 ,IFf(c < lower1, 0 , os1[1])); spt1 = iff(os1 == 1 , lower1 , upper1); max1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , max(c,max1[1]) , IFf(os1 == 1 , max(c,max1[1]) , spt1)); min1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , min(c,min1[1]) , iff(os1 == 0 , min(c,min1[1]) , spt1)); tenkan = avg(max1,min1); ATR2 = ATR(kijun_len)*kijun_mult; up2 = (h+L)/2 + ATR2; dn2 = (h+L)/2 - ATR2; upper2 = iff(C[1] < upper2[1],min(up2,upper2[1]),up2); lower2 = iff(C[1] > lower2[1],max(dn2,lower2[1]),dn2); os2 = iff(c > upper2 , 1 ,IFf(c < lower2, 0 , os2[1])); spt2 = iff(os2 == 1 , lower2 , upper2); max2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , max(c,max2[1]) , IFf(os2 == 1 , max(c,max2[1]) , spt2)); min2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , min(c,min2[1]) , iff(os2 == 0 , min(c,min2[1]) , spt2)); kijun = avg(max2,min2); senkouA = avg(kijun,tenkan); ATR3 = ATR(spanB_len)*spanB_mult; up3 = (h+L)/2 + ATR3; dn3 = (h+L)/2 - ATR3; upper3 = iff(C[1] < upper3[1],min(up3,upper3[1]),up3); lower3 = iff(C[1] > lower3[1],max(dn3,lower3[1]),dn3); os3 = iff(c > upper3 , 1 ,IFf(c < lower3, 0 , os3[1])); spt3 = iff(os3 == 1 , lower3 , upper3); max3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , max(c,max3[1]) , IFf(os3 == 1 , max(c,max3[1]) , spt3)); min3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , min(c,min3[1]) , iff(os3 == 0 , min(c,min3[1]) , spt3)); senkouB = avg(max3,min3); tenkan_css = Red; kijun_css = Blue; cloud_a = teal; cloud_b = red; chikou_css = Green; 당일수익1 = PriceScale*당일수익틱수1; 당일손실1 = PriceScale*당일손실틱수1; 당일수익2 = PriceScale*당일수익틱수2; 당일손실2 = PriceScale*당일손실틱수2; if Bdate != Bdate[1] Then { Xcond = false; N1 = NetProfit; vol = 수량1; } daypl = NetProfit-N1; if TotalTrades > TotalTrades[1] then { if daypl >= 당일수익1 or daypl >= 당일수익2 Then Xcond = true; if IsExitName("dbp1",1) == true or IsExitName("dsp1",1) == true or IsExitName("dbp2",1) == true or IsExitName("dsp2",1) == true Then Xcond = true; if vol == 수량1 and daypl <= -당일손실1 Then { vol = 수량2; } if vol == 수량2 and daypl <= -당일손실2 Then { Xcond = true; } if vol == 수량1 and (IsExitName("dbl1",1) == true or IsExitName("dsl1",1) == true) then { vol = 수량2; } if vol == 수량2 and (IsExitName("dbl2",1) == true or IsExitName("dsl2",1) == true) then { Xcond = true; } } if Xcond == false Then { if CrossUp(tenkan,kijun) Then { Buy("b",OnClose,Def,vol); } if CrossDown(tenkan,kijun) Then { sell("s",OnClose,Def,vol); } } if MarketPosition == 1 then { if vol == 수량1 Then { ExitLong("dbp1",atlimit,EntryPrice+((당일수익1-daypl)/CurrentContracts)); ExitLong("dbl1",AtStop,EntryPrice-((당일손실1+daypl)/CurrentContracts)); } if vol == 수량2 Then { ExitLong("dbp2",atlimit,EntryPrice+((당일수익2-daypl)/CurrentContracts)); ExitLong("dbl2",AtStop,EntryPrice-((당일손실2+daypl)/CurrentContracts)); } } if MarketPosition == -1 then { if vol == 수량1 Then { ExitShort("dsp1",atlimit,EntryPrice-((당일수익1-daypl)/CurrentContracts)); ExitShort("dsl1",AtStop,EntryPrice+((당일손실1+daypl)/CurrentContracts)); } if vol == 수량2 Then { ExitShort("dsp2",atlimit,EntryPrice-((당일수익2-daypl)/CurrentContracts)); ExitShort("dsl2",AtStop,EntryPrice+((당일손실2+daypl)/CurrentContracts)); } } 수고 많으십니다 도움주신 수식 감사드립니다 위 수식이 제가 설명이 부족해 의도한데로 돼지않아 송구하지만 한번 더 도움 부탁드립니다 처음 수식은 1계약 진입하여 100틱 익절이나 손실이면 당일 매매 종료 였으나 100틱이 익절이면 당일 매매를 종료하고 만약 100틱이 소실이 난다면 그 시간부터 다시 2차를 적용하여 2계약으로 손실 200틱 이면 당일 2차매매 종료 익절 300틱 이면 당일 2차매매 종료 이렇게 부탁드립니다 현재 수식은 손절이 1차 2차 합처서 100틱면 당일 종료로 나와서 수정 요청드립니다 감사드립니다