커뮤니티

수식 수정 부탁드립니다.

프로필 이미지
착한이
2025-05-10 11:06:57
237
글번호 190707
답변완료
안녕하세요. 예전에 트레일링스탑 청산전략이 포함된 피라미딩 매매전략을 문의한 결과 아래와 같은 수식을 작성해 주셨습니다. var : HH1(0),HH2(0),HH3(0),HH4(0),HH5(0); var : EP1(0),EP2(0),EP3(0),EP4(0),EP5(0); if MarketPosition == 0 Then { if BuyCond == True Then Buy("Long1", AtMarket); } if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] Then { if MaxEntries == 1 Then { HH1 = LatestEntryPrice(0); EP1 = LatestEntryPrice(0); } if MaxEntries == 2 Then { HH2 = LatestEntryPrice(0); EP2 = LatestEntryPrice(0); } if MaxEntries == 3 Then { HH3 = LatestEntryPrice(0); EP3 = LatestEntryPrice(0); } if MaxEntries == 4 Then { HH4 = LatestEntryPrice(0); EP4 = LatestEntryPrice(0); } if MaxEntries == 5 Then { HH5 = LatestEntryPrice(0); EP5 = LatestEntryPrice(0); } } if MaxEntries >= 1 and H > HH1 Then HH1 = H; if MaxEntries >= 2 and H > HH2 Then HH2 = H; if MaxEntries >= 3 and H > HH3 Then HH3 = H; if MaxEntries >= 4 and H > HH4 Then HH4 = H; if MaxEntries >= 5 and H > HH5 Then HH5 = H; if MaxEntries == 1 and BuyCond == True Then Buy("Long2", AtMarket); if MaxEntries == 2 and BuyCond == True Then Buy("Long3", AtMarket); if MaxEntries == 3 and BuyCond == True Then Buy("Long4", AtMarket); if MaxEntries == 4 and BuyCond == True Then Buy("Long5", AtMarket); if MaxEntries >= 1 and HH1-ATR > EP1 Then ExitLong("TStop1", Atstop, HH1 - ATR, "Long1"); if MaxEntries >= 2 and HH1-ATR > EP2 Then ExitLong("TStop2", Atstop, HH2 - ATR, "Long2"); if MaxEntries >= 3 and HH1-ATR > EP3 Then ExitLong("TStop3", Atstop, HH3 - ATR, "Long3"); if MaxEntries >= 4 and HH1-ATR > EP4 Then ExitLong("TStop4", Atstop, HH4 - ATR, "Long4"); if MaxEntries >= 5 and HH1-ATR > EP5 Then ExitLong("TStop5", Atstop, HH5 - ATR, "Long5"); } Else { HH1 = 0; HH2 = 0; HH3 = 0; HH4 = 0; HH5 = 0; EP1 = 0; EP2 = 0; EP3 = 0; EP4 = 0; EP5 = 0; } 청산전략에서 트레일링 스탑을 적용하되, 반드시 청산가가 진입가보다 높은 경우에만 적용되도록 요청을 드렸는데, 간혹 진입가보다 더 낮은 가격에서 청산되는 경우가 발생하고 있습니다. 그래서, 아래와 같이 변경을 해보았으나, 그래도 진입가보다 더 낮은 가격에서 청산되는 경우가 있었습니다. 아래의 수식이 아닌 100% 진입가보다 높은 가격에서 청산되는 수식을 부탁드리겠습니다. 감사합니다. if MaxEntries >= 1 and HH1-ATR > EP1*1.1 Then ExitLong("TStop1", Atstop, HH1 - ATR, "Long1"); if MaxEntries >= 2 and HH1-ATR > EP2*1.1 Then ExitLong("TStop2", Atstop, HH2 - ATR, "Long2"); if MaxEntries >= 3 and HH1-ATR > EP3*1.1 Then ExitLong("TStop3", Atstop, HH3 - ATR, "Long3"); if MaxEntries >= 4 and HH1-ATR > EP4*1.1 Then ExitLong("TStop4", Atstop, HH4 - ATR, "Long4"); if MaxEntries >= 5 and HH1-ATR > EP5*1.1 Then ExitLong("TStop5", Atstop, HH5 - ATR, "Long5");
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-05-12 12:41:12

안녕하세요 예스스탁입니다. 1 각진입별고가-ATR이 각 진입가보다 크다라는 조건으로 되어 있어야 하는데 첫진입고가-ATR로 되어 있어 각 진입별 고가로 수정했습니다. 2 각진입최고가격대비 ATR만큼 하락시 청산하는데 갭으로 낮아지는 경우에는 시가가 진입가보다 낮으면 시가에 청산될 수 있어 시가가 각 청산가격보다 높은 상태에서 내려와서 터치할때만 청산되게 추가 수정했습니다. 3 var : HH1(0),HH2(0),HH3(0),HH4(0),HH5(0); var : EP1(0),EP2(0),EP3(0),EP4(0),EP5(0); if MarketPosition == 0 Then { if BuyCond == True Then Buy("Long1", AtMarket); } if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] Then { if MaxEntries == 1 Then { HH1 = LatestEntryPrice(0); EP1 = LatestEntryPrice(0); } if MaxEntries == 2 Then { HH2 = LatestEntryPrice(0); EP2 = LatestEntryPrice(0); } if MaxEntries == 3 Then { HH3 = LatestEntryPrice(0); EP3 = LatestEntryPrice(0); } if MaxEntries == 4 Then { HH4 = LatestEntryPrice(0); EP4 = LatestEntryPrice(0); } if MaxEntries == 5 Then { HH5 = LatestEntryPrice(0); EP5 = LatestEntryPrice(0); } } if MaxEntries >= 1 and H > HH1 Then HH1 = H; if MaxEntries >= 2 and H > HH2 Then HH2 = H; if MaxEntries >= 3 and H > HH3 Then HH3 = H; if MaxEntries >= 4 and H > HH4 Then HH4 = H; if MaxEntries >= 5 and H > HH5 Then HH5 = H; if MaxEntries == 1 and BuyCond == True Then Buy("Long2", AtMarket); if MaxEntries == 2 and BuyCond == True Then Buy("Long3", AtMarket); if MaxEntries == 3 and BuyCond == True Then Buy("Long4", AtMarket); if MaxEntries == 4 and BuyCond == True Then Buy("Long5", AtMarket); if MaxEntries >= 1 and HH1-ATR > EP1 and NextBarOpen >= HH1-ATR Then ExitLong("TStop1", Atstop, HH1 - ATR, "Long1"); if MaxEntries >= 2 and HH2-ATR > EP2 and NextBarOpen >= HH2-ATR Then ExitLong("TStop2", Atstop, HH2 - ATR, "Long2"); if MaxEntries >= 3 and HH3-ATR > EP3 and NextBarOpen >= HH3-ATR Then ExitLong("TStop3", Atstop, HH3 - ATR, "Long3"); if MaxEntries >= 4 and HH4-ATR > EP4 and NextBarOpen >= HH4-ATR Then ExitLong("TStop4", Atstop, HH4 - ATR, "Long4"); if MaxEntries >= 5 and HH5-ATR > EP5 and NextBarOpen >= HH5-ATR Then ExitLong("TStop5", Atstop, HH5 - ATR, "Long5"); } Else { HH1 = 0; HH2 = 0; HH3 = 0; HH4 = 0; HH5 = 0; EP1 = 0; EP2 = 0; EP3 = 0; EP4 = 0; EP5 = 0; } 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 수식 수정 부탁드립니다. > 안녕하세요. 예전에 트레일링스탑 청산전략이 포함된 피라미딩 매매전략을 문의한 결과 아래와 같은 수식을 작성해 주셨습니다. var : HH1(0),HH2(0),HH3(0),HH4(0),HH5(0); var : EP1(0),EP2(0),EP3(0),EP4(0),EP5(0); if MarketPosition == 0 Then { if BuyCond == True Then Buy("Long1", AtMarket); } if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] Then { if MaxEntries == 1 Then { HH1 = LatestEntryPrice(0); EP1 = LatestEntryPrice(0); } if MaxEntries == 2 Then { HH2 = LatestEntryPrice(0); EP2 = LatestEntryPrice(0); } if MaxEntries == 3 Then { HH3 = LatestEntryPrice(0); EP3 = LatestEntryPrice(0); } if MaxEntries == 4 Then { HH4 = LatestEntryPrice(0); EP4 = LatestEntryPrice(0); } if MaxEntries == 5 Then { HH5 = LatestEntryPrice(0); EP5 = LatestEntryPrice(0); } } if MaxEntries >= 1 and H > HH1 Then HH1 = H; if MaxEntries >= 2 and H > HH2 Then HH2 = H; if MaxEntries >= 3 and H > HH3 Then HH3 = H; if MaxEntries >= 4 and H > HH4 Then HH4 = H; if MaxEntries >= 5 and H > HH5 Then HH5 = H; if MaxEntries == 1 and BuyCond == True Then Buy("Long2", AtMarket); if MaxEntries == 2 and BuyCond == True Then Buy("Long3", AtMarket); if MaxEntries == 3 and BuyCond == True Then Buy("Long4", AtMarket); if MaxEntries == 4 and BuyCond == True Then Buy("Long5", AtMarket); if MaxEntries >= 1 and HH1-ATR > EP1 Then ExitLong("TStop1", Atstop, HH1 - ATR, "Long1"); if MaxEntries >= 2 and HH1-ATR > EP2 Then ExitLong("TStop2", Atstop, HH2 - ATR, "Long2"); if MaxEntries >= 3 and HH1-ATR > EP3 Then ExitLong("TStop3", Atstop, HH3 - ATR, "Long3"); if MaxEntries >= 4 and HH1-ATR > EP4 Then ExitLong("TStop4", Atstop, HH4 - ATR, "Long4"); if MaxEntries >= 5 and HH1-ATR > EP5 Then ExitLong("TStop5", Atstop, HH5 - ATR, "Long5"); } Else { HH1 = 0; HH2 = 0; HH3 = 0; HH4 = 0; HH5 = 0; EP1 = 0; EP2 = 0; EP3 = 0; EP4 = 0; EP5 = 0; } 청산전략에서 트레일링 스탑을 적용하되, 반드시 청산가가 진입가보다 높은 경우에만 적용되도록 요청을 드렸는데, 간혹 진입가보다 더 낮은 가격에서 청산되는 경우가 발생하고 있습니다. 그래서, 아래와 같이 변경을 해보았으나, 그래도 진입가보다 더 낮은 가격에서 청산되는 경우가 있었습니다. 아래의 수식이 아닌 100% 진입가보다 높은 가격에서 청산되는 수식을 부탁드리겠습니다. 감사합니다. if MaxEntries >= 1 and HH1-ATR > EP1*1.1 Then ExitLong("TStop1", Atstop, HH1 - ATR, "Long1"); if MaxEntries >= 2 and HH1-ATR > EP2*1.1 Then ExitLong("TStop2", Atstop, HH2 - ATR, "Long2"); if MaxEntries >= 3 and HH1-ATR > EP3*1.1 Then ExitLong("TStop3", Atstop, HH3 - ATR, "Long3"); if MaxEntries >= 4 and HH1-ATR > EP4*1.1 Then ExitLong("TStop4", Atstop, HH4 - ATR, "Long4"); if MaxEntries >= 5 and HH1-ATR > EP5*1.1 Then ExitLong("TStop5", Atstop, HH5 - ATR, "Long5");