답변완료
문의 드립니다
input : 익절틱수(300),손절틱수(100);
var : DD(0),Year(0),V1(0),V2(0),V3(0),V4(0),summer(False);
var : ST(0),ET(0),entry(0);
if sDate != sDate[1] Then
{
DD = DayOfWeek(Sdate);
Year = Floor(Sdate/10000);
V1 = (10000 * Year) + (100 * 3) + 1;
V2 = 15 - dayofweek(v1);
v3 = (10000 * Year) + (100 * 11) + 1;
v4 = 8 - dayofweek(v3);
Summer = Sdate > (10000 * Year) + (100 * 3) + v2 and Sdate < (10000 * Year) + (100 * 11) + v4;
if summer == true Then
{
ST = 70000;
ET = 55000;
}
Else
{
ST = 80000;
ET = 65000;
}
}
if Year > 0 Then
{
IF ET > ST Then
SetStopEndofday(ET);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(ET);
}
if ((NextBarSdate != sDate and NextBarStime >= ST) or
(NextBarSdate == sDate and NextBarStime >= ST and sTime < ST)) Then
{
if ET < ST Then
SetStopEndofday(0);
if NextBarOpen != c Then
{
Buy("b",AtStop,NextBarOpen+PriceScale*10);
Sell("s",AtStop,NextBarOpen-PriceScale*10);
}
}
Else
{
if h < DayOpen+PriceScale*10 Then
Buy("b1",AtStop,DayOpen+PriceScale*10);
if l > DayOpen-PriceScale*10 Then
Sell("s1",AtStop,DayOpen-PriceScale*10);
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
-------
위 수식어에서
금일아침 해외선물에서 시가후 당일청산신호가 나옵니다.
수식어에서 어떤 경우인지요 ?
2022-10-17
985
글번호 163012
시스템
답변완료
부탁드립니다
수고하십니다
아래수식은 수식지왕님 블러그에 사용자 함수 입니다
Inputs: Length(NumericSimple),TargetUpLevel(NumericSimple),TargetDnLevel(NumericSimple),
NxtYn(NumericSimple), // 다음 봉의 값을 구하려면 1을 아니면 0을 넣어준다.
oUpBand(NumericRef), // 주소전달방식임을 선언
oDnBand(NumericRef), // 값을 입력받는게 아니라 여기에 결과값을 채워서 반환한다.
oMidLine(NumericRef); // 변수명 앞에 소문자를 o를 붙인 것은 output 변수입을 나타냅니다.
Variables: Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0),MidLevel(0);
If CurrentBar == 1 AND Length > 0 Then Begin
UpSum = 0;
DownSum = 0;
For Counter = 0 To Length - 1 Begin
UpAmt = C[Counter] - C[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
End;
UpAvg = UpSum / Length;
DownAvg = DownSum / Length;
End
Else
If CurrentBar > 1 AND Length > 0 Then Begin
UpAmt = C[0] - C[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length;
DownAvg = (DownAvg[1] * (Length - 1) + DownAmt) / Length;
End;
If UpAvg + DownAvg <> 0 Then
Value1 = 100 * UpAvg / (UpAvg + DownAvg);
Else
Value1 = 0;
If nxtYn == 1 Then // 다음 봉 여부가 1일 경우
{
If Value1 > TargetUpLevel Then // 상단밴드
oUpBand = (((TargetUpLevel - 100) / TargetUpLevel * UpAvg) + DownAvg) * (Length - 1) + C;
Else
oUpBand = ((TargetUpLevel / (100 - TargetUpLevel) * DownAvg) - UpAvg) * (Length - 1) + C;
If Value1 > TargetDnLevel Then // 하단밴드
oDnBand = (((TargetDnLevel - 100) / TargetDnLevel * UpAvg) + DownAvg) * (Length - 1) + C;
Else
oDnBand = ((TargetDnLevel / (100 - TargetDnLevel) * DownAvg) - UpAvg) * (Length - 1) + C;
MidLevel = (TargetUpLevel + TargetDnLevel) / 2; // 중간라인
If Value1 > MidLevel Then
oMidLine = (((MidLevel - 100) / MidLevel * UpAvg) + DownAvg) * (Length - 1) + C;
Else
oMidline = ((MidLevel / (100 - MidLevel) * DownAvg) - UpAvg) * (Length - 1) + C;
}
Else // 다음 봉 여부가 0인 경우
{
If Value1[1] > TargetUpLevel Then
oUpBand = (((TargetUpLevel - 100) / TargetUpLevel * UpAvg[1]) + DownAvg[1]) * (Length - 1) + C[1];
Else
oUpBand = ((TargetUpLevel / (100 - TargetUpLevel) * DownAvg[1]) - UpAvg[1]) * (Length - 1) + C[1];
If Value1[1] > TargetDnLevel Then
oDnBand = (((TargetDnLevel - 100) / TargetDnLevel * UpAvg[1]) + DownAvg[1]) * (Length - 1) + C[1];
Else
oDnBand = ((TargetDnLevel / (100 - TargetDnLevel) * DownAvg[1]) - UpAvg[1]) * (Length - 1) + C[1];
MidLevel = (TargetUpLevel + TargetDnLevel) / 2;
If Value1[1] > MidLevel Then
oMidLine = (((MidLevel - 100) / MidLevel * UpAvg[1]) + DownAvg[1]) * (Length - 1) + C[1];
Else
oMidline = ((MidLevel / (100 - MidLevel) * DownAvg[1]) - UpAvg[1]) * (Length - 1) + C[1];
}
__RSI_BAND = 1; //사용자함수는 반환값이 있어야 한다고 했습니다.
// oUpBand, oDnBand, oMidLine 는 메모리 주소이지 반환값이 아닙니다.
// 그래서 마지막에 아무 값이나 넘겨 줘야 하기 때문에 그냥 1을 넣어 줬습니다.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//사용자함수 이용함(RSI_BAND),
Input:Length(14),UpLevel(70),DnLevel(30);
Var:Upband(0),DnBand(0),MidLine(0);
__RSI_BAND(Length,UpLevel,DnLevel,0,UpBand,DnBand,MidLine); // 현재 봉에서의 밴드 값
Plot1(UpBand);
Plot2(MidLine);
Plot3(DnBand);
Plot4( ? );//60선라인
Plot5( ? ); //40선라인
//1.Plot2(MidLine);중간라인(50선)
사용자함수를수정해서 ( 70선) 과 (중간라인50선) 사이에 [ 60선라인]과
(중간라인50선)과 (30선)사이의 [40선라인] 이 나타나는 수식부탁드립니다
2022-10-17
1184
글번호 163011
지표
답변완료
문의
당일을 기준으로 나타나게 부탁드리며 0.5 라인은 색깔이 다르게 할수 있도록 부탁드립니다
Input:length(10),기준일(20110101),파동선두께(2);
Var:j(0),jj(0),jjj(0),최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),
TL1(0);
Array:고[5,4](0),저[5,4](0), // 1:가격, 2:Index, 3:sDate, 4:sTime
역사적고점[5](0),역사적저점[5](0);
#==========================================#
If Index == 0 Then
{
고[1,1] = H;
저[1,1] = L;
}
Condition1 = Highest(H,length) == H and 최종고가 <> H;
Condition2 = Lowest (L,length) == L and 최종저가 <> L;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종변곡점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리
Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = H; // 신규고점을 체크하기 위해 저장
If 최종변곡점 == "저점" Then
{
For j = 5 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,RED);
}
Else If 고[1,1] < H Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
If 기준일 <= Date and (역사적고점[1] < 고[1,1] or 역사적고점[1] == 0) Then
{
For jjj = 1 To 4
{
역사적고점[jjj] = 고[1,jjj];
역사적저점[jjj] = 0;
}
}
최종변곡점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = L;
If 최종변곡점 == "고점" then
{
For j = 5 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,BLUE);
}
Else If 저[1,1] > L then
{
저[1,1] = L;
저[1,3] = sDate;
저[1,4] = sTime;
저[1,2] = Index;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
If 기준일 <= Date and ( 역사적저점[1] > 저[1,1] or 역사적저점[1] == 0 ) Then
{
For jjj = 1 To 4
{
역사적저점[jjj] = 저[1,jjj];
//역사적고점[jjj] = 0; // 역사적 고점 초기화
}
}
최종변곡점 = "저점";
}
#==========================================#
Var:기울기(0);
Array:fr[7,4](0); // 1:비율, 2:값, 3:라인번호, 4:텍스트번호
If Index == 0 Then
{
fr[1,1] = 0;
fr[2,1] = 0.236;
fr[3,1] = 0.382;
fr[4,1] = 0.50;
fr[5,1] = 0.618;
fr[6,1] = 0.764;
fr[7,1] = 1;
}
If 역사적고점[1] > 0 and 역사적저점[1] > 0 Then
{
If 역사적고점[1][1] != 역사적고점[1] or 역사적저점[1][1] != 역사적저점[1] Then
{
기울기 = (역사적고점[1] - 역사적저점[1]) / (역사적고점[2] - 역사적저점[2]);
for j = 1 to 7
{
If fr[j,3] > 0 Then TL_Delete(fr[j,3]); // 기존의 라인은 지우고
fr[j,2] = 기울기 * fr[j,1] * (index - 역사적고점[2]) + 역사적고점[1]; // 피보나치 비율을 곱해서 계산
fr[j,3] = TL_New(역사적고점[3],역사적고점[4],역사적고점[1],sDate,sTime,fr[j,2]); // 라인을 생성
}
}
Else
{
for j = 1 to 7
{
fr[j,2] = 기울기 * fr[j,1] * (index - 역사적고점[2]) + 역사적고점[1];
TL_SetEnd(fr[j,3],sDate,sTime,fr[j,2]);
}
}
}
2022-10-16
848
글번호 163010
지표