커뮤니티

수식문의드립니다.

프로필 이미지
김예스
2025-02-18 21:52:05
341
글번호 188305
답변완료
안녕하세요, 아래 분할청산식인데 trx3이 마지막 분할청산 96봉이후에 주문이 들어가게 하고 싶습니다. BarsSinceExit(1) > 96을 썼는데 안먹힙니다. 뭐가 잘못됐는지 모르겠는데 수정 부탁드립니다. input : txratio(0.3),txa(3),txam(5),txb(8),txn(2); var : trXcond1(false),trXcond2(false),trXcond3(false); if MarketPosition == 1 Then { if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx1" Then trXcond1 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx2" Then trXcond2 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx3" Then trXcond3 = true; var1 = highest(H,BarsSinceEntry); if trXcond1 == false and var1 >= EntryPrice*(txa/100+1) and var1 < EntryPrice*(((txa+txam)/100)+1) Then { ExitLong("trx1",AtStop,var1*(1-txn/100),"",currentContracts*txratio,1); } if trXcond2 == false and var1 >= EntryPrice*(txb/100+1) and var1 < EntryPrice*(((txb+txam)/100)+1) Then ExitLong("trx2",AtStop,var1*(1-txn/100),"",currentContracts*txratio,1); if (BarsSinceExit(1) > 96) and trXcond3 == false and var1 >= EntryPrice*(txa/100+1) and var1 < EntryPrice*(((txa+txam)/100)+1) Then { ExitLong("trx3",AtStop,var1*(1-(txn+1)/100),"",currentContracts*txratio,1); } } if MarketPosition != 1 Then { trXcond1 = false; trXcond2 = false; trXcond3 = false; }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-02-19 12:08:23

안녕하세요 예스스탁입니다. BarsSinceExit(1)는 직전 청산완료된 거래의 청산으로 부터 봉갯수입니다. 포지션 진행 중 분할청산시 청산봉으로 부터 봉갯수는 별도로 제공되는 함수가 없습니다. 아래와 같이 청산발생후 봉갯수를 따로 카운트해서 사용하셔야 합니다. input : txratio(0.3),txa(3),txam(5),txb(8),txn(2); var : trXcond1(false),trXcond2(false),trXcond3(false),ii(0); if MarketPosition == 1 Then { if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx1" Then trXcond1 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx2" Then trXcond2 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx3" Then trXcond3 = true; var1 = highest(H,BarsSinceEntry); if trXcond1 == false and var1 >= EntryPrice*(txa/100+1) and var1 < EntryPrice*(((txa+txam)/100)+1) Then { ExitLong("trx1",AtStop,var1*(1-txn/100),"",currentContracts*txratio,1); } if trXcond2 == false and var1 >= EntryPrice*(txb/100+1) and var1 < EntryPrice*(((txb+txam)/100)+1) Then ExitLong("trx2",AtStop,var1*(1-txn/100),"",currentContracts*txratio,1); #청산발생하면 ii는 0 if CurrentContracts < CurrentContracts[1] Then ii = 0; else { #청산발생 후 1씩 증가 if ii >= 0 Then ii = ii +1; } if (ii > 96) and trXcond3 == false and var1 >= EntryPrice*(txa/100+1) and var1 < EntryPrice*(((txa+txam)/100)+1) Then { ExitLong("trx3",AtStop,var1*(1-(txn+1)/100),"",currentContracts*txratio,1); } } Else { #매수포지션이 아니면 -1로 초기화 ii = -1; trXcond1 = false; trXcond2 = false; trXcond3 = false; } 즐거운 하루되세요 > 김예스 님이 쓴 글입니다. > 제목 : 수식문의드립니다. > 안녕하세요, 아래 분할청산식인데 trx3이 마지막 분할청산 96봉이후에 주문이 들어가게 하고 싶습니다. BarsSinceExit(1) > 96을 썼는데 안먹힙니다. 뭐가 잘못됐는지 모르겠는데 수정 부탁드립니다. input : txratio(0.3),txa(3),txam(5),txb(8),txn(2); var : trXcond1(false),trXcond2(false),trXcond3(false); if MarketPosition == 1 Then { if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx1" Then trXcond1 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx2" Then trXcond2 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "trx3" Then trXcond3 = true; var1 = highest(H,BarsSinceEntry); if trXcond1 == false and var1 >= EntryPrice*(txa/100+1) and var1 < EntryPrice*(((txa+txam)/100)+1) Then { ExitLong("trx1",AtStop,var1*(1-txn/100),"",currentContracts*txratio,1); } if trXcond2 == false and var1 >= EntryPrice*(txb/100+1) and var1 < EntryPrice*(((txb+txam)/100)+1) Then ExitLong("trx2",AtStop,var1*(1-txn/100),"",currentContracts*txratio,1); if (BarsSinceExit(1) > 96) and trXcond3 == false and var1 >= EntryPrice*(txa/100+1) and var1 < EntryPrice*(((txa+txam)/100)+1) Then { ExitLong("trx3",AtStop,var1*(1-(txn+1)/100),"",currentContracts*txratio,1); } } if MarketPosition != 1 Then { trXcond1 = false; trXcond2 = false; trXcond3 = false; }