답변완료
시스템매매 관련 문의합니다..^^*
아래수식에 보시면 시작일이 25년7월2일 설정이 되어있는데,추가적인 사항으로 한시간단위로는 설정이 가능한지요^^*한시간단위도 설정가능하면 변수로 지정해 주시면 고맙겠습니다..항상 감사드립니다...input : 시작일(20250702),갭상승(2),P(20),하락per(1),분할(20);input : starttime(91500),EndTime(151500);Var : value(0),mav(0);var : Tcond(False);if Bdate != Bdate[1] Then tcond = False;if (sdate != sDate[1] and sTime >= starttime) or (sdate == sDate[1] and sTime >= starttime and sTime[1] < starttime) Then Tcond = true;if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False;Var1=rsi(14);mav = ma(c,p);value = 0;if sDate >= 시작일 and DayOpen <= DayClose(1)*(1+갭상승/100) and Tcond == true Then{ # 매수 / 매도청산 If CCI(9) > 0 Then value = 1; If MACD(12,26) > 0 Then value = value+1; If DIPlus(14) > DIMinus(14) Then value = value+1; If StochasticsK(12,5) > StochasticsD(12,5,5) Then value = value+1; # 매수/매도청산 If value >= 3 and mav > mav[1] Then { Buy("b1"); } value = 0; if MarketPosition == 1 and MaxEntries < 분할 OR MarketPosition <= 0 and value >= 3 and mav > mav[1] Then { Buy("b2",AtStop,EntryPrice(0)*(1-(하락per*MaxEntries)/100)); } if rsi(14)<32 Then buy("b3");}# 매도/매수청산If CCI(9) < 0 Then value = 1;If MACD(12,26) < 0 Then value = value+1;If DIPlus(14) < DIMinus(14) Then value = value+1;If StochasticsK(12,5) < StochasticsD(12,5,5) Then value = value+1;If value >= 3 Then{ SetStopProfittarget(7, PercentStop);}
답변완료
추가 부탁드립니다
var : Per(0.1); var : HD(0),HT(0),HH(0),HH2(0); var : LD(0),LT(0),LL(0),LL2(0); var : HTL(0),LTL(0),TL(0); var : tx1(0),tx2(0),HTx(0),Ltx(0); var : T(0); var : HB(0),LB(0); var1 = ma(c, 60); if var1 > var1[1] Then T = 1; if var1 < var1[1] Then T = -1; Plot1(var1,"이동평균선"); if T == 1 Then { if T != T[1] Then { HD = sDate; HT = sTime; HH = h; HH2 = HH[1]; HTL = tl_new(HD,HT,HH,NextBarSdate,NextBarStime,HH); TL_SetColor(HTL, Red); HTx = Text_New(NextBarSdate,NextBarStime,HH,NumToStr(HH,2)); Text_SetColor(HTx, Red); Text_SetStyle(HTx, 1, 1); HB = 0; } Else { if h > HH Then { HH = h; } HB = HB+1; } TL_SetBegin(HTL,HD,HT,HH); TL_SetEnd(HTL,NextBarSdate,NextBarStime,HH); Text_SetLocation(HTx,NextBarSdate,NextBarStime,HH); } if T == -1 Then { if T != T[1] Then { LD = sDate; LT = sTime; LL = l; LL2 = LL[1]; LTL = tl_new(LD,LT,LL,NextBarSdate,NextBarStime,LL); TL_SetColor(LTL, Blue); Ltx = Text_New(NextBarSdate,NextBarStime,LL,NumToStr(LL,2)); Text_SetColor(Ltx, Blue); Text_SetStyle(Ltx, 1, 0); LB = 0; } Else { if l < LL Then { LL = l; } LB = LB+1; } TL_SetBegin(LTL,LD,LT,LL); TL_SetEnd(LTL,NextBarSdate,NextBarStime,LL); Text_SetLocation(Ltx,NextBarSdate,NextBarStime,LL); }1. 위의 수식에서 직전 고점연결, 저점연결 추세선을 추가하고자 합니다. 단 추가시 직전 n개 연결로 부탁드립니다. 2. 1의 추세선이 되었다면 TL_SetExtRight(식별번호, False), TL_SetExtRight(식별번호, true), 이 수식을 쓰면 마지만 추세선만 우측 연결이 되는데 이또한 직전 추세선 n개 를 우측 연장으로 부탁드립니다.
답변완료
문의드립니다.
아래 코드를 지표로 만들려면 어떻게 해야 하나요?Inputs:
Length(20), // 채널 계산 기간
NumATRs(2); // ATR 배수
Vars:
LowerBand(0), // 하단 밴드
UpperBand(0), // 상단 밴드
MiddleBand(0),
tpusdc(10000),
slUsdC(3000);
LowerBand = keltnerchannel(Close, Length, -NumATRs);
UpperBand = keltnerchannel(Close, Length, NumATRs);
MiddleBand = KeltnerChannel(C, Length, 0);
If marketposition == 0 and CrossUp(Close, upperBand) and adx(14) < 30 then
Buy("L", AtMarket, Def, 1);
If marketposition == 0 and CrossDown(Close, lowerBand) and adx(14) < 30 then
Sell("S", AtMarket, Def, 1);
//손절
If marketposition > 0 and barssinceentry >= 2 and Close <= EntryPrice - (slUsdC / BigPointValue) Then ExitLong("SL_L", AtMarket);
If marketposition < 0 and barssinceentry >= 2 and Close >= EntryPrice + (slUsdC / BigPointValue) Then ExitShort("SL_S", AtMarket);
if CrossDown(c, middleband) Then ExitLong("Exit_L",AtMarket);
if CrossUp(c, middleband) Then ExitShort("Exit_S",AtMarket);
//익절
If marketposition > 0 and barssinceentry >= 2 and Close >= EntryPrice + (tpUsdC / BigPointValue) Then ExitLong("PT_L", AtMarket);
If marketposition < 0 and barssinceentry >= 2 and Close >= EntryPrice - (tpUsdC / BigPointValue) Then ExitShort("PT_S", AtMarket);아래가 제가 지표로 만든겁니다.1. 신호는 어떻게 표시하나요?2. 이대로 지표 삽입하면 캡쳐화면과 같이 이상하게 캔들과 따로 놉니다. 어떻게 해야 하나요?input: length(80), numatrs(2);
vars:
LowerBand(0), // 하단 밴드
UpperBand(0), // 상단 밴드
MiddleBand(0), // 중심 밴드
adxVal(0); // ADX 값
#--------------------------------------------------------
# 밴드 계산
#--------------------------------------------------------
LowerBand = KeltnerChannel(Close, Length, -NumATRs);
UpperBand = KeltnerChannel(Close, Length, NumATRs);
MiddleBand = KeltnerChannel(Close, Length, 0);
adxVal = ADX(14);
#--------------------------------------------------------
# Plot 출력
#--------------------------------------------------------
plot1(UpperBand, "UpperBand", RGB(255,0,0)); // 상단 밴드
plot2(MiddleBand, "MiddleBand", RGB(255,255,255)); // 중심 밴드
plot3(LowerBand, "LowerBand", RGB(0,255,0)); // 하단 밴드
plot4(adxVal, "ADX(14)", RGB(255,255,0)); // ADX 값 (참고용)
답변완료
종목검색식 부탁드려요.
키움증권수식입니다. 변환부탁드립니다. A=V<lowest(V(1),기간1);LV1=valuewhen(1,A,C);A1=crossup(C,LV1); D1=highest(h,D기간); D2=lowest(l,D기간); 중심2=D2+(D1-D2)/2; K1=highest(h,K기간); K2=lowest(l,K기간); 중심3=K2+(K1-K2)/2; G1=highest(h,G기간); G2=lowest(l,G기간); 중심4=G2+(G1-G2)/2; E10=(dayclose()+nP(1)+nP(2)+nP(3)+nP(4)+nP(5)+nP(6)+nP(7)+nP(8)+nP(9))/10; W5=(C+nPreWC(1)+nPreWC(2)+nPreWC(3)+nPreWC(4))/5; S=(O-avg(L,기간2))/stdev(L,기간2); BB=valuewhen(1,crossup(S,0),C); 조건1=(중심3<=C or E10<=C); 조건2=(W5<C and BB<=C); 조건3=(D2==G2 and E10<=C and BB<=C); (조건1 and 조건2 and A1) or (조건3 and A1) 지표변수 : 기간1 - 60 / D기간 - 30/ K기간 - 60 / G기간 - 120/ 기간2 -30 일봉함수:nP(n)------- n일전종가 주봉함수:nPreWC(n)------- n주전종가 180분봉으로 검색하고 싶은데 120분봉까지만 가능한가요?
답변완료
부탁드립니다
수고하십니다 아래수식을 오류 없게 수정부탁드립니다inputs: Length(15), ShowLevels(True), UpColor(Color.Green), DnColor(Color.Blue);variables: emaValue(0), correction(0), zlma(0), zlmaLag3(0), zlmaColor(0), emaColor(0), signalUp(False), signalDn(False), atrValue(0), topLevel(0), botLevel(0), lastBoxTop(0), lastBoxBot(0), lastSignal(0), barsSinceSignal(0);{Calculate Zero-Lag Moving Average}emaValue = Average(Close, Length);correction = Close + (Close - emaValue);zlma = Average(correction, Length);{Get previous ZLMA value (3 bars ago)}zlmaLag3 = zlma[3];{Determine ZLMA color based on direction}if zlma > zlmaLag3 then zlmaColor = UpColorelse if zlma < zlmaLag3 then zlmaColor = DnColorelse zlmaColor = RGB(128, 128, 128); {Gray for neutral}{Determine EMA color}if emaValue < zlma then emaColor = UpColorelse emaColor = DnColor;{Calculate signals}signalUp = CrossOver(zlma, emaValue);signalDn = CrossUnder(zlma, emaValue);{Calculate ATR for trend levels}atrValue = AvgTrueRange(200);{Plot the moving averages}Plot1(zlma, "ZLMA", zlmaColor);Plot2(emaValue, "EMA", emaColor);{Plot signals as diamonds}if signalUp then PlotPaint(zlma, "SignalUp", UpColor, 0, 3)else if signalDn then PlotPaint(zlma, "SignalDn", DnColor, 0, 3);{Handle trend levels (boxes)}if ShowLevels then begin if signalUp then begin topLevel = zlma; botLevel = zlma - atrValue; lastBoxTop = topLevel; lastBoxBot = botLevel; lastSignal = 1; {1 for up signal} barsSinceSignal = 0; end else if signalDn then begin topLevel = zlma + atrValue; botLevel = zlma; lastBoxTop = topLevel; lastBoxBot = botLevel; lastSignal = -1; {-1 for down signal} barsSinceSignal = 0; end; barsSinceSignal = barsSinceSignal + 1; {Draw trend level based on last signal} if lastSignal = 1 then begin {Draw horizontal line for bullish trend level} DrawLine("BullTrendTop", BarIndex-barsSinceSignal, lastBoxTop, BarIndex, lastBoxTop, UpColor); DrawLine("BullTrendBot", BarIndex-barsSinceSignal, lastBoxBot, BarIndex, lastBoxBot, UpColor); end else if lastSignal = -1 then begin {Draw horizontal line for bearish trend level} DrawLine("BearTrendTop", BarIndex-barsSinceSignal, lastBoxTop, BarIndex, lastBoxTop, DnColor); DrawLine("BearTrendBot", BarIndex-barsSinceSignal, lastBoxBot, BarIndex, lastBoxBot, DnColor); end; {Add labels when price crosses trend levels} if lastSignal = 1 and CrossUnder(High, lastBoxBot) and emaValue > zlma then DrawText("DownArrow", "▼", BarIndex, High, 0, DnColor); if lastSignal = -1 and CrossOver(Low, lastBoxTop) and emaValue < zlma then DrawText("UpArrow", "▲", BarIndex, Low, 0, UpColor);end;
답변완료
수정부탁드립니다
수고 많으십니다.1계약으로 시작해서 수익나면 2계약으로 늘리고 또수익나면 3계으로 늘리고, 4번재 수익나면 다시 1계약으로 돌아오고 5번쨰 수익나면 2계약으로 느릴고 6번쨰 수익나면 3계약으로 늘리고..이렇게 반복하고 손실나면 바로 1계약으로 돌아오고.. 이런 전략을 쓰려고 하는데 코딩에 오류가 많네요..올바로 수정부탁드립니다. 감사드립니다.//-------------------------------------------------------------------------// [1] 입력 변수 (INPUTS)//-------------------------------------------------------------------------Input : Period(5), Period1(3), Period2(3);Input : InitialContracts(1); // 최초 베팅 계약 수 (1)//-------------------------------------------------------------------------// **[2] 초기화 로직 (오류 방지 필수)**//-------------------------------------------------------------------------If InitialEntry Then Begin G_Contracts = InitialContracts; // **Global Variable 창에 등록 필수** G_WinStreak = 0; // **Global Variable 창에 등록 필수**End;//-------------------------------------------------------------------------// [3] 배열 및 변수 선언//-------------------------------------------------------------------------Array : MonthO[99](0), MonthC[99](0); // 월봉 추적용Var : Cnt(0), StoK(0), StoD(0);Var : TicksToPoints(0); //-------------------------------------------------------------------------// [4] 지표 계산 (Stochastics)//-------------------------------------------------------------------------StoK = StochasticsK(Period, Period1);StoD = StochasticsD(Period, Period1, Period2);// TicksToPoints = 1 / MinTick; // MinTick 오류 방지를 위해 계산 줄 주석 처리 //-------------------------------------------------------------------------// [5] 월간 캔들 추적 로직 (추세 필터) - **Begin/End 및 Month() 함수 사용으로 오류 해결**//-------------------------------------------------------------------------// 월이 바뀌었을 때 (정확한 월 변경 감지)if Month() <> Month()[1] ThenBegin // Begin 블록 시작 For cnt = 99 DownTo 1 Begin MonthO[cnt] = MonthO[cnt-1]; MonthC[cnt] = MonthC[cnt-1]; End; MonthO[0] = O; // 새로운 월봉 시가 저장End; // End 블록 끝MonthC[0] = C; // 현재 월봉 종가 업데이트//-------------------------------------------------------------------------// [6] 계약 수 결정 함수 정의 (자금 관리) - **Begin/End 사용으로 오류 해결**//-------------------------------------------------------------------------Function GetContractSize()Begin // Begin 블록 시작 // 전역 변수에 저장된 현재 계약 수를 반환 return G_Contracts;End; // End 블록 끝//-------------------------------------------------------------------------// [7] 자금 관리 로직 (역마틴게일 업데이트) - **Begin/End 사용으로 오류 해결**//-------------------------------------------------------------------------If (MarketPosition == 0) Then // 포지션이 청산된 상태에서만 작동Begin // Begin 블록 시작 // 1. 승리 시 (직전 손익이 0 초과) if (MP_LossProfit(1) > 0) Then Begin G_WinStreak = G_WinStreak + 1; // 연속 승리 횟수 증가 // 3단계 역마틴게일 로직 if (G_WinStreak == 1) Then G_Contracts = 2; // 1단계 승리 후 2계약 else if (G_WinStreak == 2) Then G_Contracts = 3; // 2단계 승리 후 3계약 else if (G_WinStreak >= 3) Then // 3단계 승리 도달 시 초기화 Begin G_Contracts = InitialContracts; G_WinStreak = 0; End; End // 2. 패배 시 (직전 손익이 0 이하) else if (MP_LossProfit(1) <= 0) Then Begin G_Contracts = InitialContracts; G_WinStreak = 0; End;End; // End 블록 끝//-------------------------------------------------------------------------// [8] 진입 및 청산 신호 (수량 적용) - **Begin/End 사용으로 오류 해결**//-------------------------------------------------------------------------If (MarketPosition == 0) ThenBegin // 진입 로직 시작 // 매수 진입 조건 (월봉 양봉 & StoK > StoD 상향 돌파) If (MonthC[0] > MonthO[0] and CrossUp(StoK, StoD)) Then Begin Buy("LE", NextBar, Market, GetContractSize()); End; // 매도 진입 조건 (월봉 음봉 & StoK < StoD 하향 돌파) If (MonthC[0] < MonthO[0] and CrossDown(StoK, StoD)) Then Begin Sell("SE", NextBar, Market, GetContractSize()); End;End; // 진입 로직 끝// 청산 로직 (익절/손절) - **MinTick 오류 우회를 위해 포인트 값 그대로 사용**If (MarketPosition <> 0) ThenBegin // 청산 로직 시작 // 익절 청산 (Profit Target: 15포인트로 가정) SetProfitTarget(15); // 손절 청산 (Stop Loss: 10포인트로 가정) SetStopLoss(10);End; // 청산 로직 끝