커뮤니티

시스템식 수정 부탁드립니다.

프로필 이미지
램프
2026-04-18 23:44:22
104
글번호 231670
답변완료

안녕하세요. 항상 수고 많으십니다.


아래 식은 그리드 전략인데 onclose 주문은 진입가가 정확히 그리드 간격만큼 증감하는 것이 아니어서, atlimit 사용한 지정가 주문으로 바꾸고 싶습니다.

제가 주문 형식만 바꾼다고 해 봤는데 이상하게 진입이 완전히 틀어져서 도움 요청드립니다.


1. 조건

- 최초 기준값은 첫 봉 시가

- 모든 주문수량은 한번에 1계약: 즉 2포인트마다 1개씩, 오르면 매도 내리면 매수

2. 진입

- 최초 기준값에서 2포인트 오른 가격에 지정가 매도주문을 미리 내고, 2포인트 내린 가격에 지정가 매수주문을 낸다.

- 매도나 매수 어느 한 쪽이 체결되면 그 체결가격이 새로운 기준값이 된다.

- 중복진입은 제한 없이 허용

3. 청산

- 매수잔고가 있는 경우, 매도주문이 아닌 매수 청산 주문을 새로운 기준값보다 2포인트 오른 가격에 지정가로 낸다. 또한 2포인트 내린 가격에 지정가 매수주문을 같이 낸다(한번에 전체 청산을 막기 위함)

- 마찬가지로 매도잔고가 있으면 매도 청산 주문을 2포인트 내린 가격에 지정가로 낸다. 또한 2포인트 오른 가격에 지정가 매도주문을 같이 낸다.

- 잔고가 없으면 2포인트마다 신규로 매수/매도 1계약씩 진입

4. 이 과정 무한 반복




input : grid(2);

var : lastEntryPrice(0), targetQty(0);


if Index == 0 Then

lastEntryPrice = Open;


if lastEntryPrice > 0 Then

{

// [상승 시]

// Close가 기준가+2포인트 이상일 때마다 로직 수행

if Close >= lastEntryPrice + grid Then

{

// 1개씩 추가 매도/청산

if MarketPosition == 1 Then

{

ExitLong("EL", OnClose, Def, "", 1, 1);

}

else

{

Sell("S", OnClose, Def, 1);

};

// 2포인트 상승할 때마다 기준점을 2포인트 높임

lastEntryPrice = lastEntryPrice + grid;

};


// [하락 시]

if Close <= lastEntryPrice - grid Then

{

// 1개씩 추가 매수/청산

if MarketPosition == -1 Then

{

ExitShort("ES", OnClose, Def, "", 1, 1);

}

else

{

Buy("B", OnClose, Def, 1);

};


// 2포인트 하락할 때마다 기준점을 2포인트 낮춤

lastEntryPrice = lastEntryPrice - grid;

};

};

시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-04-20 15:12:28

안녕하세요 예스스탁입니다. atlimit타입으로 변경해 드립니다. 다만 시스템은 미리 특정가격에 주문을 내는 기능이 없습니다. 지정한 가격에 도달하면 그때 신호와 주문이 집행됩니다. input : grid(2); var : lastEntryPrice(0), S(0); if Index == 0 Then lastEntryPrice = Open; if lastEntryPrice > 0 Then { if MarketPosition == 0 Then { if TotalTrades == 0 Then S = lastEntryPrice; Else S = LatestExitPrice(1); Sell("S1",AtLimit, lastEntryPrice+2,1); Buy("B1",AtLimit, lastEntryPrice-2,1); } if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] Then S = LatestEntryPrice(0); if CurrentContracts < CurrentContracts[1] Then S = LatestExitPrice(0); ExitLong("EL",atLimit,S+2,"", 1, 1); Buy("B",AtLimit,S-2,1); } if MarketPosition == -1 Then { if CurrentContracts > CurrentContracts[1] Then S = LatestEntryPrice(0); if CurrentContracts < CurrentContracts[1] Then S = LatestExitPrice(0); ExitShort("ES",atLimit,S-2,"", 1, 1); Sell("S",AtLimit,S+2,1); } } 즐거운 하루되세요