커뮤니티

수식에 문제가 있는지 시뮬레이션 결과가 안 나옵니다.

프로필 이미지
된다된다
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씩 매수되게 수행하게 하려면 어떻게 해야 하나요? 도움 주시면 정말 감사합니다!