커뮤니티

당일 첫봉에서 진입이 안됩니다, 그리고 계좌예수금에 따라 베팅사이즈를 조절

프로필 이미지
엠씨용가
2020-06-07 11:34:50
1788
글번호 139595
답변완료
안녕하세요 ^^ 1) 아래와 같은 수식을 사용할 경우 당일 첫봉에서 매수/매도 진입이 전혀 되지 않습니다. 어떻게 해야될까요? 2) 계좌 예수금에 따라 베팅사이즈를 조절하려면 아래와 같이 수식을 적으면 될까요? (모의투자) input : n(3),risk(1.5%),rt(0.17),MUL(50000); var : noise(0),sum(0),cnt(0), RANGE(0),LTR(0),STR(0), L1(0),L2(0),L3(0),S1(0), S2(0),S3(0), NL1(0), NL2(0),NL3(0), NS1(0), NS2(0), NS3(0), VL(0),Lunit(0),LUNIT1(0),LUNIT2(0),SUNIT(0), SUNIT1(0), SUNIT2(0), Accoundnum(""),value(0); accoundnum = GetAccount(0); value = GetUnclearedDeposits(accoundnum); VL = value / (dayclose(1) * MUL * rt); LUNIT = INT((value * RISK) / (LTR * MUL)); SUNIT = INT((value * RISK) / (STR * MUL)); # ENTRY L1 = DAYOPEN + LTR ; L2 = L1 + (LTR * 0.5); L3 = L1 + LTR; S1 = DAYOPEN - STR; S2 = S1 - (STR * 0.5); S3 = S1 - STR; NL1 = LatestExitPrice(1)+LTR; NL2 = NL1 + LTR * 0.5; NL3 = NL1 + LTR; NS1 = LatestExitPrice(1)-STR; NS2 = NS1 - STR * 0.5; NS3 = NS1 - Str; IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then { IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1); IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1); } # 매수 피라미딩 IF MarketPosition == 1 AND STIME <153000 and IsEntryName("L1")==True THEN { if highest(h,BarsSinceEntry) <= L2 Then buy("L2",ATSTOP,L2,LUNIT2); if highest(h,BarsSinceEntry) <= L1 + LTR Then buy("L3",ATSTOP, L3,LUNIT2); } # 매수청산 IF MarketPosition == 1 then { if NextBarSdate == SDATE Then ExitLong("LS",AtStop,LatestEntryPrice - LTR); IF NextBarSdate != SDATE Then ExitLong("EL",ATMARKET); } # 매도 피라미딩 IF MarketPosition == -1 AND STIME < 153000 AND IsEntryName("S1") == True THEN { IF Lowest(L,BarsSinceEntry) >= S2 Then SELL("S2",AtStop,S2,SUNIT2); IF Lowest(L,BarsSinceEntry) >= S1 - STR Then SELL("S3",AtStop,S3,SUNIT2); } # 매도청산 IF MarketPosition == -1 then { IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR); SetStopEndofday(1545); } ELSE SetStopEndofday(0); #해제 # 재진입 IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then { IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1); IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1); } IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN { IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2); IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2); } IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then { IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2); IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2); }
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2020-06-08 13:33:57

안녕하세요 예스스탁입니다. 1 작성하신 수식에는 첫봉에 신호가 발생할수 있는 내용이 없습니다. 각 진입에 NextBarSdate == sDate라는 조건이 있습니다. 다음봉 시가의 날짜와 완성봉의 날짜가 같다라는 조건으로 첫봉이 완성이 되어야 atstop으로 진입이 조건이 충족되고 가격을 셋팅하면 그 다음봉에 신호가 발생합니다. 그러므로 당일 두번째 봉부터 신호가 나올수 있습니다. 첫봉에 신호가 발생할수 있는 내용을 추가하셔야 합니다. #오늘 마지막봉이 완성되면 #다음봉시가(다음날시가)+LTR 이상의 시세가 첫봉에서 발생하면 매수 #다음봉시가(다음날시가)-STR 이하의 시세가 첫봉에서 발생하면 매도 IF MarketPosition == 0 AND NextBarSdate != sdate Then { BUY("L11",ATSTOP,NextBarOpen+LTR,LUNIT1); SELL("S11",ATSTOP,NExtBarOpen-STR,SUNIT1); } LTR,STR,LUNIT1,SUNIT1변수가 0값입니다. 계산식 추가하시기 바랍니다. 2 예수금 부분은 %값을 다르게 지정하셔야 합니다. 1.5%와 같이 외부변수 지정이 되지 않습니다. 0.015로 지정하시면 됩니다. 랭귀지에서 실제 잔고값을 사용시 유의하시기 바랍니다. 차트에 과거봉에는 값이 없습니다. 즐거운 하루되세요 > 엠씨용가 님이 쓴 글입니다. > 제목 : 당일 첫봉에서 진입이 안됩니다, 그리고 계좌예수금에 따라 베팅사이즈를 조절 > 안녕하세요 ^^ 1) 아래와 같은 수식을 사용할 경우 당일 첫봉에서 매수/매도 진입이 전혀 되지 않습니다. 어떻게 해야될까요? 2) 계좌 예수금에 따라 베팅사이즈를 조절하려면 아래와 같이 수식을 적으면 될까요? (모의투자) input : n(3),risk(1.5%),rt(0.17),MUL(50000); var : noise(0),sum(0),cnt(0), RANGE(0),LTR(0),STR(0), L1(0),L2(0),L3(0),S1(0), S2(0),S3(0), NL1(0), NL2(0),NL3(0), NS1(0), NS2(0), NS3(0), VL(0),Lunit(0),LUNIT1(0),LUNIT2(0),SUNIT(0), SUNIT1(0), SUNIT2(0), Accoundnum(""),value(0); accoundnum = GetAccount(0); value = GetUnclearedDeposits(accoundnum); VL = value / (dayclose(1) * MUL * rt); LUNIT = INT((value * RISK) / (LTR * MUL)); SUNIT = INT((value * RISK) / (STR * MUL)); # ENTRY L1 = DAYOPEN + LTR ; L2 = L1 + (LTR * 0.5); L3 = L1 + LTR; S1 = DAYOPEN - STR; S2 = S1 - (STR * 0.5); S3 = S1 - STR; NL1 = LatestExitPrice(1)+LTR; NL2 = NL1 + LTR * 0.5; NL3 = NL1 + LTR; NS1 = LatestExitPrice(1)-STR; NS2 = NS1 - STR * 0.5; NS3 = NS1 - Str; IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then { IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1); IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1); } # 매수 피라미딩 IF MarketPosition == 1 AND STIME <153000 and IsEntryName("L1")==True THEN { if highest(h,BarsSinceEntry) <= L2 Then buy("L2",ATSTOP,L2,LUNIT2); if highest(h,BarsSinceEntry) <= L1 + LTR Then buy("L3",ATSTOP, L3,LUNIT2); } # 매수청산 IF MarketPosition == 1 then { if NextBarSdate == SDATE Then ExitLong("LS",AtStop,LatestEntryPrice - LTR); IF NextBarSdate != SDATE Then ExitLong("EL",ATMARKET); } # 매도 피라미딩 IF MarketPosition == -1 AND STIME < 153000 AND IsEntryName("S1") == True THEN { IF Lowest(L,BarsSinceEntry) >= S2 Then SELL("S2",AtStop,S2,SUNIT2); IF Lowest(L,BarsSinceEntry) >= S1 - STR Then SELL("S3",AtStop,S3,SUNIT2); } # 매도청산 IF MarketPosition == -1 then { IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR); SetStopEndofday(1545); } ELSE SetStopEndofday(0); #해제 # 재진입 IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then { IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1); IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1); } IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN { IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2); IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2); } IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then { IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2); IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2); }
프로필 이미지

엠씨용가

2020-06-08 19:08:58

엠씨용가 님에 의해 삭제된 답변입니다.