커뮤니티
수식에 문제가 있는지 시뮬레이션 결과가 안 나옵니다.
2018-04-25 00:44:57
216
글번호 118439
질문1. 9시 30분 현재가 >= 시가 + (전날 고가 - 전날 저가) * 3일 평균 노이즈 값(1 - (시가-종가)/(고가-저가) 충족 시, 근사값 또는 그 시점 현재가로 매수되고 다음 날 시가로 매도되는 로직인데, 시뮬레이션을 돌리면 로그값에 noise1 ~ 3값이 0, 1만 나오고 평균값 NoiseAvg는 0으로만 찍히고 뭔가 수행이 안됩니다. 수식이 잘못된 것 같은데, 살펴주시면 감사하겠습니다.
질문2. 아래 noise 계산은 1번만 수행되면 되는데, 시뮬레이션을 5분봉으로 돌리면 매 5분마다 계산되는데, 매수시간 전에 1번만 수행되게 하려면 어떻게 해야하는지 혹은 이건 성능상 전혀 문제가 없는지도 궁금합니다.
질문3. 가격 비교 시간을 9시 30분 ~ 10시 사이에 수행해서 해당 조건에 가장 가까운 호가창 만족하면 매수되게 하려면 어떻게 해야할까요?
즉, 9시 30분의 시간으로 고정하지 않구요.
Input: Period1(1), Period2(2), Period3(3);
vars: noise1(0), noise2(0), noise3(3), NoiseAVR(0);
noise1 = 1 - (ABS(DayOpen(Period1) - DayClose(Period1)) / (DayHigh(Period1) - DayLow(Period1)));
noise2 = 1 - (ABS(DayOpen(Period2) - DayClose(Period2)) / (DayHigh(Period2) - DayLow(Period2)));
noise3 = 1 - (ABS(DayOpen(Period3) - DayClose(Period3)) / (DayHigh(Period3) - DayLow(Period3)));
NoiseAvg = Avg(noise1, noise2, noise3);
MessageLog("noise1 = %.f, noise2 = %.f, noise3 = %.f, noise_avg = %.f", noise1, noise2, noise3, noiseavg);
if stime >= 093000 and stime[1] < 093000 Then
// 09:30 시전 가격이 O ?
If O >= dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg Then
buy();
if NextBarSdate > sdate Then
exitlong("bx2", AtMarket);
질문4. 동일한 위 로직을 9시 30분 ~ 10시, 11시 30분 ~ 12시에 각각 수행하여 잔고의 1/2씩 매수되게 수행하게 하려면 어떻게 해야 하나요?
도움 주시면 정말 감사합니다!
답변 1
예스스탁 예스스탁 답변
2018-04-25 15:43:54
안녕하세요
예스스탁입니다.
1
수식에 특별히 문제가 있지 않습니다.
메세지로그는 사용자분이 %.f로 정수만 출력하게 작성하셔서
1과 0으로 출력되는 것일뿐입니다.
%.2f로 지정하면 소숫점 2자리 까지 보실수 있습니다.
2
큰 차이는 없지만 하루에 한번만 계산하면 되므로
첫봉에만 계산하게 아래와 같이 작성하시면 됩니다.
if sdate != sdate[1] then
{
noise1 = 1 - (ABS(DayOpen(Period1) - DayClose(Period1)) / (DayHigh(Period1) - DayLow(Period1)));
noise2 = 1 - (ABS(DayOpen(Period2) - DayClose(Period2)) / (DayHigh(Period2) - DayLow(Period2)));
noise3 = 1 - (ABS(DayOpen(Period3) - DayClose(Period3)) / (DayHigh(Period3) - DayLow(Period3)));
NoiseAvg = Avg(noise1, noise2, noise3);
MessageLog("noise1 = %.2f, noise2 = %.2f, noise3 = %.2f, noise_avg = %.2f", noise1, noise2, noise3, noiseavg);
}
3
O는 봉의 시가, C는 봉의 종가입니다.
if문은 봉완성시이므로 9시 30분봉 시가가 아닌 종가로 지정하셔야 할것 같습니다.
Input: Period1(1), Period2(2), Period3(3);
vars: noise1(0), noise2(0), noise3(3), NoiseAVg(0);
if sdate != sdate[1] then
{
noise1 = 1 - (ABS(DayOpen(Period1) - DayClose(Period1)) / (DayHigh(Period1) - DayLow(Period1)));
noise2 = 1 - (ABS(DayOpen(Period2) - DayClose(Period2)) / (DayHigh(Period2) - DayLow(Period2)));
noise3 = 1 - (ABS(DayOpen(Period3) - DayClose(Period3)) / (DayHigh(Period3) - DayLow(Period3)));
NoiseAvg = Avg(noise1, noise2, noise3);
MessageLog("noise1 = %.2f, noise2 = %.2f, noise3 = %.2f, noise_avg = %.2f", noise1, noise2, noise3, noiseavg);
}
if stime >= 093000 and stime[1] < 093000 Then
{
If c >= dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg Then
buy();
}
if NextBarSdate > sdate Then
exitlong("bx2", AtMarket);
4
랭귀지는 실제 잔고금액을 알지 못합니다.
그러므로 금액지정하셔어 1/2씩 신호가 발생하게 하셔야 합니다.
추가진입을 하는 내용이므로 식 적용시 피라미딩을 다른진입신호만 허용으로 설정하고
적용하시면 됩니다.
Input: Period1(1), Period2(2), Period3(3),금액(100000000);
vars: noise1(0), noise2(0), noise3(3), NoiseAVg(0),v1(0);
if sdate != sdate[1] then
{
noise1 = 1 - (ABS(DayOpen(Period1) - DayClose(Period1)) / (DayHigh(Period1) - DayLow(Period1)));
noise2 = 1 - (ABS(DayOpen(Period2) - DayClose(Period2)) / (DayHigh(Period2) - DayLow(Period2)));
noise3 = 1 - (ABS(DayOpen(Period3) - DayClose(Period3)) / (DayHigh(Period3) - DayLow(Period3)));
NoiseAvg = Avg(noise1, noise2, noise3);
MessageLog("noise1 = %.2f, noise2 = %.2f, noise3 = %.2f, noise_avg = %.2f", noise1, noise2, noise3, noiseavg);
Condition1 = false;
Condition2 = false;
}
if stime >= 093000 and stime < 100000 Then
{
if Condition1 == false and c >= dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg Then
{
Condition1 = true;
v1 = floor((금액*0.5)/max(NextBarOpen, dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg));
buy("b1",OnClose,def,v1);
}
}
if stime >= 093000 and stime < 100000 Then
{
if Condition2 == false and c >= dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg Then
{
Condition2 = true;
v1 = floor((금액*0.5)/max(NextBarOpen, dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg));
buy("b2",OnClose,def,v1);
}
}
if NextBarSdate > sdate Then
exitlong("bx2", AtMarket);
즐거운 하루되세요
> 된다된다 님이 쓴 글입니다.
> 제목 : 수식에 문제가 있는지 시뮬레이션 결과가 안 나옵니다.
> 질문1. 9시 30분 현재가 >= 시가 + (전날 고가 - 전날 저가) * 3일 평균 노이즈 값(1 - (시가-종가)/(고가-저가) 충족 시, 근사값 또는 그 시점 현재가로 매수되고 다음 날 시가로 매도되는 로직인데, 시뮬레이션을 돌리면 로그값에 noise1 ~ 3값이 0, 1만 나오고 평균값 NoiseAvg는 0으로만 찍히고 뭔가 수행이 안됩니다. 수식이 잘못된 것 같은데, 살펴주시면 감사하겠습니다.
질문2. 아래 noise 계산은 1번만 수행되면 되는데, 시뮬레이션을 5분봉으로 돌리면 매 5분마다 계산되는데, 매수시간 전에 1번만 수행되게 하려면 어떻게 해야하는지 혹은 이건 성능상 전혀 문제가 없는지도 궁금합니다.
질문3. 가격 비교 시간을 9시 30분 ~ 10시 사이에 수행해서 해당 조건에 가장 가까운 호가창 만족하면 매수되게 하려면 어떻게 해야할까요?
즉, 9시 30분의 시간으로 고정하지 않구요.
Input: Period1(1), Period2(2), Period3(3);
vars: noise1(0), noise2(0), noise3(3), NoiseAVR(0);
noise1 = 1 - (ABS(DayOpen(Period1) - DayClose(Period1)) / (DayHigh(Period1) - DayLow(Period1)));
noise2 = 1 - (ABS(DayOpen(Period2) - DayClose(Period2)) / (DayHigh(Period2) - DayLow(Period2)));
noise3 = 1 - (ABS(DayOpen(Period3) - DayClose(Period3)) / (DayHigh(Period3) - DayLow(Period3)));
NoiseAvg = Avg(noise1, noise2, noise3);
MessageLog("noise1 = %.f, noise2 = %.f, noise3 = %.f, noise_avg = %.f", noise1, noise2, noise3, noiseavg);
if stime >= 093000 and stime[1] < 093000 Then
// 09:30 시전 가격이 O ?
If O >= dayopen + (dayhigh(1)-daylow(1)) * NoiseAvg Then
buy();
if NextBarSdate > sdate Then
exitlong("bx2", AtMarket);
질문4. 동일한 위 로직을 9시 30분 ~ 10시, 11시 30분 ~ 12시에 각각 수행하여 잔고의 1/2씩 매수되게 수행하게 하려면 어떻게 해야 하나요?
도움 주시면 정말 감사합니다!
다음글
이전글