예스스탁
예스스탁 답변
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();
}