커뮤니티

피라미딩 브레이큰스탑

프로필 이미지
히익
2024-03-31 23:06:10
381
글번호 178106
답변완료
안녕하세요 항상 도움 주셔서 감사합니다. 아래는 피라미딩 수식입니다. ///////////////////////////////////////피라미딩 전략//////////////////////// Input : asset(100000000),XT1(150000); var : PP(0), R1(0); var : LV(0); PP = (DayHigh(1)+DayLow(1)+DayClose(1))/3; # 피벗기준선 R1 = PP * 2 - DayLow(1); # 피벗1차저항 LV = (DayHigh(1)-DayLow(1))/3; #손절폭 If Bdate[1]!=Bdate Then { Value68=0; Value69=0; Value67=0; } If ExitName(1)=="StopLoss" && MarketPosition==1 && CurrentEntries[1]>CurrentEntries Then Value68=1; If MarketPosition==0 && entriestoday<1 Then // entriestoday는 거래횟수 사용자함수. { Buy("",AtStop,R1,Max(int(E_num(LV,asset,0.01)/20),1)); } If CurrentEntries[1]!=CurrentEntries Then Value67=Value67+1; If MarketPosition==1 && CurrentEntries<Min(E_num(LV,asset,0.01),20) && Value67<Min(E_num(LV,asset,0.01),20) && Value68==0 Then Buy("매수1",AtStop,Highest(H,BarsSinceEntry+1)+PriceScale,Max(int(E_num(LV,asset,0.01)/20),1)); SetStopLoss(LV,PointStop); If NextBarStime==XT1 Then ExitLong(); ///////////////////////////////////////////////////////////////////////////// 여기서 E_num 은 자금관리 사용자 함수로서, 진입 때마다 계약수가 다르게 설정됩니다. *E_num 사용자 수식 : Inputs: N(NumericSimple), Capital(NumericSimple), LossRatio(NumericSimple) ; E_num = Int( (Capital * LossRatio) / (N * BigPointValue) ); /////////////////////////////////////////////////////////////////// 궁금한 점은 각 포지션마다 손절 되게끔 setstoploss 를 걸어놨는데, 또 각 포지션마다 브레이큰스탑도 가능하게 하고 싶습니다. 그 브레이큰의 조건은 다음과 같습니다. //////////////////////////////////////////////////////////////////////// If MarketPosition==1 && Highest(H,BarsSinceEntry+1)>EntryPrice+LV*3 Then ExitLong("브레이큰",AtStop,EntryPrice); ///////////////////////////////////////////////////////////////////////// 이게 단일 포지션 거래 때는 잘 작동되지만, 피라미딩 때는 초기 진입가격에 대한 브레이큰 스탑만 적용됩니다. 각각의 포지션 별로 브레이큰 스탑을 하는 방법을 여쭙고 싶습니다. 항상 도움 주셔서 감사합니다. 건강조심하세요
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-04-02 10:42:50

안녕하세요 예스스탁입니다. 올려주신 내용은 강제청산함수(SetStopTrailing)로 처리가 되지 않는 내용이라 각 진입별 진입가/최고가/수량을 저장해서 각각의 청산함수로 처리해야 합니다. 아래 추가해드린 내용을 참고하시기 바랍니다. 최대 20회가지 진입하므로 나열해서 20회까지 작성하시면 됩니다. 아래식에는 시간상 3회까지만 작성해 드립니다. Input : asset(100000000),XT1(150000); var : PP(0), R1(0),LV(0),cnt(0); Array : EP[30](00),EH[30](0),EV[30](0); PP = (DayHigh(1)+DayLow(1)+DayClose(1))/3; # 피벗기준선 R1 = PP * 2 - DayLow(1); # 피벗1차저항 LV = (DayHigh(1)-DayLow(1))/3; #손절폭 If Bdate[1]!=Bdate Then { Value68=0; Value69=0; Value67=0; } If ExitName(1)=="StopLoss" && MarketPosition==1 && CurrentEntries[1]>CurrentEntries Then Value68=1; If MarketPosition==0 && entriestoday<1 Then // entriestoday는 거래횟수 사용자함수. { Buy("",AtStop,R1,Max(int(E_num(LV,asset,0.01)/20),1)); } If CurrentEntries[1]!=CurrentEntries Then Value67=Value67+1; If MarketPosition==1 && CurrentEntries<Min(E_num(LV,asset,0.01),20) && Value67<Min(E_num(LV,asset,0.01),20) && Value68==0 Then Buy("매수1",AtStop,Highest(H,BarsSinceEntry+1)+PriceScale,Max(int(E_num(LV,asset,0.01)/20),1)); if MarketPosition == 1 Then { #진입별 진입가/최고가/수량 저장 if CurrentContracts > CurrentContracts[1] Then { EP[MaxEntries] = LatestEntryPrice(0); EH[MaxEntries] = H; EV[MaxEntries] = CurrentContracts-CurrentContracts[1]; } #진입별 진입이후 최고가 갱신 if MaxEntries >= 1 Then { For cnt = 1 to MaxEntries { if H > EH[cnt] Then EH[cnt] = H; } } //청산되었으면 진입가를 0으로 만들어 추가 발생방지 if CurrentContracts < CurrentContracts[1] Then { if LatestExitName(0) == "브레이큰1" Then EP[1] == 0; if LatestExitName(0) == "브레이큰2" Then EP[2] == 0; if LatestExitName(0) == "브레이큰3" Then EP[3] == 0; ..... if LatestExitName(0) == "브레이큰20" Then EP[20] == 0; } if MaxEntries >= 1 and EP[1] > 0 and EH[1] > EP[1]+LV*3 Then ExitLong("브레이큰1",AtStop,EP[1],"",EV[1],1); if MaxEntries >= 2 and EP[2] > 0 and EH[2] > EP[2]+LV*3 Then ExitLong("브레이큰2",AtStop,EP[2],"",EV[2],1); if MaxEntries >= 3 and EP[3] > 0 and EH[3] > EP[3]+LV*3 Then ExitLong("브레이큰3",AtStop,EP[3],"",EV[3],1); ...... if MaxEntries >= 20 and EP[20] > 0 and EH[20] > EP[20]+LV*3 Then ExitLong("브레이큰20",AtStop,EP[20],"",EV[20],1); } SetStopLoss(LV,PointStop); If NextBarStime==XT1 Then ExitLong(); 즐거운 하루되세요 > 히익 님이 쓴 글입니다. > 제목 : 피라미딩 브레이큰스탑 > 안녕하세요 항상 도움 주셔서 감사합니다. 아래는 피라미딩 수식입니다. ///////////////////////////////////////피라미딩 전략//////////////////////// Input : asset(100000000),XT1(150000); var : PP(0), R1(0); var : LV(0); PP = (DayHigh(1)+DayLow(1)+DayClose(1))/3; # 피벗기준선 R1 = PP * 2 - DayLow(1); # 피벗1차저항 LV = (DayHigh(1)-DayLow(1))/3; #손절폭 If Bdate[1]!=Bdate Then { Value68=0; Value69=0; Value67=0; } If ExitName(1)=="StopLoss" && MarketPosition==1 && CurrentEntries[1]>CurrentEntries Then Value68=1; If MarketPosition==0 && entriestoday<1 Then // entriestoday는 거래횟수 사용자함수. { Buy("",AtStop,R1,Max(int(E_num(LV,asset,0.01)/20),1)); } If CurrentEntries[1]!=CurrentEntries Then Value67=Value67+1; If MarketPosition==1 && CurrentEntries<Min(E_num(LV,asset,0.01),20) && Value67<Min(E_num(LV,asset,0.01),20) && Value68==0 Then Buy("매수1",AtStop,Highest(H,BarsSinceEntry+1)+PriceScale,Max(int(E_num(LV,asset,0.01)/20),1)); SetStopLoss(LV,PointStop); If NextBarStime==XT1 Then ExitLong(); ///////////////////////////////////////////////////////////////////////////// 여기서 E_num 은 자금관리 사용자 함수로서, 진입 때마다 계약수가 다르게 설정됩니다. *E_num 사용자 수식 : Inputs: N(NumericSimple), Capital(NumericSimple), LossRatio(NumericSimple) ; E_num = Int( (Capital * LossRatio) / (N * BigPointValue) ); /////////////////////////////////////////////////////////////////// 궁금한 점은 각 포지션마다 손절 되게끔 setstoploss 를 걸어놨는데, 또 각 포지션마다 브레이큰스탑도 가능하게 하고 싶습니다. 그 브레이큰의 조건은 다음과 같습니다. //////////////////////////////////////////////////////////////////////// If MarketPosition==1 && Highest(H,BarsSinceEntry+1)>EntryPrice+LV*3 Then ExitLong("브레이큰",AtStop,EntryPrice); ///////////////////////////////////////////////////////////////////////// 이게 단일 포지션 거래 때는 잘 작동되지만, 피라미딩 때는 초기 진입가격에 대한 브레이큰 스탑만 적용됩니다. 각각의 포지션 별로 브레이큰 스탑을 하는 방법을 여쭙고 싶습니다. 항상 도움 주셔서 감사합니다. 건강조심하세요