답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
질문사항
시스템식에서 주문함수 exitlong(),exitshort()와
SetStopProfittarget()와 Setstoploss()를 같이 사용하고 싶습니다.
보통 주문청산을 사용할때는 exitlong(),exitshort()를 중간에 주문청산시 사용하고
코딩 맨 마지막에는 SetStopProfittarget()와 Setstoploss()를 사용합니다.
저는 SetStopProfittarget()와 Setstoploss()를 중간에도 사용하고
필요시 2번 이상도 사용하고 싶습니다.
그래서 아래와 같이 코딩해 보았는데 잘 되지 않는것 같습니다.
도움 부탁드립니다.
input : 틱사이즈(0.01) ;
var : 이평(0) ;
이평 = ma(C,20) ;
f marketposition == 0 and C > 이평 then
{
Buy("b1",OnClose,DEf,amt);
매수가격 = EntryPrice(0) ;
}
if MarketPosition == 1 Then
{
if MaxEntries(0) == 1 then
Buy("b2",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 2 Then
Buy("b3",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 3 Then
Buy("b4",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 4 Then
Buy("b5",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 5 Then
Buy("b6",AtLimit,매수가격-10*pricescal*MaxEntries,1);
# 청산 1
Exitlong("BP",AtLimit,AvgEntryPrice+10*PriceScale) ;
# 청산 2
if OpenPositionProfit/틱사이즈 > 10*PriceScale Then
ExitLong("bx",AtLimit,c+10*PriceScale);
# 청산 3-1
if MaxEntries() >= 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
SetStopProfittarget(0);
# 청산 3-2
if MaxEntries() < 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
SetStopProfittarget(0);
}
# 청산 4
SetStopProfittarget(50*PriceScale,PointStop);
위와 같이 청산 코딩을 4개로 할 경우 문제(청산이 안되거나)가 되는 부분이나
논리적으로 잘못된 부분이 있으시면 수정 부탁드립니다.
제가 하고자 하는 청산은 아래와 같습니다.
청산 1 : 가격이 하락하여 다계약 진입한 경우 진입 평균가보다 10틱 위에서 청산
청산 2 : 가격이 하락하여 다계약 진입한 경우 다계약의 현재 포지션 총수익 10틱 이상인 경우 현재가에서 10틱 위에서 청산
청산 3 : 총 3회 이상 진입한 경우 3번째 진입부터는 10틱 이상 수익시 개별 청산
3회 미만은 평균가보다 10틱 이상 또는현재 총수익이 10틱 이상인 경우 청산
또는
총 3회 미만 진입한 경우는 10틱 이상 수익시 개별 청산하고
3회 이상부터는 평균가 보다 10틱 이상 또는 총수익이 10틱 이상인 경우 청산
청산 4 : 1계약 진입후 가격이 지속 상승한 경우 50틱에서 청산(익절)
도움 부탁드립니다.
감사합니다.
2023-04-07
1471
글번호 168015
시스템
답변완료
문의 드립니다.
매매을 원하는 시간을 지정할 수 있도록 추가 부탁드립니다.
var1 = BollBandUp(20,2);
Var2 = BollBandDown(20,2);
if CrossUp(c,var1) and C > (DayHigh+DayLow)/2 Then
Buy();
if CrossDown(c,var1) Then
ExitLong();
if CrossDown(c,var2) and C < (DayHigh+DayLow)/2 Then
Sell();
if CrossUp(c,var2) Then
ExitShort();
2023-04-07
2245
글번호 168004
시스템
답변완료
트렌드 쌍바닥 시간대
inputs: ATRLength(15), Strength(20);
input : 쌍바닥상(2),쌍바닥하(2);
var : STrend(0),ATRv(0), avgv(0), dnv(0), upv(0), trend(1), flag(0), flagh(0), ST(0),hl(0);
var : idx(0),hh(0),ll(0),EP1(0),EP2(0);
var : ema1(0),ema2(0),ema3(0),h1(0),l1(0);
Ep1 = 2/(ATRLength+1);
Ep2 = 2/(Strength+1);
idx = idx+1;
if idx < ATRLength Then
{
hh = DayHigh;
ll = daylow;
}
Else
{
hh = Highest(High, ATRLength);
ll = Lowest(Low, ATRLength);
}
if idx < Strength Then
{
h1 = DayHigh;
l1 = daylow;
}
Else
{
h1 = Highest(High, Strength);
l1 = Lowest(Low, Strength);
}
hl = hh-ll;
if idx == 1 Then
{
ema1 = hl;
ema2 = h;
ema3 = l;
}
Else
{
ema1 = hl * EP1 + ema1 * (1-EP1);
ema2 = h * EP2 + ema2 * (1-EP2);
ema3 = l * EP2 + ema3 * (1-EP2);
}
atrv = ema1;
avgv = (ema2+ema3)/2;
upv = avgv + ATRv;
dnv = avgv - ATRv;
if idx >= 2 then
{
if c > upv[1] and c > h1[1] then trend = 1;
else if c < dnv[1] and c < l1[1] then trend = -1;
if trend < 0 and trend[1] > 0 then flag=1; else flag=0;
if trend > 0 and trend[1] < 0 then flagh = 1; else flagh = 0;
if trend > 0 and dnv < dnv[1] then dnv=dnv[1];
if trend < 0 and upv > upv[1] then upv=upv[1];
if flag == 1 then upv = avgv + ATRv;
if flagh == 1 then dnv = avgv - ATRv;
if trend == 1 then ST = dnv; else ST = upv;
STrend = trend;
}
if Trend != Trend[1] Then
{
if Trend == 1 Then
{
var1 = h;
var2 = var1[1];
if st<dayhigh-0.7 and Var4 > 0 and var3 <= Var4+PriceScale*쌍바닥상 and var3 >= Var4-PriceScale*쌍바닥하 Then
{
Buy("b");
}
}
Else
{
Var3 = l;
Var4 = Var3[1];
}
}
Else
{
if Trend == 1 Then
{
if h > var1 Then
var1 = h;
}
if Trend == -1 Then
{
if l < var3 Then
var3 = l;
}
}
if MarketPosition == 1 and BarsSinceEntry == 1 Then
ExitLong("bx");
당일 고점 -0.7p 아래에서 매수 부분을, 시초부터 9시30분까지는 고점 관계없이 무조건 매수하고, 9시30분 이후부터만(장 종료시까지) 고점 -0.7p 아래에서 매수로 수정 부탁합니다.
2023-04-07
1458
글번호 168001
시스템
답변완료
수식 작성 문의
청산이후 최고가 대비 3%이상 하락후, 그 최저가 대비 1%이상 상승 돌파시 매수하도록 아래와 같이 수식을 작성하여 시뮬레이션했는데, 수식에 문제가 있는지 제대로 작동하지 않고 오랫동안 정지상태로 있다가 프로그램 종료됩니다. Var3의 값을 찾는데 어려움이 있는 것으로 보이는데, 수식을 수정하는데 도움을 주시면 고맙겠습니다.
Var1= Highest(H,BarsSinceExit(1));
Var2= NthHighestBar(1,H,BarsSinceExit(1));
Var3= Lowest(L,Var2);
If MarketPosition==0 and Var3<Var1*(1-0.03) and CrossUp(L,Var3*(1+0.01)) Then
Buy("매수",OnClose);
2023-04-07
1231
글번호 167995
시스템