커뮤니티

추가매수한 것이 최초 매수한것과 같은 값이 손절하는 수식 요청합니다.

프로필 이미지
이형지
2020-06-08 11:11:07
2091
글번호 139615
답변완료
최초 진입후 150틱 하락시마다 추가 매수 를 총 3회까지 하는 수식인데... 아래 청산수식은 진입한 계약수가 일괄 청산되는데요... if C <= EntryPrice and sum >= 손절갯수 Then exitlong("bx1"); 아래 청산수식은 즉시손절값,터치익절값으로 청산이 되네요....(순차적으로) SetStopProfittarget(터치익절 , PercentStop); SetStopLoss(즉시손절 , PercentStop); 제가 원하는 청산 수식은 다음과 같습니다. 터치익절 1% 설정시 터치익절 최초 매수계약분은 1% 수익청산 만약 150틱하락해서 추가매수분은 1%+150틱 수익청산 결국 최초 매수된 값의 1% 수익시 추가매수분은 해당 청산값에 일괄 청산하는 청산식 손절청산도 마찬가지입니다. 현재는 -1% 손실시 추가매수분은 순차적으로 손실청산되는데요... 원하는 청산손실방법은 최초 진입가에 -1%가되면 추가로 매수된 2개 계약을 포함하여 일괄 청산되는 수식으로 요청드림니다. 제가 SetStopProfittarget(터치익절 , PercentStop); SetStopLoss(즉시손절 , PercentStop); 를 쓰는 이유는 매수한 봉에서도 익절값이나 손절값이 도달시 청산되는 것이 구현하고 싶어서 저 수식을 사용하였던 것이였습니다. 그런데 추가진입하는 수식을 부여하니 위와 같은 생각하지 못한 변수들이 나오네요~~ 저의고민을 풀어주시면 감사하겠습니다. 위 청산식에서는 최초 input : 우상향값(15); input : 이평봉수(3); input : 진입이평(3); Input : DMIPeriod(25); #청산 조건 input : 이평값5(5), 이평값6(15); input : 터치익절(2.9),즉시손절(1.9); input : MACDshortP(40); input : 손절갯수(4),일프로미만청산갯수(4),이프로미만청산갯수(3); input : 이익청산률(1.015); Input : tr수익(200),tr하락(200); Input : 분할매수횟수(3),분할매수틱수(150); var : sarv(0,data1),BBup(0),BuyEntry(false); var : ii(-1),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0); var : cond1(false,data1),cond2(false,data1),i1(0,data1),i2(0,data1); var : T(0); var1 = ma(C,우상향값); var2 = ma(C,진입이평); value1 = DIPlus(DMIPeriod); value2 = DIMinus(DMIPeriod); #----------------------------------- Var : value(0) , macdosc(0) ; value = MACD(MACDshortP,MACDshortP*2); macdosc = value-ema(value,9); #---------------------------------------- if var1 > var1[1] Then T = 1; if var1 < var1[1] Then T = -1; #상향반전 if T == 1 and T != T[1] Then { BuyEntry = true; ii = index; } #상향반전후 10봉 이내 if MarketPosition == 0 and BuyEntry == true and index < ii+이평봉수 and value1 > value2 Then { if NextBarOpen <= var2 Then buy("b1",AtStop,var2); Else buy("b2",Atlimit,var2); } #추가진입 if MarketPosition == 1 and MaxEntries < 분할매수횟수 Then buy("추가매수",atlimit,LatestEntryPrice(0)-PriceScale*분할매수틱수,1); #========================================================================== mav5 = ma(c,이평값5); mav6 = ma(c,이평값6); var : sum(0); if MarketPosition == 1 then { BuyEntry = false; sum = 0; if CrossDown(c,mav5) Then # 2번째 이평선 sum = sum+1; if CrossDown(c,mav6) Then # 2번째 이평선 sum = sum+1; if C < sarv Then sum = sum+1; if macdosc <= 0 Then sum = sum+1; if (sdate != sdate[1] and stime >= 050000) or (sdate == sdate[1] and stime >= 050000 and stime[1] < 050000) then sum = sum+1; if (DayOfWeek(sdate) == 6 and sdate != sdate[1] and stime >= 050000) or (DayOfWeek(sdate) == 6 and sdate == sdate[1] and stime >= 050000 and stime[1] < 050000) then sum = sum+1; if C <= EntryPrice and sum >= 손절갯수 Then exitlong("bx1"); if C > EntryPrice and C <= EntryPrice*이익청산률 and sum >= 일프로미만청산갯수 Then exitlong("bx2"); if C > EntryPrice*이익청산률 and sum >= 이프로미만청산갯수 Then exitlong("bx3"); if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*tr수익 Then ExitLong("tr",AtStop, highest(H,BarsSinceEntry)-PriceScale*tr하락); } SetStopLoss(즉시손절 , PercentStop); SetStopProfittarget(터치익절 , PercentStop);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-06-08 16:44:08

안녕하세요 예스스탁입니다. SetStopProfittarget SetStopLoss 강제청산은 각 진입별로 동작을 합니다. 아래와 같이 무포지션에서 진입할때와 그 이후에 감시하는 내용을 추가해 주시면 됩니다. input : 우상향값(15); input : 이평봉수(3); input : 진입이평(3); Input : DMIPeriod(25); #청산 조건 input : 이평값5(5), 이평값6(15); input : 터치익절(2.9),즉시손절(1.9); input : MACDshortP(40); input : 손절갯수(4),일프로미만청산갯수(4),이프로미만청산갯수(3); input : 이익청산률(1.015); Input : tr수익(200),tr하락(200); Input : 분할매수횟수(3),분할매수틱수(150); var : sarv(0,data1),BBup(0),BuyEntry(false); var : ii(-1),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0); var : cond1(false,data1),cond2(false,data1),i1(0,data1),i2(0,data1); var : T(0); var1 = ma(C,우상향값); var2 = ma(C,진입이평); value1 = DIPlus(DMIPeriod); value2 = DIMinus(DMIPeriod); #----------------------------------- Var : value(0) , macdosc(0) ; value = MACD(MACDshortP,MACDshortP*2); macdosc = value-ema(value,9); #---------------------------------------- if var1 > var1[1] Then T = 1; if var1 < var1[1] Then T = -1; #상향반전 if T == 1 and T != T[1] Then { BuyEntry = true; ii = index; } #상향반전후 10봉 이내 if MarketPosition == 0 and BuyEntry == true and index < ii+이평봉수 and value1 > value2 Then { if NextBarOpen <= var2 Then { buy("b1",AtStop,var2); ExitLong("bp1",atlimit,var2*(1+터치익절/100)); ExitLong("bl1",AtStop,var2*(1-즉시손절/100)); } Else { buy("b2",Atlimit,var2); ExitLong("bp2",atlimit,var2*(1+터치익절/100)); ExitLong("bl2",AtStop,var2*(1-즉시손절/100)); } } #추가진입 if MarketPosition == 1 and MaxEntries < 분할매수횟수 Then buy("추가매수",atlimit,LatestEntryPrice(0)-PriceScale*분할매수틱수,1); #========================================================================== mav5 = ma(c,이평값5); mav6 = ma(c,이평값6); var : sum(0); if MarketPosition == 1 then { BuyEntry = false; sum = 0; if CrossDown(c,mav5) Then # 2번째 이평선 sum = sum+1; if CrossDown(c,mav6) Then # 2번째 이평선 sum = sum+1; if C < sarv Then sum = sum+1; if macdosc <= 0 Then sum = sum+1; if (sdate != sdate[1] and stime >= 050000) or (sdate == sdate[1] and stime >= 050000 and stime[1] < 050000) then sum = sum+1; if (DayOfWeek(sdate) == 6 and sdate != sdate[1] and stime >= 050000) or (DayOfWeek(sdate) == 6 and sdate == sdate[1] and stime >= 050000 and stime[1] < 050000) then sum = sum+1; if C <= EntryPrice and sum >= 손절갯수 Then exitlong("bx1"); if C > EntryPrice and C <= EntryPrice*이익청산률 and sum >= 일프로미만청산갯수 Then exitlong("bx2"); if C > EntryPrice*이익청산률 and sum >= 이프로미만청산갯수 Then exitlong("bx3"); if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*tr수익 Then ExitLong("tr",AtStop, highest(H,BarsSinceEntry)-PriceScale*tr하락); ExitLong("bp",atlimit,EntryPrice*(1+터치익절/100)); ExitLong("bl",AtStop,EntryPrice*(1-즉시손절/100)); } 즐거운 하루되세요 > 이형지 님이 쓴 글입니다. > 제목 : 추가매수한 것이 최초 매수한것과 같은 값이 손절하는 수식 요청합니다. > 최초 진입후 150틱 하락시마다 추가 매수 를 총 3회까지 하는 수식인데... 아래 청산수식은 진입한 계약수가 일괄 청산되는데요... if C <= EntryPrice and sum >= 손절갯수 Then exitlong("bx1"); 아래 청산수식은 즉시손절값,터치익절값으로 청산이 되네요....(순차적으로) SetStopProfittarget(터치익절 , PercentStop); SetStopLoss(즉시손절 , PercentStop); 제가 원하는 청산 수식은 다음과 같습니다. 터치익절 1% 설정시 터치익절 최초 매수계약분은 1% 수익청산 만약 150틱하락해서 추가매수분은 1%+150틱 수익청산 결국 최초 매수된 값의 1% 수익시 추가매수분은 해당 청산값에 일괄 청산하는 청산식 손절청산도 마찬가지입니다. 현재는 -1% 손실시 추가매수분은 순차적으로 손실청산되는데요... 원하는 청산손실방법은 최초 진입가에 -1%가되면 추가로 매수된 2개 계약을 포함하여 일괄 청산되는 수식으로 요청드림니다. 제가 SetStopProfittarget(터치익절 , PercentStop); SetStopLoss(즉시손절 , PercentStop); 를 쓰는 이유는 매수한 봉에서도 익절값이나 손절값이 도달시 청산되는 것이 구현하고 싶어서 저 수식을 사용하였던 것이였습니다. 그런데 추가진입하는 수식을 부여하니 위와 같은 생각하지 못한 변수들이 나오네요~~ 저의고민을 풀어주시면 감사하겠습니다. 위 청산식에서는 최초 input : 우상향값(15); input : 이평봉수(3); input : 진입이평(3); Input : DMIPeriod(25); #청산 조건 input : 이평값5(5), 이평값6(15); input : 터치익절(2.9),즉시손절(1.9); input : MACDshortP(40); input : 손절갯수(4),일프로미만청산갯수(4),이프로미만청산갯수(3); input : 이익청산률(1.015); Input : tr수익(200),tr하락(200); Input : 분할매수횟수(3),분할매수틱수(150); var : sarv(0,data1),BBup(0),BuyEntry(false); var : ii(-1),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0); var : cond1(false,data1),cond2(false,data1),i1(0,data1),i2(0,data1); var : T(0); var1 = ma(C,우상향값); var2 = ma(C,진입이평); value1 = DIPlus(DMIPeriod); value2 = DIMinus(DMIPeriod); #----------------------------------- Var : value(0) , macdosc(0) ; value = MACD(MACDshortP,MACDshortP*2); macdosc = value-ema(value,9); #---------------------------------------- if var1 > var1[1] Then T = 1; if var1 < var1[1] Then T = -1; #상향반전 if T == 1 and T != T[1] Then { BuyEntry = true; ii = index; } #상향반전후 10봉 이내 if MarketPosition == 0 and BuyEntry == true and index < ii+이평봉수 and value1 > value2 Then { if NextBarOpen <= var2 Then buy("b1",AtStop,var2); Else buy("b2",Atlimit,var2); } #추가진입 if MarketPosition == 1 and MaxEntries < 분할매수횟수 Then buy("추가매수",atlimit,LatestEntryPrice(0)-PriceScale*분할매수틱수,1); #========================================================================== mav5 = ma(c,이평값5); mav6 = ma(c,이평값6); var : sum(0); if MarketPosition == 1 then { BuyEntry = false; sum = 0; if CrossDown(c,mav5) Then # 2번째 이평선 sum = sum+1; if CrossDown(c,mav6) Then # 2번째 이평선 sum = sum+1; if C < sarv Then sum = sum+1; if macdosc <= 0 Then sum = sum+1; if (sdate != sdate[1] and stime >= 050000) or (sdate == sdate[1] and stime >= 050000 and stime[1] < 050000) then sum = sum+1; if (DayOfWeek(sdate) == 6 and sdate != sdate[1] and stime >= 050000) or (DayOfWeek(sdate) == 6 and sdate == sdate[1] and stime >= 050000 and stime[1] < 050000) then sum = sum+1; if C <= EntryPrice and sum >= 손절갯수 Then exitlong("bx1"); if C > EntryPrice and C <= EntryPrice*이익청산률 and sum >= 일프로미만청산갯수 Then exitlong("bx2"); if C > EntryPrice*이익청산률 and sum >= 이프로미만청산갯수 Then exitlong("bx3"); if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*tr수익 Then ExitLong("tr",AtStop, highest(H,BarsSinceEntry)-PriceScale*tr하락); } SetStopLoss(즉시손절 , PercentStop); SetStopProfittarget(터치익절 , PercentStop);