커뮤니티

수식 문의

프로필 이미지
부똘이
2022-12-19 08:34:19
1442
글번호 164655
답변완료
아래의 수식에서 설정된 시간값에만 지표가 작동하도록 수식을 만들고 싶습니다. 예컨데, 090000~160000으로 입력하면, 그 시간에만 지표& 시그널이 작동하고, 160000~090000까지는 지표값이 멈춰있다가, 090000 시간의 값부터 다시 받아 반영하는 것입니다. 해외선물에서 지표& 시그널을 본장의 움직임만 반영코자 함입니다. 감사합니다. Input : shortPeriod(12), longPeriod(26), Vector(14), Period(9), n(50); Var : MACDv(0), MACDsig(0), macdosc(0), rsi_(0), rsi_signal(0) ; rsi_ = RSI(Period); rsi_signal = MA(RSI(Period), Vector); MACDv = Data2(MACD(shortPeriod, longPeriod)); //MACDsig = Data2(ema(MACDv,Period)); MACDsig = Data2(ema(Data2(MACD(shortPeriod, longPeriod)),Period)); //macdosc = Data2(MACDv-ema(MACDv,Period)); macdosc = Data2(Data2(MACD(shortPeriod, longPeriod))-ema(Data2(MACD(shortPeriod, longPeriod)),Period)); //MessageLog("%f %f %f", rsi_, rsi_signal, macdosc); if macdosc > 0 && rsi_ < n && rsi_ > rsi_signal && rsi_[1] < rsi_signal[1] Then { Buy(); } else if macdosc < 0 && rsi_ > n && rsi_ < rsi_signal && rsi_[1] > rsi_signal[1] Then { Sell(); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-12-19 16:31:52

안녕하세요 예스스탁입니다. input : StartTime(90000),EndTime(160000); Input : RSIPeriod(9),Vector(14),n(50); Input : shortPeriod(12), longPeriod(26), Signal(9); var : Tcond1(False,Data1),idx1(0,data1),cnt(0,Data1),DownAmt(0,Data1), UpAmt(0,Data1); var : UpSum(0,Data1), DownSum(0,Data1), UpAvg(0,Data1), DownAvg(0,Data1); var : sum(0,Data1),rsi_(0,Data1),rsi_signal(0,Data1); Array : C1[100](0,Data1),RSIV[100](0,Data1); var : Tcond2(false,Data2),EP1(0,Data2),EP2(0,Data2),EP3(0,Data2); var : Ema1(0,Data2),Ema2(0,Data2); var : idx2(0,Data2),MACDV(0,Data2),MACDS(0,Data2),MACDO(0,Data2); if Data1((sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime)) Then Tcond1 = False; if Data1((sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime)) Then { Tcond1 = true; } if Tcond1 == true Then { idx1 = idx1+1; For cnt = 99 DownTo 1 { C1[cnt] = C1[cnt-1]; } C1[0] = C; if idx1 >= RSIperiod-1 Then { if idx1 == RSIPeriod-1 Then { UpSum = 0; DownSum = 0; For cnt = 0 To RSIPeriod - 1 { UpAmt = C1[cnt] - C1[cnt+1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpSum = UpSum + UpAmt; DownSum = DownSum + DownAmt; } UpAvg = UpSum / RSIPeriod; DownAvg = DownSum / RSIPeriod; } Else { UpAmt = C1[0] - C1[1]; If UpAmt >= 0 Then DownAmt = 0; Else Begin DownAmt = -UpAmt; UpAmt = 0; End; UpAvg = (UpAvg[1] * (RSIPeriod - 1) + UpAmt) / RSIPeriod; DownAvg = (DownAvg[1] * (RSIPeriod - 1) + DownAmt) / RSIPeriod; } If UpAvg + DownAvg <> 0 Then RSIv[0] = 100 * UpAvg / (UpAvg + DownAvg); Else RSIv[0] = 0; rsi_ = RSIV[0]; sum = 0; For cnt = 0 to Vector-1 { sum = sum + RSIV[cnt]; } rsi_signal = sum/vector; } } if Data2((sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime)) Then Tcond2 = False; if Data2((sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime)) Then { Tcond2 = true; } Ep1 = 2/(shortPeriod+1); Ep2 = 2/(longPeriod+1); Ep3 = 2/(signal+1); if Tcond2 == true Then { idx2 = idx2+1; if idx2 == 1 Then { Ema1 = data2(C); Ema1 = data2(C); MACDV = Ema1-Ema2; MACDS = MACDV; } Else { Ema1 = data2(C) * EP1 + Ema1 * (1-EP1); Ema2 = data2(C) * EP2 + Ema2 * (1-EP2); MACDV = Ema1-Ema2; MACDS = MACDV * EP3 + MACDS * (1-EP3); MACDO = MACDV-MACDS; } } if macdo > 0 && rsi_ < n && rsi_ > rsi_signal && rsi_[1] < rsi_signal[1] Then { Buy(); } else if macdo < 0 && rsi_ > n && rsi_ < rsi_signal && rsi_[1] > rsi_signal[1] Then { Sell(); } 즐거운 하루되세요 > 부똘이 님이 쓴 글입니다. > 제목 : 수식 문의 > 아래의 수식에서 설정된 시간값에만 지표가 작동하도록 수식을 만들고 싶습니다. 예컨데, 090000~160000으로 입력하면, 그 시간에만 지표& 시그널이 작동하고, 160000~090000까지는 지표값이 멈춰있다가, 090000 시간의 값부터 다시 받아 반영하는 것입니다. 해외선물에서 지표& 시그널을 본장의 움직임만 반영코자 함입니다. 감사합니다. Input : shortPeriod(12), longPeriod(26), Vector(14), Period(9), n(50); Var : MACDv(0), MACDsig(0), macdosc(0), rsi_(0), rsi_signal(0) ; rsi_ = RSI(Period); rsi_signal = MA(RSI(Period), Vector); MACDv = Data2(MACD(shortPeriod, longPeriod)); //MACDsig = Data2(ema(MACDv,Period)); MACDsig = Data2(ema(Data2(MACD(shortPeriod, longPeriod)),Period)); //macdosc = Data2(MACDv-ema(MACDv,Period)); macdosc = Data2(Data2(MACD(shortPeriod, longPeriod))-ema(Data2(MACD(shortPeriod, longPeriod)),Period)); //MessageLog("%f %f %f", rsi_, rsi_signal, macdosc); if macdosc > 0 && rsi_ < n && rsi_ > rsi_signal && rsi_[1] < rsi_signal[1] Then { Buy(); } else if macdosc < 0 && rsi_ > n && rsi_ < rsi_signal && rsi_[1] > rsi_signal[1] Then { Sell(); }