답변완료
수식요청
아래 수식의 변환을 요청드립니다.
===========================================================================
A=MA(C,5);
B=MA(C,20);
골든=Crossup(A,B);
최고=HighestSince(1,골든,H);
최고가=ValueWhen(1,최고==최고(1) && 최고>H,최고);
최저=if(B>L,1,0);
최저가=sum(최저);
결론=최저가-ValueWhen(1,골든,최저가(1));
조건=Crossup(C,최고가) && 결론>0;
카운트=CountSince(골든,조건)==1;
카운트&&!카운트(1)
이면서
0봉전 RSI(20)>60
1봉전 " <59.9
이 경우를 검색코자 합니다.
2024-11-20
647
글번호 185474
종목검색
답변완료
1주에서
예스랭귀지는 실주문가격을 수식에서 지정할 수 없습니다.
시스템 트레이딩 설정창에 매매가격을 시장가로 지정하시면 됩니다.
1주 매매단위를 50만원으로 변경부탁드립니다
var : 가(0),나(0),다(0),라(0),마(0);
가=MA(C,5);
나=(highest(high,9)+lowest(low,9))/2;
다=(highest(high,6)+lowest(low,6))/2;
라=(highest(high,5)+lowest(low,5))/2;
마=MA(C,6);
if C>가&&
C>나&&
C>다&&
C>라 Then
Buy("b",onclose,def,1);
if C<나 or C<마 Then
ExitLong();
2024-11-20
583
글번호 185473
시스템
답변완료
청산 관련 수식 요청드립니다.
안녕하세요, 수식 작성에 늘 도움주셔서 감사합니다.
진입과는 별개로 청산 관련된 수식만을 따로 작성 중인데, 수식 검토 및 2번 부분 수식을 요청드립니다.
청산 기준을 상황에 따라 다르게 적용되는 수식이 필요한데, 구현하고자 하는 내용은 다음과 같습니다.
1) 기본 청산 : ATR의 n배수 Trailing stop
2) 1개봉에서 내 포지션에 반대되는 과도하게 큰 움직임(ATR*2)이 나왔을 때, 청산
3) 일정 수익 이상 발생한 뒤에는, 청산 라인을 더 가깝게 변경한다. (ATR*k배수)
위 내용을 토대로 구현한 수식은 아래와 같습니다.
input : AtrP(20), AtrMult(3), BigProfit(100), BigAtrMult(1.6);
var : AtrV1(0), AtrV2(0), posHigh(0), posLow(0);
# 기본청산
AtrV1 = ATR(AtrP) * AtrMult;
If BarsSinceEntry() == 0 Then PosHigh = High;
If MarketPosition() == 1 Then {
If High > PosHigh Then PosHigh = High;
ExitLong("EL1", AtStop, PosHigh - AtrV1);
}
If BarsSinceEntry() == 0 Then PosLow = Low;
If MarketPosition() == -1 Then {
If Low < PosLow Then PosLow = Low;
ExitShort("ES1", AtStop, PosLow + AtrV1);
}
# 1개봉 사이 내 포지션과 움직임이 나왔을 때 청산
-> 이 부분을 수식으로 구현하기가 어렵게 느껴져서, 도움 부탁드립니다..!
# 수익이 커졌을 때 청산 라인 변경(ATR*1.6)
AtrV2 = ATR(AtrP) * BigAtrMult;
If BarsSinceEntry() == 0 Then PosHigh = High;
If Marketposition == 1 Then {
If High > PosHigh Then PosHigh = High;
if PosHigh > entryPrice(0)+bigProfit Then
exitlong("BigEL", atstop, PosHigh - AtrV2);
}
If BarsSinceEntry() == 0 Then PosLow = Low;
If MarketPosition() == -1 Then {
If Low < PosLow Then PosLow = Low;
if PosLow < entryPrice(0)-bigProfit Then
exitshort("BigES", atstop, PosLow + AtrV2);
}
----------------------------------------------------------
현재까지 작성 내용은 위와 같은데, 수식에 겹치는 군더더기 부분들도 있고,
청산조건 2번의 경우 Atstop 주문으로 코딩하려면 어떤식으로 작성이 가능한지 헷갈리는 상황입니다.
전체 내용이 반영된 다중청산 수식(여러 다른 진입전략에 붙여넣기 가능한)을 구현해주시면 정말 감사하겠습니다.
2024-11-20
877
글번호 185470
시스템
답변완료
수식 작성 도움 부탁드립니다
안녕하세요, 수식 작성에 늘 도움주셔서 감사합니다.
이동평균 크로스 전략에 직전거래손실 확인 필터(가상으로 진입, 청산)를 추가하고자 합니다.
기본 로직은 이평선 4개 (20, 60, 120, 200)을 활용해서
a) 120ma > 200ma 일 때, 20ma가 60ma를 상향돌파 시 매수 진입(청산은 20ma가 60ma 하향돌파)
b) 120ma < 200ma 일 때, 20ma가 60ma를 하향돌파 시 매도 진입(청산은 20ma가 60ma 하향돌파)
하는 간단한 로직입니다.
다만 여기서, 가상으로 진입 후 청산한 뒤, 직전 가상거래가 손실일 경우에만 진입하는 방식의 수식을 구현 부탁드리겠습니다.
(아래는 손실필터를 검색하던 중, 다른 전략에서 손실필터가 적용된 사례가 있어 첨부합니다. 해당 로직의 필터 방식을 위의 이평 전략에 적용만 부탁드리겠습니다.직접해보려했으나 아직 어려움이 많아 부득이하게 부탁드려봅니다...)
[ 필터 참고 수식 ]
Input: shortPeriod(20),exitperiod(10);
var : trade(true),mp(0),ep(0),xp(0);
Value1 = Highest(high, shortPeriod);
Value2 = Lowest(Low, shortPeriod);
Value3 = Lowest(Low, exitperiod);
Value4 = Highest(High, exitperiod);
if TotalTrades > TotalTrades[1] Then
{
if PositionProfit(1) < 0 Then
trade = true;
Else
{
trade = False;
mp = 0;
}
}
if MarketPosition == 0 and trade == False Then
{
If mp == 0 and CrossUP(Close, Value1[1]) Then
{
ep = c;
mp = 1;
}
If mp == 0 and CrossDown(Close, Value2[1]) Then
{
ep = c;
mp = -1;
}
If mp == 1 and CrossDown(Close, Value3[1]) Then
{
mp = 0;
xp = c;
if xp < ep Then
trade = true;
}
If mp == -1 and CrossUp(Close, Value4[1]) Then
{
mp = 0;
xp = c;
if xp > ep Then
trade = true;
}
}
if trade == true Then
{
If MarketPosition == 0 and CrossUP(Close, Value1[1]) Then
Buy("LE1");
If MarketPosition ==0 and CrossDown(Close, Value2[1]) Then
Sell("SE1");
}
If entryname=="LE1" and CrossDown(Close, Value3[1]) Then
Exitlong("Lx");
If entryname == "SE1" and CrossUp(Close, Value4[1]) Then
ExitShort("Sx");
감사합니다.
2024-11-20
673
글번호 185469
시스템
답변완료
해외 선물 등락율 계산이 다르게 나옵니다.
당일 등락율을 계산하는데 예스 트레이더의 나오는 등락율 변동폭과 등락율 비율이 다릅니다.
var : 당일등락율(0), 전일등락율(0), 등락값(0), 시초가(0) ;
시초가 = DayOpen();
등락값 = (c-DayOpen()); // 이유는 모름 5.5차이
당일등락율 = (등락값)*100/시초가;
당일등락율 = Floor(당일등락율*100)/100; // 소숫점 2자리 버리기
이렇게 하는 경우 들락폭이 5.5 정도 차이가 생깁니다. 11/20일 기준 나스닥
해외 선물의 경우 시초가를 다르게 적용해야 하는지요 ?
값을 찍어서 디버깅 해봐도 예스트레이더에서 나오는 등락폭과 시초가 기준 현재가의
등락폭의 값이 다릅니다.
<첨부 사진 설명>
- 시초가가 20762.25 이므로 현재가 20803 이므로 변동폭은 40.75 인데
트레이더에서는 35.25 ( 5.5의 차이가 발생 ??? )
답변 부탁 드립니다.
2024-11-20
672
글번호 185468
시스템
답변완료
표준편차 사용예시 부탁드립니다.
안녕하세요 매번 질문에 친절한 답변 정말 감사드립니다.
1. 오늘은 제목처럼, 표준편차 사용예시 코드를 부탁드리고자 합니다.
일반적인 표준편차 산출 식이 있음에도 불구하고, 가중 이동평균의 표준편차를 구하려고 합니다.
현재 시점에서, 각 시점의 편차(시점별 값 - 평균값)를 구하는 과정이 어려워 질문드립니다.
각 시점의 편차를 구하려고 할 때, '고정된 평균'값을 어떻게 산출해야 하는지 모르겠습니다.
가령, 종가 데이터의 편차의 제곱의 합을 먼저 구한다고 한다면,
var1 = accumN(c,20)/20;
var2 = accumN(Square(c - var1),20)/20;
.
.
(이하생략)
으로 풀어나가려고 했으나 곰곰이 생각해보면 va1인 평균값은 var2에서 계산될 때 [0],[1],[2]..
순으로 이전 시점의 평균값을 뱉어내니 현재 시점의 평균과 다르게 됩니다. 이 부분을 어떻게
해결할지 모르겠습니다..
2. 곁다리로, 함수 중 하나를 여쭤보고자 합니다.
메뉴얼에 있는함수중에, AvgDeviation(Price,Length) 라는 편차평균을 구하는 놈이 있는데, 얘는
용도가 뭔가요? 편차의 합은 항상 0이라서, 평균이 0일텐데 정확한 용도가 궁금합니다..
항상 갑갑한 질문 죄송합니다....
2024-11-20
653
글번호 185467
지표
답변완료
수식 검토 부탁드리겠습니다
질문 몇가지 부탁드리겠습니다
질문1. ARRV 배열의 이동평균을 ARRMA 로 작성했는데요,
값이 제대로 (작게 나오네요) 안나오네요 어디서 잘못 작성한건지 검토 좀 부탁 드리겠습니다
작성한 수식대로라면 ARRV 배열에 포함된 값들로만 3이동평균 한게 맞지 않나요??
VAR : P1(0),SUM1(0),ARRMA(0);
var : m1(0),m2(0),T(0),HH(0),HH1(0),LL(0),CNT(0),HARR(0),hvi(0);
VAR:TLUP(0);
ARRAY : ARR[100](0),VII[100](0),ARRV[100](0);
if H>L*1.11 Then
{
TLUP=TL_NEW(sDatE,sTimE,H,sDatE,sTimE,99999);
TL_SetColoR(TLUP,CyaN);
TL_SetSizE(TLUP,1);
for cnt = 99 downto 1
{
ARR[CNT] = ARR[CNT-1];
VII[CNT] = VII[CNT-1];
ARRV[CNT] = ARRV[CNT-1];
}
ARR[0] = H;
VII[0] = DayOpen*1.10;
if ARR[4] > 0 Then
{
HARR = 0;
HVI = 0;
For cnt = 0 to 4
{
if harr == 0 or (harr > 0 and ARR[cnt] > harr) Then
{
HARR = ARR[cnt];
HVI = VII[cnt];
}
}
if HVI > 0 Then
{
ARRV[0] = HVI;
}
}
# Plot11(ARR[0]);
# Plot12(HARR[0]);
Plot13(ARRV[0]);
P1=3;
IF ARRV[P1-1]>0 TheN
{
SUM1=0;
FoR CNT= 0 TO P1-1;
{
SUM1= SUM1+ARRV[CNT];
}
ARRMA=SUM1/P1;
PLOT22(ARRMA);
}
}
질문2.
아래 수식에서 배열 ARR의 5일간 최고값을 HARR에 대입하고 그 값들로 "ARRH 라는 배열"로 만들고 난뒤에,
ARR 배열에 ARRH값을 삽입하고자 (0번에 ARRH 값이 오고 그다음에 H값이 오도록) 아래와 같이 작성했는데 잘 안나오네요 어디서 잘못됐는지 한번 봐주셨으면 합니다
ARR[1]을 출력했을때 HIGH 값이 잘 나오는데 ARR[0]으로 하면 5일간 최고 고가 값이 안나오네요..
VAR : P1(0),SUM1(0),ARRMA(0);
var : m1(0),m2(0),T(0),HH(0),HH1(0),LL(0),CNT(0),HARR(0),hvi(0);
VAR:TLUP(0);
ARRAY : ARR[100](0),VII[100](0),ARRV[100](0),ARRH [100](0);
if H>L*1.11 Then
{
TLUP=TL_NEW(sDatE,sTimE,H,sDatE,sTimE,99999);
TL_SetColoR(TLUP,CyaN);
TL_SetSizE(TLUP,1);
for cnt = 99 downto 1
{
ARR[CNT] = ARR[CNT-1];
VII[CNT] = VII[CNT-1];
ARRV[CNT] = ARRV[CNT-1];
ARRH[CNT]= ARRH[CNT-1];
}
ARR[0] = H;
VII[0] = DayOpen*1.10;
if ARR[4] > 0 Then
{
HARR = 0;
HVI = 0;
For cnt = 0 to 4
{
if HARR == 0 or (HARR > 0 and ARR[cnt] > HARR) Then
{
HARR = ARR[cnt];
HVI = VII[cnt];
}
}
if HVI > 0 AND HARR>0 Then
{
ARRV[0] = HVI;
ARRH[0]=HARR;
}
}
FoR cnt = 99 downto 1
{
ARR[CNT] = ARR[CNT-1];
}
ARR[0]=HARR[0];
Plot12(HARR);
# Plot11(ARR[0]);
}
질문3.
arr 배열의 값들을 보고자 디버그 수식을 작성했는데요
혹시 각 봉에서의 모든 배열 값들을 외부로 추출해서 쓰려면 (PRINT)
MessageLoG("%.1f,%.1f,%.1f",ARR[0],ARR[1],ARR[2]);
예를들어 50번 까지 보려면 이런식으로 모두 나열해서 쓰는 방법 밖에 없나요??
범위 지정 할 수 있는 수식이 있는지 궁금합니다
2024-11-20
714
글번호 185465
지표