커뮤니티
질문 드립니다.
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. 104719_제목_없음.png (0.08 MB)
답변 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에 매도청산이 이루어 져야 하나,
작동 하지 않습니다.
식이 무엇인가 잘못 된 것일까요?
감사합니다.
이전글