예스스탁
예스스탁 답변
2025-01-10 14:38:57
안녕하세요
예스스탁입니다.
1
Input : 당일수익틱수(100);
input : pt(20), sl(20);
input : StartTime(83000),EndTime(060000);
var : ma10(0),ma20(0) ;
Var : N1(0),dayPl(0),당일수익(0);
var : Tcond(false),Xcond(false),TT(0),T1(0),Entry(0);
#전체 진입횟수
TT = TotalTrades;
#시작시간보다 청산시간이 크면(당일청산셋팅)
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else#아니면
{
#0시에 셋팅
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
#지정한 끝시간이 되면 Tcond는 False
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
#지정한 시작시간이 되면
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
#청산시간이 다음날이면 당일청산 해제
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
#Tcond는 true
Tcond = true;
#Xcond는 False
Xcond = False;
#첫봉기준 총손익
N1 = NetProfit;
#전일까지 총거래횟수
T1 = TT[1];
}
#당일수익틱수를 포인트로 환산
당일수익 = PriceScale*당일수익틱수;
#당일총손익 = 현재총손익과 첫봉기준 총손익 차이
daypl = NetProfit-N1;
#현재총거래횟수-전일까지총거래횟수+포지션 진입중이면 1가산
entry = TT-T1+IFf(MarketPosition != 0,1,0);
#거래횟수증가(청산발생)
if TotalTrades > TotalTrades[1] then
{
#당일손익이 당일수익이상이면 Xcond는 true
if daypl >= 당일수익 Then
Xcond = true;
#청산명 dbp, dsp발생하면 Xcond는 true
if (IsExitName("dbp",1) == true or
IsExitName("dsp",1) == true) then
Xcond = true;
}
ma10 = ma(c,10);
ma20 = ma(c,20);
#xcond는 False이고 Tcond true일때만 진입
if Xcond == false and Tcond == true then
{
if marketposition <= 0 and MA10 > MA20 then
{
#당일 첫진이거나
#두번째 진입은 직전진입 손실일때만 진입
if entry == 0 or
(entry == 1 and MarketPosition == -1 and PositionProfit(0) < 0) or
(entry == 1 and MarketPosition == 0 and PositionProfit(0) < 0) Then
buy("b",atlimit,C,1) ;
Else #아니면 청산만 동작
ExitShort("sx");
}
if marketposition >= 0 and MA10 < MA20 then
{
#당일 첫진이거나
#두번째 진입은 직전진입 손실일때만 진입
if entry == 0 or
(entry == 1 and MarketPosition == 1 and PositionProfit(0) < 0) or
(entry == 1 and MarketPosition == 0 and PositionProfit(0) < 0) Then
sell("s",atlimit,C,1) ;
Else #아니면 청산만 진입
ExitLong("bx");
}
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
}
setstopprofittarget(pt*pricescale,pointstop);
setstoploss(sl*pricescale,pointstop);
2
Input : 당일수익틱수(100);
input : pt(20), sl(20);
input : StartTime(83000),EndTime(060000);
var : ma10(0),ma20(0) ;
Var : N1(0),dayPl(0),당일수익(0);
var : Tcond(false),Xcond(false),TT(0),T1(0),Entry(0);
#전체 진입횟수
TT = TotalTrades;
#시작시간보다 청산시간이 크면(당일청산셋팅)
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else#아니면
{
#0시에 셋팅
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
#지정한 끝시간이 되면 Tcond는 False
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
#지정한 시작시간이 되면
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
#청산시간이 다음날이면 당일청산 해제
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
#Tcond는 true
Tcond = true;
#Xcond는 False
Xcond = False;
#첫봉기준 총손익
N1 = NetProfit;
#전일까지 총거래횟수
T1 = TT[1];
}
#당일수익틱수를 포인트로 환산
당일수익 = PriceScale*당일수익틱수;
#당일총손익 = 현재총손익과 첫봉기준 총손익 차이
daypl = NetProfit-N1;
#현재총거래횟수-전일까지총거래횟수+포지션 진입중이면 1가산
entry = TT-T1+IFf(MarketPosition != 0,1,0);
#거래횟수증가(청산발생)
if TotalTrades > TotalTrades[1] then
{
#당일손익이 당일수익이상이면 Xcond는 true
if daypl >= 당일수익 Then
Xcond = true;
#청산명 dbp, dsp발생하면 Xcond는 true
if (IsExitName("dbp",1) == true or
IsExitName("dsp",1) == true) then
Xcond = true;
#직전거래가 40틱 수익이거나 손실이면 Xcond는 true
if PositionProfit(1) >= PriceScale*40 or PositionProfit(1) <= PriceScale*40 Then
Xcond = true;
}
ma10 = ma(c,10);
ma20 = ma(c,20);
#xcond는 False이고 Tcond true일때만 진입
if Xcond == false and Tcond == true then
{
if marketposition <= 0 and MA10 > MA20 then
{
#당일 첫진입이거나
#두번째 진입은 직전진입이 40틱이상 수익이거나 40틱이상 손실이 아닐때만 진입
if entry == 0 or
(entry == 1 and MarketPosition == -1 and abs(PositionProfit(0)) < PriceScale*40) or
(entry == 1 and MarketPosition == 0 and abs(PositionProfit(0)) < PriceScale*40) Then
buy("b",atlimit,C,1) ;
Else #아니면 청산만 동작
ExitShort("sx");
}
if marketposition >= 0 and MA10 < MA20 then
{
#당일 첫진입이거나
#두번째 진입은 직전진입이 40틱이상 수익이거나 40틱이상 손실이 아닐때만 진입
if entry == 0 or
(entry == 1 and MarketPosition == 1 and abs(PositionProfit(0)) < PriceScale*40) or
(entry == 1 and MarketPosition == 0 and abs(PositionProfit(0)) < PriceScale*40) Then
sell("s",atlimit,C,1) ;
Else #아니면 청산만 진입
ExitLong("bx");
}
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
}
setstopprofittarget(pt*pricescale,pointstop);
setstoploss(sl*pricescale,pointstop);
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 시스템식 부탁드립니다.
> 안녕하세요.
항상 도움 주셔서 감사합니다.
아래 조건에 맞는 시스템식 부탁드립니다.
제가 초보입니다.
죄송하지만 주석도 같이 부탁드립니다.
종목 : 해외선물
차트 : 10분봉
요청식 1
1. 장시작 시간이 아침 8시 이지만 8시 30분 이후부터 매매를 시작하고 싶습니다.
2. 장마감 시간이 아침 7시 이지만 6시에 모든 포지션을 청산하고 싶습니다.
3. 하루에 2번 매매하는데 첫번째 매매가 수익청산 이면 매매 중단
첫번째 매매가 손실청산이면 2번까지 매매 하고 싶습니다.
4. 익일 리셋
요청식 2
1. 장시작 시간이 아침 8시 이지만 8시 30분 이후부터 매매를 시작하고 싶습니다.
2. 장마감 시간이 아침 7시 이지만 6시에 모든 포지션을 청산하고 싶습니다.
3. 하루의 2번 매매하는데 첫번째 청산이익 또는 청산손실이 40틱 이면 매매 중단
청산이익 및 청산손실이 40틱 미달하면 2번까지 매매 하고 싶습니다.
4. 익일 리셋
감사합니다.
아래 수식에서 수정 부탁드립니다.
1.
Input : 당일수익틱수(100);
input : pt(20), sl(20);
input : StartTime(83000),EndTime(060000);
var : ma10(0),ma20(0) ;
Var : N1(0),dayPl(0),당일수익(0);
var : Tcond(false),Xcond(false);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
Tcond = true;
Xcond = False;
N1 = NetProfit;
}
2.
당일수익 = PriceScale*당일수익틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 Then
Xcond = true;
if (IsExitName("dbp",1) == true or
IsExitName("dsp",1) == true) then
Xcond = true;
}
ma10 = ma(c,10);
ma20 = ma(c,20);
if Xcond == false and Tcond == true then
{
if marketposition <= 0 then
{
if MA10 > MA20 then
buy("b",atlimit,C,1) ;
}
if marketposition >= 0 then
{
if MA10 < MA20 then
sell("s",atlimit,C,1) ;
}
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
}
setstopprofittarget(pt*pricescale,pointstop);
setstoploss(sl*pricescale,pointstop);