답변완료
종목 검색부탁드립니다.
1. 다음 수식의 종목 검색식 부탁드려요.
S=sum(1);
M5=ma(C,5);
M20=ma(C,20);
상전=M5>M5(1) && M5(1)<M5(2);
하전=M5<M5(1) && M5(1)>M5(2);
상전S1=ValueWhen(1,상전,S);
상전S1_5=ValueWhen(1,상전,M5);
상전S1_20=ValueWhen(1,상전,M20);
하전S1=ValueWhen(1,하전,S);
하전S1_5=ValueWhen(1,하전,M5);
하전S1_20=ValueWhen(1,하전,M20);
상전S2=ValueWhen(2,상전,S);
상전S2_5=ValueWhen(2,상전,M5);
상전S2_20=ValueWhen(2,상전,M20);
순번조건 = 상전S1 > 하전S1 && 하전S1>상전S2;
전체조건 = 순번조건 &&
상전S2_5 < 상전S2_20 &&
하전S1_5 > 하전S1_20 &&
상전S1_5 > 상전S1_20 &&
하전S1_5 > 상전S1_5;
조건=전체조건 && !전체조건(1);
이격520=M5/M20*100-100;
CrossUp(C,M5) && sum(조건,3)>0 &&//조건 or 조건(1) or 조건(2)
이격520 < 이격기준율
--------------
이격기준율 3.5
2025-03-10
241
글번호 188977
종목검색
답변완료
시스템 식 요청 드립니다.
안녕하세요 지난번에 도움을 주셔서 제가 생각한 시스템식을 작성하게
되었습니다.
그리고 분할매도 되었을때 평단에 대한 궁금증이 해소되지 않아
주말에 시스템식을 수정하였는데, 어려움이 있어 글을 남기게 되었습니다.
먼저 그림 1을 보시면, 중간에 분할익절된 후에 평단이 진입시점의 평단으로 올라가는 것을
볼수 있었습니다. 예를들어 4차 분할익절을 하였는데, 4차 익절 후 평단이 그대로
있어야 하는데 3차 진입 평단으로 올라가는것이였습니다.
그래서 아래와 같이 시스템식을 수정하였고,
VAR9에 평단을 작성해서 넣어놨습니다. 수량이 늘었을때는 평단과 수량이 제대로 나오는데
그림 2번을 보시면 수량이 줄었을때는 평단이 안나오더라구요
수량이 늘었을때와 줄었을때 내부변수 VAR9가 서로 연동이 안되는 것 같았습니다
시스템식 수정 부탁드리겠습니다.
--------------------------------------------
input : N(14),금액(2000000);
input : 시작날짜 (20250109);
Input : 기준선기간(120);
Var : 기준선(0);
var : cntt(0),H1(0),L1(0);
var : cnt(0),sum(0),mav(0),DD(0);
var : AP(0),TT(0),entry(False);
var : LL(0),RR(0),rate(0);
var : 저항(0), B1(0) ;
Var : day(0),EntryDay(0),ddd(0),ED(0);
var : sum1(0),sum2(0),sum3(0),avg4(0),avg5(0),avg6(0);
#-------------------------------------
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
}
if TotalTrades > TotalTrades[1] Then
entry = False;
#-------------------------------------
#-------------------------------------
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N);
#-------------------------------------
#---------------------------------------
if (MarketPosition == 0) and (entry == true) and L > mav Then
Buy("1차매수",AtLimit,mav,Floor(금액/min(NextBarOpen,mav)));
if MarketPosition == 1 and L > EntryPrice*0.95 and CurrentEntries == 1 Then
Buy("2차매수",AtLimit,EntryPrice*0.95,Floor(금액*1.15/min(NextBarOpen,mav)));
if MarketPosition == 1 and L > EntryPrice*0.90 and CurrentEntries == 2 Then
Buy("3차매수",AtLimit,EntryPrice*0.90,Floor(금액*1.2/min(NextBarOpen,mav)));
if MarketPosition == 1 and L > EntryPrice*0.85 and CurrentEntries == 3 Then
Buy("4차매수",AtLimit,EntryPrice*0.85,Floor(금액*1.25/min(NextBarOpen,mav)));
if MarketPosition == 1 and L > EntryPrice*0.80 and CurrentEntries == 4 Then
Buy("5차매수",AtLimit,EntryPrice*0.80,Floor(금액*1.3/min(NextBarOpen,mav)));
if MarketPosition == 1 and L > EntryPrice*0.75 and CurrentEntries == 5 Then
Buy("6차매수",AtLimit,EntryPrice*0.75,Floor(금액*1.35/min(NextBarOpen,mav)));
#-----------------------------------
if MarketPosition == 1 Then
{
#전봉대비 수량 감소(일부 청산발생을 위미)
if CurrentContracts < CurrentContracts[1] Then
{
#최근 청산가 저장
var1 = LatestExitPrice(0);
if LatestExitName(0) == "3%익절" Then
Condition1 = true;
if LatestExitName(0) == "4%익절" Then
Condition2 = true;
if LatestExitName(0) == "5%익절" Then
Condition3 = true;
if LatestExitName(0) == "7%익절" Then
Condition4 = true;
Var5 = CurrentContracts;
Var6 = AvgEntryPrice;
#Var8은 평단임 수량이 줄면 전에 평단 가져다 써야지.
var9 = AvgEntryPrice[1];
}
#전봉대비 수량 증가(진입발생)
if CurrentContracts > CurrentContracts[1] Then
{
#Condition1~4는 False로 초기화
Condition1 = False;
Condition2 = False;
Condition3 = False;
Condition4 = False;
#진입횟수가 3회이하일때
#수량과 평단가
if CurrentEntries <= 3 Then
{
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
}
#최근 진입시점까지의 수량과 평단가
#현재 수식에서는 사용되는 부분이 없습니다. 필요하실따봐 변수로 남겨드립니다.
Var5 = CurrentContracts;
Var6 = AvgEntryPrice;
#Var9
Var9 = ((AvgEntryPrice[1]*CurrentContracts[1])+(LatestEntryPrice(0)*(CurrentContracts - CurrentContracts[1])))/ (CurrentContracts) ;
}
#현재 진입횟수가 3회 이하이고(1,2,3차 매수만 남은 상태)
#3,4,5,7% 청산중 하나가 발생했으면
#종가가 3차매수까지의 평단가 이하로 내려오면 청산
if CurrentEntries <= 3 and
(Condition1 == true or Condition2 == true or Condition3 == true or Condition4 == true) and
C < Var4*1.007 then
ExitLong("bx");
if Condition1 == False AND CurrentEntries <= 3 Then
ExitLong("3%익절",AtLimit,Var6*1.03,"",Floor(Var3*0.2),1);
if Condition2 == False AND CurrentEntries <= 3 Then
ExitLong("4%익절",AtLimit,Var6*1.04,"",Floor(Var3*0.3),1);
if Condition3 == False AND CurrentEntries <= 3 Then
ExitLong("5%익절",AtLimit,Var6*1.05,"",Floor(Var3*0.4),1);
if Condition4 == False AND CurrentEntries <= 3 Then
ExitLong("7%익절",AtLimit,Var6*1.07,"",Floor(Var3*0.1),1);
ExitLong("10%익절",AtLimit,Var6*1.10);
//4차 이상 진입
if CurrentEntries >= 4 Then
{
//4차 이후의 평균
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "4차매수" Then
{
avg4 = LatestEntryPrice(0);
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "5차매수" Then
{
avg5 = LatestEntryPrice(0);
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "6차매수" Then
{
avg6 = LatestEntryPrice(0);
}
if CurrentEntries >= 4 Then
ExitLong("4차매수익절",AtLimit,avg4*1.045,"4차매수");
if CurrentEntries >= 5 Then
ExitLong("5차매수익절",AtLimit,avg5*1.045,"5차매수");
if CurrentEntries >= 6 Then
ExitLong("6차매수익절",AtLimit,avg6*1.045,"6차매수");
}
Else
{
avg4 = 0;
avg5 = 0;
avg6 = 0;
}
}
Else#매수진입중이 아니면
{
#변수 0으로 초기화
var1 = 0;
Var2 = 0;
}
-------------------------------------------------
2025-03-10
279
글번호 188975
시스템