답변완료
지표 수식변환부탁드립니다
2개수식입니다. 예스드레이더 수식으로 전환부탁드립니다
정말 감사드립니다
indicator('RedK SmoothAndLazyMA', shorttitle='SALMA v2.0', overlay=true, timeframe='', timeframe_gaps=false)
// Corrects price points within specific StdDev band before calculting a smoothed WMA
price = input(close, 'Source')
length = input.int(10, 'Length', minval=1)
smooth = input.int(3, 'Extra Smooth [1 = None]', minval=1)
mult = input.float(0.3, minval=0.05, maxval=3, step=0.05, title='Width', inline = 'SD Channel', group='Volatility Filter (SD Channel)')
sd_len = input.int(5, minval=1, title='Length', inline = 'SD Channel', group='Volatility Filter (SD Channel)')
baseline = ta.wma(price, sd_len)
dev = mult * ta.stdev(price, sd_len)
upper = baseline + dev
lower = baseline - dev
cprice = price > upper ? upper : price < lower ? lower : price
// Uncomment these code lines to expose the base StdDev channel used as volatility filter
//plot (baseline, "Base MA")
//plot(upper, "Upper Band", color=color.green)
//plot(lower, "Lower Band", color=color.red)
REMA = ta.wma(ta.wma(cprice, length), smooth)
c_up = color.new(#33ff00, 0)
c_dn = color.new(#ff1111, 0)
REMA_up = REMA > REMA[1]
plot(REMA, title='SALMA', color=REMA_up ? c_up : c_dn, linewidth=3)
// ======================================================================================================
// add optional MA's - to enable us to track what many other traders are working with
// These MA's will be hidden by default until user exposes them as needed in the Settings
// the below code is based on the built-in MA Ribbon in the TV library - with some modifications
// ======================================================================
f_ma(source, length, type) =>
type == 'SMA' ? ta.sma(source, length) :
type == 'EMA' ? ta.ema(source, length) :
ta.wma(source, length)
// ======================================================================
gr_ma = 'Optional MA₩'s'
t_ma1 = 'MA #1'
t_ma2 = 'MA #2'
show_ma1 = input.bool(false, t_ma1, inline=t_ma1, group=gr_ma)
ma1_type = input.string('SMA', '', options=['SMA', 'EMA', 'WMA'], inline=t_ma1, group=gr_ma)
ma1_source = input.source(close, '', inline=t_ma1, group=gr_ma)
ma1_length = input.int(50, '', minval=1, inline=t_ma1, group=gr_ma)
ma1_color = #9c27b0
ma1 = f_ma(ma1_source, ma1_length, ma1_type)
plot(show_ma1 ? ma1 : na, color=color.new(ma1_color, 0), title=t_ma1, linewidth=1)
show_ma2 = input.bool(false, t_ma2, inline=t_ma2, group=gr_ma)
ma2_type = input.string('SMA', '', options=['SMA', 'EMA', 'WMA'], inline=t_ma2, group=gr_ma)
ma2_source = input.source(close, '', inline=t_ma2, group=gr_ma)
ma2_length = input.int(100, '', minval=1, inline=t_ma2, group=gr_ma)
ma2_color = #1163f6
ma2 = f_ma(ma2_source, ma2_length, ma2_type)
plot(show_ma2 ? ma2 : na, color=color.new(ma2_color, 0), title=t_ma2, linewidth=1)
두번쨰 수식입니다
indicator(title="Commodity Channel Index", shorttitle="CCI", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(0, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")
smoothingLine = ma(cci, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)
2023-03-30
1263
글번호 167744
지표
답변완료
81446 재문의
-------- 선 아래가 문의한 내용입니다
보니까 마지막 봉의 윗꼬리 아래꼬리, 몸통만 표시되게 하신거 같아요
그날의 윗꼬리와 아래꼬리의 총 합산을 부탁드립니다!!!
그리고 그리드로 출력 말고
1. 봉이 완성된 후 완성된 봉 위에 꼬리 합산 내용 업데이트 되게 부탁드려요
2. 오늘꺼만 볼 수 있는데 전일, 전전일 등 일별 매매 끝난 마지막 봉에
그날 꼬리 및 몸통 합산 볼 수 있게 부탁드립니다
^_^
-------------------------------------------------------------
안녕하세요
예스스탁입니다.
봉차트 위에 그리려면 텍스트 함수를 사용해야 하는데 봉완성시에만 동작합니다.
차트 마지막봉은 미완성봉으로 해당봉기준으로 텍스트를 출력할 방법이 없습니다.
그리드로 출력되게 작성해 드립니다.
차트왼쪽 중단에 표시가 됩니다.
1
var : grid(0);
var1 = H-max(C,O);
Var2 = L-min(C,O);
Var3 = var1+Var2;
if Index == 0 Then
Grid = Grid_New(4,1,2,White, Gray, 1, Gray, 0);
if LastBarOnChart == 1 Then
{
Grid_Cell(Grid,0,0,"꼬리합산",0,0,BLACK,LightRed);
Grid_Cell(Grid,0,1,NumToStr(Var3,2),0,0,BLACK,White);
}
2
var : grid(0);
if Bdate != Bdate[1] Then
Var1 = 0;
Var1 = var1 + C-O;
if Index == 0 Then
Grid = Grid_New(4,1,2,White, Gray, 1, Gray, 0);
if LastBarOnChart == 1 Then
{
Grid_Cell(Grid,0,0,"몸통합산",0,0,BLACK,LightRed);
Grid_Cell(Grid,0,1,NumToStr(Var1,2),0,0,BLACK,White);
}
즐거운 하루되세요
> 돈을잃자 님이 쓴 글입니다.
> 제목 : 문의 드려요
> #지표1
1. 기간: 데이트레이딩 한정
2. 컨셉:
- 데이 안에서의 1분봉이든 2분봉이든 분봉 세팅에 따라
- 윗꼬리와 아래꼬리의 포인트를 계산하여 최신봉 위에 표시
- 윗꼬리는 +, 아래꼬리는 - 하여 합산하여 마지막 캔들 위에 실시간 표시
예시) 2분봉으로 했는데 몸통 포인트는 뺀 윗꼬리는 +8pt 아래꼬리는 -7pt 면
합산시 1pt임. 이게 마지막 캔들 위 또는 아래에 표시
#지표2
ㅇ
1. 기간: 데이트레이딩 한정
2. 컨셉:
- 데이 안에서의 1분봉이든 2분봉이든 분봉 세팅에 따라
- (꼬리를 제외한) 몸통의 길이 포인트를 합산하여 최신봉(마지막봉의 위든 아래든 표시)
- 양봉 몸통 포인트는 +, 음봉 몸통 포인트는 -, 합산하여 마지막 캔들 위에 실시간 표시
예시) 2분봉으로 했는데 꼬리포인트는 뺀 몸통이 양봉 +8pt 음봉 -7pt 면
합산시 1pt임. 이게 마지막 캔들 위 또는 아래에 표시
항상 감사드려요 ^_^
2023-03-30
857
글번호 167735
지표
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
금일 답변해 주셨는데 추가 질문사항이 있어서 재질문 드립니다.
var : 이평(0),간격(0),매수가격(0);
이평 = ma(C,20) ;
간격 = PriceScale*10;
if marketposition == 0 and C > 이평 then
{
buy("b1",OnClose,Def,1) ;
매수가격 = C;
buy("b2.",atlimit,매수가격+간격*1,1) ;
buy("b3.",atlimit,매수가격+간격*2,1) ;
buy("b4.",atlimit,매수가격+간격*3,1) ;
buy("b5.",atlimit,매수가격+간격*4,1) ;
buy("b6.",atlimit,매수가격+간격*5,1) ;
}
if marketposition == 1 then
{
if lowest(L,BarsSinceEntry) > 매수가격+간격*1 Then
buy("b2",atlimit,매수가격+간격*1,1) ;
if lowest(L,BarsSinceEntry) > 매수가격+간격*2 Then
buy("b3",atlimit,매수가격+간격*2,1) ;
if lowest(L,BarsSinceEntry) > 매수가격+간격*3 Then
buy("b4",atlimit,매수가격+간격*3,1) ;
if lowest(L,BarsSinceEntry) > 매수가격+간격*4 Then
buy("b5",atlimit,매수가격+간격*4,1) ;
if lowest(L,BarsSinceEntry) > 매수가격+간격*5 Then
buy("b6",atlimit,매수가격+간격*5,1) ;
if CurrentContracts < 3 Then
SetStopProfittarget(PriceScale*10,PointStop);
Else
{
SetStopProfittarget(0);
ExitLong("bx",AtLimit,EntryPrice+PriceScale*10);
}
}
Else
SetStopProfittarget(0);
위와 같이 코딩해 주셨는데요.
질문사항 1 :
위의 시스템식을 적용해보면
b1.
b2.
b3.
b4.
b5.
b6.
진입가격이 모두 동일합니다.
왜 그런건가요?
질문사항2 :
if marketposition == 0 and C > 이평 then
{
buy("b1",OnClose,Def,1) ;
매수가격 = C;
buy("b2.",atlimit,매수가격+간격*1,1) ;
buy("b3.",atlimit,매수가격+간격*2,1) ;
buy("b4.",atlimit,매수가격+간격*3,1) ;
buy("b5.",atlimit,매수가격+간격*4,1) ;
buy("b6.",atlimit,매수가격+간격*5,1) ;
}
위의 경우 처음 매수하면 marketposition == 0 이 아닌데
왜 b2. b3 b4. b5. b6. 모두 같은 가격으로 매수가 되는건가요?
질문사항 3.
if CurrentContracts < 3 Then
SetStopProfittarget(PriceScale*10,PointStop);
Else
{
SetStopProfittarget(0);
ExitLong("bx",AtLimit,EntryPrice+PriceScale*10);
}
위 코딩에서 3계약 이내는 개별청산을 하고
나머지 계약은 일괄 청산하려면
남아있는 계약의 평균 진입가격 대비 10틱 위에서 청산해야 하는거 아닌가요?
즉
ExitLong("bx",AtLimit,EntryPrice+PriceScale*10);
아니라
ExitLong("bx",AtLimit,avgEntryPrice+PriceScale*10);
이게 맞는게 아닌가요?
질문사항 4.
SetStopProfittarget(0);
위 함수를 2번 해제 하셨는데
위에서 조건문으로 해제 했는데
왜 마지막에 또 해제 하는건가요?
질문사항 5.
위에 코딩은 가격이 상승한 경우
즉 매수 불타기 코딩인거죠?
물타기 코딩을 하려면
아래와 같이 (-) 마이너스 하면 되는 건가요?
buy("b2.",atlimit,매수가격-간격*1,1) ;
질문사항 6.
위 시스템식을 차트에 적용해보면
marketposition == 0 일때만 6계약 모두 매수가 되고
marketposition == 1 일때는 매수가 하나도 안됩니다.
왜 그런거죠?
가격이 하락해서 물타기 하는 경우
marketposition == 0 일때는 1계약만 들어가고
나머지 계약은 marketposition == 1 일때만 들어가야 하는거 아닌가요?
죄송하지만 코딩의 내용이 이해가 안됩니다.
설명좀 부탁드립니다.
그리고 마지막으로 수고스럽겠지만
첫 진입이후 가격이 상승하면 10틱 단위로 매수 불타기 하고
첫 진입이후 가격이 하락하면 10틱 단위로 매수 물타기 하고
그리고
총 계약이 3틱 이내에는 10틱 수익이 발생하면 개별 청산하고
총 계약이 3틱 이상일 경우에는 총 진입계약의 평균가격보다 10틱 이상
수익 발생시 모두 일괄청산하는 시스템식 부탁드립니다.
마지막으로 포지션 진입은 marketposition == 0 일 경우에만
매수, 매도 하고 싶습니다.
감사합니다.
2023-03-30
1001
글번호 167730
시스템
답변완료
문의드립니다.
변곡점 상하 +/- 5% 위치에 점표시를 하고 싶습니다.
Input:length(30);
   Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),sBar(0),TL1(0),
        고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0),
        저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0);
    Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0),
        저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0),
        고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0),
        고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0),
        저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0),
        저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0);
   var : t(0),ii(0),tx1(0);
#==========================================#
    Condition1 = Highest(C,length) == C and 최종고가 <> C;
    Condition2 = Lowest (C,length) == C and 최종저가 <> C;
처리구분 = "";
If Condition1 and Condition2 Then                // 기간고점과 기간저점 동시 발생
{   
       If 최종변곡점 == "저점" Then 처리구분 = "고점처리";  // 저 - 고 순으로 처리
   Else                         처리구분 = "저점처리";  // 고 - 저 순으로 처리
}   
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
    #==========================================#
If 처리구분 == "고점처리" Then 
   {
       최종고가 = C;                                 // 신규고점을 체크하기 위해 저장
   If 최종변곡점 == "저점" Then
       {
          고9 = 고8;    고9IDX = 고8IDX;
          고8 = 고7;    고8IDX = 고7IDX;
          고7 = 고6;    고7IDX = 고6IDX;
          고6 = 고5;    고6IDX = 고5IDX;
          고5 = 고4;    고5IDX = 고4IDX;
          고4 = 고3;    고4IDX = 고3IDX;
          고3 = 고2;    고3IDX = 고2IDX;
          고2 = 고1;    고2IDX = 고1IDX;
          고1 = C;      고1IDX = Index;
          sBar = Index - 저1IDX;  // 추세선 시작점의 위치, n봉전으로 표시
      TL1  = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1); 
          TL_SetSize(TL1,1);
          TL_SetColor(TL1,ReD);
              tx1 = text_new(sDate[0],sTime[0],고1+0.5,"●");
              Text_SetStyle(tx1,2,1);
              Text_SetColor(tx1,Red);
       }
       Else If 고1 < C Then                    // 1번 고점보다 높은 고가 출현
   {
          고1 = C;  고1IDX = Index;
          TL_SetEnd(TL1,sDate[0],sTime[0],고1);
          // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 
              Text_SetLocation(tx1,sDate[0],sTime[0],고1+0.5);
       }
    /* 고점추세선 */   
       If 고2IDX[1] <> 고2IDX Then  // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
   {
          고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0;
          If 고2 < 고3 Then 
          {
             고추세기울기  = (고2 - 고3)/(고2IDX - 고3IDX);
             고추세시작    = 고3;
             고추세시작IDX = 고3IDX;
          }
          Else If 고2 < 고4 Then 
          {
             고추세기울기  = (고2 - 고4)/(고2IDX - 고4IDX);
             고추세시작    = 고4;
             고추세시작IDX = 고4IDX;
          }
          Else If 고2 < 고5 Then 
          {
             고추세기울기  = (고2 - 고5)/(고2IDX - 고5IDX);
             고추세시작    = 고5;
             고추세시작IDX = 고5IDX;
          }
          Else If 고2 < 고6 Then 
          {
             고추세기울기  = (고2 - 고6)/(고2IDX - 고6IDX);
             고추세시작    = 고6;
             고추세시작IDX = 고6IDX;
          }
          Else If 고2 < 고7 Then 
          {
             고추세기울기  = (고2 - 고7)/(고2IDX - 고7IDX);
             고추세시작    = 고7;
             고추세시작IDX = 고7IDX;
          }
          Else If 고2 < 고8 Then 
          {
             고추세기울기  = (고2 - 고8)/(고2IDX - 고8IDX);
             고추세시작    = 고8;
             고추세시작IDX = 고8IDX;
          }
          Else If 고2 < 고9 Then 
          {
             고추세기울기  = (고2 - 고9)/(고2IDX - 고9IDX);
             고추세시작    = 고9;
             고추세시작IDX = 고9IDX;
          }
          고추세봉개수 = Index - 고추세시작IDX;
          고추세최종   = 고추세기울기 * 고추세봉개수 + 고추세시작;
       }
       Else If 고추세최종[1] > 0 Then
       {
          고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
    
       }
       If 저추세최종[1] > 0 Then
       {
          저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
    
       }
       최종변곡점 = "고점";
    }
    #==========================================#
If 처리구분 == "저점처리" Then 
    {
       최종저가 = C;
       If 최종변곡점 == "고점" then 
       {
          저9 = 저8;    저9IDX = 저8IDX;
          저8 = 저7;    저8IDX = 저7IDX;
          저7 = 저6;    저7IDX = 저6IDX;
          저6 = 저5;    저6IDX = 저5IDX;
          저5 = 저4;    저5IDX = 저4IDX;
          저4 = 저3;    저4IDX = 저3IDX;
          저3 = 저2;    저3IDX = 저2IDX;
          저2 = 저1;    저2IDX = 저1IDX;
          저1 = C;      저1IDX = Index;
          sBar = Index - 고1IDX;
          TL1  = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1); 
          TL_SetSize(TL1,1);
          TL_SetColor(TL1,BluE);
              tx1 = text_new(sDate[0],sTime[0],저1-0.5,"●");
              Text_SetStyle(tx1,2,0);
              Text_SetColor(tx1,Blue);
       }
       Else If 저1 > C then 
       {
          저1 = C;      저1IDX = Index;
          TL_SetEnd(TL1,sDate[0],sTime[0],저1);
              Text_SetLocation(TL1,sDate[0],sTime[0],저1-0.5);
       }
    /* 저점추세선 */   
       If 저2IDX[1] <> 저2IDX Then
       {
          저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0;
     If 저2 > 저3 and 저3 > 0 Then  
          { 
             저추세기울기  = (저2 - 저3)/(저2IDX - 저3IDX); 
             저추세시작    = 저3; 
             저추세시작IDX = 저3IDX; 
          } 
          Else If 저2 > 저4 and 저4 > 0 Then  
          { 
             저추세기울기  = (저2 - 저4)/(저2IDX - 저4IDX); 
             저추세시작    = 저4; 
             저추세시작IDX = 저4IDX; 
          } 
          Else If 저2 > 저5 and 저5 > 0 Then  
          { 
             저추세기울기  = (저2 - 저5)/(저2IDX - 저5IDX); 
             저추세시작    = 저5; 
             저추세시작IDX = 저5IDX; 
          } 
          Else If 저2 > 저6 and 저6 > 0 Then  
          { 
             저추세기울기  = (저2 - 저6)/(저2IDX - 저6IDX); 
             저추세시작    = 저6; 
             저추세시작IDX = 저6IDX; 
          } 
          Else If 저2 > 저7 and 저7 > 0 Then  
          { 
             저추세기울기  = (저2 - 저7)/(저2IDX - 저7IDX); 
             저추세시작    = 저7; 
             저추세시작IDX = 저7IDX; 
          } 
          Else If 저2 > 저8 and 저8 > 0 Then  
          { 
             저추세기울기  = (저2 - 저8)/(저2IDX - 저8IDX); 
             저추세시작    = 저8; 
             저추세시작IDX = 저8IDX; 
          } 
          Else If 저2 > 저9 and 저9 > 0 Then  
          { 
             저추세기울기  = (저2 - 저9)/(저2IDX - 저9IDX); 
             저추세시작    = 저9; 
             저추세시작IDX = 저9IDX; 
          } 
          저추세봉개수 = Index - 저추세시작IDX; 
          저추세최종   = 저추세기울기 * 저추세봉개수 + 저추세시작;
       }
       Else If 저추세최종[1] > 0 Then
       {
          저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작; 
    
       }
       If 고추세최종[1] > 0 Then
       {
          고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
   
       }   
       최종변곡점 = "저점";
        
    }
2023-03-30
1000
글번호 167723
지표