답변완료
문의 드립니다
input:p1(48),Rsi변동폭(20);
Var:j(0),상승(100),하락(-100),양방향(2),추세(0),
파동선(0),Rsi파동선(0),방향(0),RsiV(0),Rsi추세선(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0),
Rsi고[20](0),Rsi저[20](0),Rsi고Bar[20](0),Rsi저Bar[20](0);
RsiV =RSI(P1);
#==========================================#
# 전고점,전저점 index 증가
#==========================================#
For j = 1 To 19
{
Rsi고Bar[j] = Rsi고Bar[j] + 1;
Rsi저Bar[j] = Rsi저Bar[j] + 1;
저Bar[j] = 저Bar[j] + 1;
고Bar[j] = 고Bar[j] + 1;
}
#==========================================#
# 최근 고,저 갱신
#==========================================#
If Rsi고[0] <= RsiV || Rsi고[0] == 0 || IsNaN(Rsi고[0]) == True Then
{
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
}
Else
Rsi고Bar[0] = Rsi고Bar[0] + 1;
If Rsi저[0] >= RsiV || Rsi저[0] == 0 || IsNaN(Rsi저[0]) == True Then
{
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
}
Else
Rsi저Bar[0] = Rsi저Bar[0] + 1;
If 고[0] <= H || 고[0] == 0 || IsNaN(고[0]) == True Then
{
고[0] = H;
고Bar[0] = 0;
}
Else
고Bar[0] = 고Bar[0] + 1;
If 저[0] >= L || 저[0] == 0 || IsNaN(저[0]) == True Then
{
저[0] = L;
저Bar[0] = 0;
}
Else
저Bar[0] = 저Bar[0] + 1;
#==========================================#
# 추세방향 결정
#==========================================#
If Rsi저[0][1] + Rsi변동폭 > RsiV[1] &&
Rsi저[0][1] + Rsi변동폭 <= RsiV Then 방향 = 상승;
If Rsi고[0][1] - Rsi변동폭 < RsiV[1] &&
Rsi고[0][1] - Rsi변동폭 >= RsiV Then 방향 = 하락;
#==========================================#
# 추세변화에 따른 변곡점 처리
#==========================================#
If 방향[1] == 하락 && 방향 == 상승 Then
{
For j = 18 DownTo 1
{
Rsi저[j+1] = Rsi저[j];
Rsi저Bar[j+1] = Rsi저Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
Rsi저[1] = Rsi저[0];
Rsi저Bar[1] = Rsi저Bar[0];
Rsi파동선 = Rsi저[0];
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
저[1] = 저[0];
저Bar[1] = 저Bar[0];
파동선 = 저[0];
저[0] = L;
저Bar[0] = 0;
고[0] = H;
고Bar[0] = 0;
}
Else If 방향[1] == 상승 && 방향 == 하락 Then
{
For j = 18 DownTo 1
{
Rsi고[j+1] = Rsi고[j];
Rsi고Bar[j+1] = Rsi고Bar[j];
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
}
Rsi고[1] = Rsi고[0];
Rsi고Bar[1] = Rsi고Bar[0];
Rsi파동선 = Rsi고[0];
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
고[1] = 고[0];
고Bar[1] = 고Bar[0];
파동선 = 고[0];
고[0] = H;
고Bar[0] = 0;
저[0] = L;
저Bar[0] = 0;
}
Else If 방향[1] == 하락 && 방향 == 하락 Then
{
If Rsi고[1] < Rsi고[0] &&
Rsi고[0][1] - Rsi변동폭 <= RsiV[1] &&
Rsi고[0][1] - Rsi변동폭 > RsiV Then
{
Rsi고[1] = Rsi고[0];
Rsi고Bar[1] = Rsi고Bar[0];
Rsi파동선 = Rsi고[0];
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
}
If 고[1] < 고[0] &&
고[0] > H Then
{
고[1] = 고[0];
고Bar[1] = 고Bar[0];
파동선 = 고[0];
고[0] = H;
고Bar[0] = 0;
}
}
Else If 방향[1] == 상승 && 방향 == 상승 Then
{
If Rsi저[1] > Rsi저[0] &&
Rsi저[0][1] + Rsi변동폭 >= RsiV[1] &&
Rsi저[0][1] + Rsi변동폭 < RsiV Then
{
Rsi저[1] = Rsi저[0];
Rsi저Bar[1] = Rsi저Bar[0];
Rsi파동선 = Rsi저[0];
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
}
If 저[1] > 저[0] &&
저[0] < L Then
{
저[1] = 저[0];
저Bar[1] = 저Bar[0];
파동선 = 저[0];
저[0] = L;
저Bar[0] = 0;
}
}
If Rsi파동선[1] != Rsi파동선 Then{
if 방향 == 하락 and Rsi파동선 >= 65 then
sell();
if 방향 == 상승 and Rsi파동선 <= 35 then
buy();
}
-----
위 수식어를 해외선물에 자동주문설정으로 테스트 하고 있습니다.
전입과 청산 될시 그 다음날의 수량은 있어야 하는데 그렇지 않은 경우는
수식어에서 변경하는 방법이 있는지 궁금합니다.
미리 감사드립니다.
2023-08-09
1469
글번호 171349
시스템
답변완료
if 조건문 여러개를 for문으로 줄일 수 있나요?
아래와 같은 코드를 짰는데요.
input : ntime(210000), line_num(5), size_tick(8);
var : Tcond(False), oo(0), k(0);
array : up_line[20](0), dn_line[20](0), uptext[20](0), dntext[20](0);
array : up_touch[20](0), dn_touch[20](0), up_T[20](0), dn_T[20](0), up_TL[50](0), dn_TL[50](0);
if Bdate != Bdate[1] Then
Tcond = False;
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
oo = o;
For k = 1 to line_num
{
up_T[k] = 0;
dn_T[k] = 0;
up_line[k] = oo + PriceScale*size_tick*k;
dn_line[k] = oo - PriceScale*size_tick*k;
up_touch[k] = 0;
dn_touch[k] = 0;
up_TL[k] = TL_New(sDate,sTime,up_line[k],NextBarSdate,NextBarStime,up_line[k]); // 선긋기
dn_TL[k] = TL_New(sDate,sTime,dn_line[k],NextBarSdate,NextBarStime,dn_line[k]); // 선긋기
}
if H >= up_line[1] Then
{
up_T[1] = 1;
up_touch[1] = up_touch[1] + 1;
}
if H >= up_line[2] Then
{
up_T[2] = 2;
up_touch[2] = up_touch[2] + 1;
}
if H >= up_line[3] Then
{
up_T[3] = 3;
up_touch[3] = up_touch[3] + 1;
}
if H >= up_line[4] Then
{
up_T[4] = 4;
up_touch[4] = up_touch[4] + 1;
}
For k = 1 to line_num
{
uptext[k] = Text_New(NextBarSdate,NextBarStime,up_line[k],NumToStr(up_touch[k],0));
dntext[k] = Text_New(NextBarSdate,NextBarStime,dn_line[k],NumToStr(dn_touch[k],0));
}
}
------------------------------------------------------------------
이 코드를 실행하면
첨부파일1의 이미지와 같이 숫자가 표시 되는데요.
이것을 아래와 같이
if문들이 반복되어 for 문으로 바꿔봤는데요.
실행 결과가 다르게 나오는데요.
어디가 잘못됐는지 잘 모르겠습니다..
도움 부탁드립니다.
input : ntime(210900), line_num(4), size_tick(8);
var : Tcond(False), oo(0), k(0);
array : up_line[20](0), dn_line[20](0), uptext[20](0), dntext[20](0);
array : up_touch[20](0), dn_touch[20](0), up_T[20](0), dn_T[20](0), up_TL[50](0), dn_TL[50](0);
if Bdate != Bdate[1] Then
Tcond = False;
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
oo = o;
For k = 1 to line_num
{
up_T[k] = 0;
dn_T[k] = 0;
up_line[k] = oo + PriceScale*size_tick*k;
dn_line[k] = oo - PriceScale*size_tick*k;
up_touch[k] = 0;
dn_touch[k] = 0;
up_TL[k] = TL_New(sDate,sTime,up_line[k],NextBarSdate,NextBarStime,up_line[k]); // 선긋기
dn_TL[k] = TL_New(sDate,sTime,dn_line[k],NextBarSdate,NextBarStime,dn_line[k]); // 선긋기
}
For k = 1 to line_num
{
if H >= up_line[k] Then //CrossUp(h,uptt[1]) //H >= uptt[1]
{
up_T[k] = k;
up_touch[k] = up_touch[k] + 1;
}
}
For k = 1 to line_num
{
uptext[k] = Text_New(NextBarSdate,NextBarStime,up_line[k],NumToStr(up_touch[k],0));
dntext[k] = Text_New(NextBarSdate,NextBarStime,dn_line[k],NumToStr(dn_touch[k],0));
}
}
2023-08-08
900
글번호 171339
지표
답변완료
이 수식을 키움 수식으로도 변경해주실수 있나요?
// 항셍 방향타 매매
var : i(0), j(0); // 임시변수
var : intMx(22035), intDt(100); //
var : intOneTick(1);
array : int35L[200](0); // 35선을 저장하는 배열
array : intUp[10](0), intDown[10](0.0);
for i = 0 to 180 {
int35L[i] = intMx - i * intDt;
}
For j = 0 to 180 {
// 상승방향타
Condition10 = (L == int35L[j]);
condition12 = (O - C) < 0; // 양봉
condition13 = (O - L) >= 2 * intOnetick;
condition14 = (O - C) >= 0; // 음봉
condition15 = (C - L) >= 2 * intOnetick;
// 하락방향타
Condition20 = (H == int35L[j]);
condition22 = (O - C) < 0; // 양봉
condition23 = (H - C) >= 2 * intOnetick;
condition24 = (O - C) >= 0; // 음봉
condition25 = (H - O) >= 2 * intOnetick;
// MessageLog("j: %.0f int8535L[%.0f]: %.2f ",j,j, int8535L[j]);
if condition10 Then
{
if (condition12 and condition13) or (condition14 and condition15) Then
{
Plot1(int35L[j], "Down-rudder",Magenta,1,2);
}
}
if condition20 Then
{
if (condition22 and condition23) or (condition24 and Condition25) Then
{
Plot3(int35L[j], "Up-rudder",Blue,1,2);
}
}
}
2023-08-08
905
글번호 171336
검색