커뮤니티

질문 드립니다.

프로필 이미지
새로운돌
2016-11-21 12:49:58
122
글번호 104185
답변완료

첨부 이미지

if MarketPosition == 1 Then{ var1 = int((highest(h,BarsSinceEntry)-EntryPrice)/(PriceScale*12)); var2 = var1*(PriceScale*12);₩ if var1 == 0 Then exitlong("bx1",AtStop,EntryPrice-(PriceScale*11)); if var1 >= 1 Then exitlong("bx2",AtStop,EntryPrice+var2-(PriceScale*11)); } if MarketPosition == -1 Then{ var3 = int((EntryPrice-lowest(l,BarsSinceEntry))/(PriceScale*12)); var4 = var3*(PriceScale*12); if Var3 == 0 Then ExitShort("sx1",AtStop,EntryPrice+(PriceScale*11)); if Var3 >= 1 Then ExitShort("sx2",AtStop,EntryPrice-var4+(PriceScale*11)); } 상위 식은 예전에 여쭤 봤었던, 1. 진입 후 0.55 손절 2 손절 되지 않고 0.6 익절 시 그 시점에서 손절 0.55 3. 2번 계속 반복. 에 대한 식입니다. 그런데 제대로 작동하지 않는 점을 발견하여 질문 드립니다. 첫번째 스마일에 보시면, 진입가 250.50 으로 부터 0.6 익절을 두 번 된 시점인 249.30 까지 도달하였습니다. 그리하여 249.30에서 0.55 상승한 249.85에 매도청산이 이루어 져야 하나, 작동 하지 않습니다. 식이 무엇인가 잘못 된 것일까요? 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-11-21 17:19:38

안녕하세요 예스스탁입니다. 해당식이 컴퓨터의 부동소숫점 오류때문에 발생했습니다. 컴퓨터의 CPU가 계산시 10진수를 2진수로 변형해서 계산하고 다시 10진수로 값을 돌려주는데 2가 1.9999999999로 리턴이 되어 int가 1로 인지했습니다. 식을 수정했습니다. if MarketPosition == 1 Then{ var1 = round((highest(H,BarsSinceEntry)-EntryPrice)/(PriceScale*12),5); var2 = var1*(PriceScale*12); if var1 == 0 Then exitlong("bx1",AtStop,EntryPrice-(PriceScale*11)); if var1 >= 1 Then exitlong("bx2",AtStop,EntryPrice+var2-(PriceScale*11)); } if MarketPosition == -1 Then{ var3 = round((EntryPrice-lowest(l,BarsSinceEntry))/(PriceScale*12),5); var4 = var3*(PriceScale*12); if Var3 == 0 Then ExitShort("sx1",AtStop,EntryPrice+(PriceScale*11)); if Var3 >= 1 Then ExitShort("sx2",AtStop,EntryPrice-var4+(PriceScale*11)); } 즐거운 하루되세요 > 새로운돌 님이 쓴 글입니다. > 제목 : 질문 드립니다. > if MarketPosition == 1 Then{ var1 = int((highest(h,BarsSinceEntry)-EntryPrice)/(PriceScale*12)); var2 = var1*(PriceScale*12);₩ if var1 == 0 Then exitlong("bx1",AtStop,EntryPrice-(PriceScale*11)); if var1 >= 1 Then exitlong("bx2",AtStop,EntryPrice+var2-(PriceScale*11)); } if MarketPosition == -1 Then{ var3 = int((EntryPrice-lowest(l,BarsSinceEntry))/(PriceScale*12)); var4 = var3*(PriceScale*12); if Var3 == 0 Then ExitShort("sx1",AtStop,EntryPrice+(PriceScale*11)); if Var3 >= 1 Then ExitShort("sx2",AtStop,EntryPrice-var4+(PriceScale*11)); } 상위 식은 예전에 여쭤 봤었던, 1. 진입 후 0.55 손절 2 손절 되지 않고 0.6 익절 시 그 시점에서 손절 0.55 3. 2번 계속 반복. 에 대한 식입니다. 그런데 제대로 작동하지 않는 점을 발견하여 질문 드립니다. 첫번째 스마일에 보시면, 진입가 250.50 으로 부터 0.6 익절을 두 번 된 시점인 249.30 까지 도달하였습니다. 그리하여 249.30에서 0.55 상승한 249.85에 매도청산이 이루어 져야 하나, 작동 하지 않습니다. 식이 무엇인가 잘못 된 것일까요? 감사합니다.