커뮤니티

진입한 수량에서 첫번째 목표가 일부청산 후 두번째 목표가에서 나머지 청산하는 수식

프로필 이미지
예스쟁이
2023-09-12 22:52:50
877
글번호 172406
답변완료

첨부 이미지

항상 도움에 감사드립니다. 첨부한 이미지처럼 상단, 하단선을 왔다갔다 터치하는 횟수를 세다가 왔다갔다 5번 이상 되면 진입하는 수식을 아래와 같이 작성했는데요 5번 터치 후 상단을 돌파하면 매수 진입(손절은 하단위치) 5번 터치 후 하단을 이탈하면 매도 진입이고요(손절은 상단위치) 손절시 마다 재진입시 누적손실 반영해서 진입 수량을 늘려가는 방식입니다 -------------------------------------------------------- input : ntime(100000), xtime(230000); input : tick_size(10); input : line_num(5); //줄을 몇개 그을 것인지 input : num(8); // 몇번 터치하면 진입하는지. var : Tcond(False), oo(0), k(0), PriceScale_tick_size(0); var : 상단(0),하단(0),n1(0),daypl(0),vol(0),xcond(False); // 추가된 변수들 var : T(0); if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { T = 0; n1 = NetProfit; xcond = False; } if TotalTrades > TotalTrades[1] and (IsExitName("Bp",1) or IsExitName("sp",1)) Then xcond = true; if Tcond == true and xcond == False Then { if T == 0 Then { For k = 1 to line_num { if u_u_cnt[k] >= num or u_cnt[k] >= 5 Then { T = k; 상단 = u_u_line[k]; 하단 = u_line[k]; } if b_b_cnt[k] >= num or b_cnt[k] >= 5 Then { T = k; 상단 = b_line[k]; 하단 = b_b_line[k]; } } } if T != 0 Then { dayPL = (NetProfit-n1)+PositionProfit(0); if daypl >= 0 Then vol = 1; Else vol = max(Ceiling(abs(daypl)/((상단-하단)*4)),1); if MarketPosition <= 0 and CrossUp(C,상단) Then Buy("b1",AtMarket,Def,vol); if MarketPosition >= 0 and CrossDown(C,하단) Then Sell("s1",AtMarket,Def,vol); if MarketPosition == 1 Then { ExitLong("Bp",AtLimit,상단+(상단-하단)*4); } if MarketPosition == -1 Then ExitShort("sp",AtLimit,하단-(상단-하단)*4); } } ------------------------------------------------------------------- 위는 목표가격에 한번 도달하면 거래가 종료 되는데요 아래와 같이 보완, 수정하고 싶습니다. 1. 목표가격 청산을 두번으로 나눠서 2. 첫번째 목표가는 (상단-하단)x4 위치이고, 청산수량은 현재 보유한 수량의 1/2 입니다 3. 두번째 목표가는 (상단-하단)x10 위치이고, 남은 물량 전체 청산하고 거래종료. 4. 만약 첫번째 목표가에서 일부 청산 후 5. 두번째 목표가까지 도달하기 전에 6. 상단이나 하단 가격으로 가격이 되돌아간다면 7. 누적손실 반영해서 수량 늘려 재진입하는 방식 그대로 다시 재진입하고 8. 다시 첫번째 목표가 오면 1/2 청산, 9. 두번째 목표가가 오면 전량 청산하고 거래종료. 위의 과정대로 거래하는 수식을 작성하고 싶습니다 도움 부탁드립니다
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-09-13 10:30:46

안녕하세요 예스스탁입니다. input : ntime(100000), xtime(230000); input : tick_size(10); input : line_num(5); //줄을 몇개 그을 것인지 input : num(8); // 몇번 터치하면 진입하는지. var : Tcond(False), oo(0), k(0), PriceScale_tick_size(0); var : 상단(0),하단(0),n1(0),daypl(0),vol(0),xcond(False); // 추가된 변수들 var : T(0); if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { T = 0; n1 = NetProfit; xcond = False; } if TotalTrades > TotalTrades[1] and (IsExitName("Bp",1) or IsExitName("sp",1)) Then xcond = true; if Tcond == true and xcond == False Then { if T == 0 Then { For k = 1 to line_num { if u_u_cnt[k] >= num or u_cnt[k] >= 5 Then { T = k; 상단 = u_u_line[k]; 하단 = u_line[k]; } if b_b_cnt[k] >= num or b_cnt[k] >= 5 Then { T = k; 상단 = b_line[k]; 하단 = b_b_line[k]; } } } if T != 0 Then { dayPL = (NetProfit-n1)+PositionProfit(0); if daypl >= 0 Then vol = 1; Else vol = max(Ceiling(abs(daypl)/((상단-하단)*4)),1); if MarketPosition <= 0 and CrossUp(C,상단) Then Buy("b1",AtMarket,Def,vol); if MarketPosition >= 0 and CrossDown(C,하단) Then Sell("s1",AtMarket,Def,vol); if MarketPosition == 1 Then { ExitLong("Bp1",AtLimit,상단+(상단-하단)*4,"",Floor(CurrentContracts*0.5),1); ExitLong("Bp2",AtLimit,상단+(상단-하단)*10); } if MarketPosition == -1 Then { ExitShort("sp1",AtLimit,하단-(상단-하단)*4,"",Floor(CurrentContracts*0.5),1); ExitShort("sp2",AtLimit,하단-(상단-하단)*10); } } } 즐거운 하루되세요 > 예스쟁이 님이 쓴 글입니다. > 제목 : 진입한 수량에서 첫번째 목표가 일부청산 후 두번째 목표가에서 나머지 청산하는 수식 > 항상 도움에 감사드립니다. 첨부한 이미지처럼 상단, 하단선을 왔다갔다 터치하는 횟수를 세다가 왔다갔다 5번 이상 되면 진입하는 수식을 아래와 같이 작성했는데요 5번 터치 후 상단을 돌파하면 매수 진입(손절은 하단위치) 5번 터치 후 하단을 이탈하면 매도 진입이고요(손절은 상단위치) 손절시 마다 재진입시 누적손실 반영해서 진입 수량을 늘려가는 방식입니다 -------------------------------------------------------- input : ntime(100000), xtime(230000); input : tick_size(10); input : line_num(5); //줄을 몇개 그을 것인지 input : num(8); // 몇번 터치하면 진입하는지. var : Tcond(False), oo(0), k(0), PriceScale_tick_size(0); var : 상단(0),하단(0),n1(0),daypl(0),vol(0),xcond(False); // 추가된 변수들 var : T(0); if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { T = 0; n1 = NetProfit; xcond = False; } if TotalTrades > TotalTrades[1] and (IsExitName("Bp",1) or IsExitName("sp",1)) Then xcond = true; if Tcond == true and xcond == False Then { if T == 0 Then { For k = 1 to line_num { if u_u_cnt[k] >= num or u_cnt[k] >= 5 Then { T = k; 상단 = u_u_line[k]; 하단 = u_line[k]; } if b_b_cnt[k] >= num or b_cnt[k] >= 5 Then { T = k; 상단 = b_line[k]; 하단 = b_b_line[k]; } } } if T != 0 Then { dayPL = (NetProfit-n1)+PositionProfit(0); if daypl >= 0 Then vol = 1; Else vol = max(Ceiling(abs(daypl)/((상단-하단)*4)),1); if MarketPosition <= 0 and CrossUp(C,상단) Then Buy("b1",AtMarket,Def,vol); if MarketPosition >= 0 and CrossDown(C,하단) Then Sell("s1",AtMarket,Def,vol); if MarketPosition == 1 Then { ExitLong("Bp",AtLimit,상단+(상단-하단)*4); } if MarketPosition == -1 Then ExitShort("sp",AtLimit,하단-(상단-하단)*4); } } ------------------------------------------------------------------- 위는 목표가격에 한번 도달하면 거래가 종료 되는데요 아래와 같이 보완, 수정하고 싶습니다. 1. 목표가격 청산을 두번으로 나눠서 2. 첫번째 목표가는 (상단-하단)x4 위치이고, 청산수량은 현재 보유한 수량의 1/2 입니다 3. 두번째 목표가는 (상단-하단)x10 위치이고, 남은 물량 전체 청산하고 거래종료. 4. 만약 첫번째 목표가에서 일부 청산 후 5. 두번째 목표가까지 도달하기 전에 6. 상단이나 하단 가격으로 가격이 되돌아간다면 7. 누적손실 반영해서 수량 늘려 재진입하는 방식 그대로 다시 재진입하고 8. 다시 첫번째 목표가 오면 1/2 청산, 9. 두번째 목표가가 오면 전량 청산하고 거래종료. 위의 과정대로 거래하는 수식을 작성하고 싶습니다 도움 부탁드립니다