예스스탁
예스스탁 답변
2022-02-21 15:47:49
안녕하세요
예스스탁입니다.
1
시스템의 총손익은 netprofit으로 리턴받으실수 있습니다.
피라미딩일 경우에도 각 진입별로 손익 계산되어 제공되는 함수입니다.
실제 자동매매적용 이후만 파악해서 손익을 계산할수는 없습니다.
netbalance = NetProfit;
if netbalance >= goalbalance then
{
Hstate = false;
Lstate = false;
}
2
적용하시는 종목이 국내 혹은 해외선물이면 총손익이 포인트로 리턴됩니다.
시스템은 별도로 원화로 환산해서 리턴되는 값이 없습니다.
원화로 환산하고자 하시면 아래와 같이 총손익에 1포인트당 금액인 BigPointValue를 곱해서 계산하셔야 합니다.
netbalance = NetProfit*BigPointValue;
해외선물은 원화로 환산이 불가능합니다.
BigPointValue가 해당종목의 포인트당 금액으로 리턴되는데
CME종목의 경우 달러, 유렉스의 경우 유로화등 거래소별 통화로 리턴됩니다.
즐거운 하루되세요
> jshwang2 님이 쓴 글입니다.
> 제목 : 수식문의드립니다
> 안녕하세요~
현재 사용중인 수식에서 시스템이 실행된 시점부터 이 시스템 내에서 수익, 손실을 모두 합쳐
시스템의 총 손익이 제가 설정한 목표수익 이상이면 거래종료시키고 싶습니다
예를들어 목표수익이 50만원인 상황에서 시스템이 -20, -20, -20, +120 수익으로 진입청산 되었다면
4번째 거래 청산시 총 손익이 +60으로 50만원을 넘었을 때 거래종료시키고자 합니다
총손익을 계산해주는 수식은 따로 없는것 같고
거래가 끝나 청산되었을때의 진입, 청산의 틱수를 통해 계산해야할것 같은데
피라미딩까지 되어있다보니 어떻게 계산해야할지 막막하네요
아래 시스템에서 어떻게 구현해야할지 가능하다면 가르쳐주시면 감사하겠습니다!
감사합니다
-----------------
input : TT(25400), TD(20220219), MDD(200000), goalBalance(500000) ;
var : HB(14064.75), LB(13939), Hx(20000), Lx(1);
var : netBalance(0), e60(0), Hcount(0), Lcount(0),B(0),S(0),cnt(0),T1(0), Hstate(true), Lstate(true), N(0), unitP(0), exitC(0), rHB(0), rLB(0);
=> 목표수익을 goalbalance, 총손익을 netbalance라 정의
N = Highest(ATr(14), 100);
unitP = floor(MDD/(N*5*4*600));
exitC = (2-(MaxEntries-1)/2)*N;
e60 = Ema(C,60);
netbalance = ????
if netbalance >= goalbalance then
{
Hstate = false;
Lstate = false;
}
=> netbalance를 계산해 goalbalance 이상이 되면, Hstate, Lstate를 false로 바꿔 거래 정지
if Condition1 == False and sDate >= TD and sTime >= TT Then
{
Condition1 = true;
Hcount = 0;
Lcount = 0;
T1 = TotalTrades;
}
if Condition1 == true Then
{
B = 0;
S = 0;
if TotalTrades-T1 > 0 Then
{
For cnt = 1 to TotalTrades-T1
{
if MarketPosition(cnt) == 1 Then B = B+1;
if MarketPosition(cnt) == -1 Then S = S+1;
}
}
Hcount = B + IFf(MarketPosition == 1,1,0);
Lcount = S + IFf(MarketPosition == -1,1,0);
if B>0 && B == Hcount then HB = rHB;
if S>0 && S == Lcount then LB = rLB;
if MarketPosition <= 0 and Hstate == true then
{
Buy("b1",AtStop,HB,unitP);
Buy("b2",AtStop,HB+0.5*N,unitP);
Buy("b3",AtStop,HB+N,unitP);
Buy("b4",AtStop,HB+1.5*N,unitP);
}
if MarketPosition >= 0 and Lstate == true then
{
Sell("s1",AtStop,LB,unitP);
Sell("s2",AtStop,LB-0.5*N,unitP);
Sell("s3",AtStop,LB-N,unitP);
Sell("s4",AtStop,LB-1.5*N,unitP);
}
if marketposition ==1 Then
{
rHB = Highest(H, BarsSinceEntry+1) ;
if rHB < HB+0.5*N Then
Buy("b2.",AtStop,HB+0.5*N,unitP);
if rHB < HB+N Then
Buy("b3.",AtStop,HB+N,unitP);
if rHB < HB+1.5*N Then
Buy("b4.",AtStop,HB+1.5*N,unitP);
if e60 < HB+2*N Then
Exitlong("exitB1", atstop, HB-exitC);
if e60 >= HB+2*N and CrossDown(close, e60) Then
{
ExitLong("exitB2") ;
Hstate = false ;
}
Exitlong("exitB3", AtLimit, Hx);
}
if marketposition == -1 Then
{
rLB = Lowest(L, BarsSinceEntry+1);
if rLB > LB-0.5*N Then
Sell("s2.",AtStop,LB-0.5*N,unitP);
if rLB > LB-N Then
Sell("s3.",AtStop,LB-N,unitP);
if rLB > LB-1.5*N Then
Sell("s4.",AtStop,LB-1.5*N,unitP);
if e60 > LB-2*N Then
ExitShort("exitS1", atstop, LB+exitC);
if e60 <= LB-2*N and CrossUp(close, e60) Then
{
ExitShort("exitS2");
Lstate = false ;
}
exitshort("exitS3", AtLimit, Lx);
}
if Hcount >= 3 Then Hstate = False;
if Lcount >= 3 Then Lstate = False;
if H >= Hx then Hstate = false;
if L <= Lx then Lstate = false;
}