답변완료
분할매수후 평단가 매도시 일괄매도가 아닌 원하는 부부만 평단가 매도 질의
아래의 수식중 현재는 분할매수후 원하는 평단가 수익율에 해당되면 일괄 매도가 되도록 되어 있는데,
1. 일괄매도 명령을 수정하여 10회까지의 분할매수 수량은 현재와 같이 평단가 기준 1% 수익이 발생하면 일괄매도 하고,
2. 11회부터 20회까지 분할매수 들어가는 수량은 11회분 부터 직전 3회 까지의 분할매수 수량(예; 9~11회분,이하 동일)만의 평단가를 산정하여 1% 평단가 익절을 하도록 하고 싶습니다.
# 이유는; 20회까지 전량 분할 매수시 계속하여 하락 하게 되면 원금 전액이 묶이게 되므로 투자금의 회전이 안되므로, 10회 이후 부터는 자금 회전을 위하여 최근 분할 매수분 3회 까지의 매수 부분만 평가하여 바로바로 매도하도록 하고 싶습니다. 부탁 드립니다.
---------------------------------------------------------------------------
input : 금액(10000000),원하는_평단가요율(1.01),시작날짜(20200101);
var : Bcond(False),x(False);
var1 = Highest(c,15);
Var2 = Lowest(c,20);
var3 = Highest(c,20);
Var4 = Lowest(c,20);
....이하생략
Var11 = Lowest(c,20);
var12 = Highest(c,20);
Var13 = Lowest(c,40);
var14 = Highest(c,40);
....이하생략
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "a1" Then
Condition1 = true;
if LatestEntryName(0) == "a3" Then
Condition3 = true;
...이하생략
if LatestEntryName(0) == "b1" Then
Condition11 = true;
if LatestEntryName(0) == "b2" Then
Condition13 = true;
...이하생략
}
//////////////////////////////////////////////////////////////////////////////////
if MarketPosition == 1 Then
exitlong("평단매도",atlimit,AvgEntryPrice*원하는_평단가요율);
///////////////////////////////////////////////////////////////////////////////////
}
Else
{
x = False;
Condition1 = False;
Condition3 = False;
...이하생략
Condition11 = False;
Condition13 = False;
...이하생략
}
Bcond = False;
if Bcond == False and x == False and CrossUp(c,var1[1]) and sDate >= 시작날짜 and Condition1 == False Then
{
Bcond = true;
Buy("a1",OnClose,DEf,((금액*(1/20))/C));
}
if Bcond == False and X == false and CrossDown(c,var11[1]) and sDate >= 시작날짜 and Condition11 == False Then
{
Bcond = true;
Buy("b1",OnClose,DEf,((금액*(1/20))/C));
}
..이하생략
2022-05-17
876
글번호 158955
시스템
답변완료
질문과 수식 검토 부탁드립니다.
수고하십니다.
아래의 수식을 검토하여 주시고 질문 좀 부탁드려요
#======================================================#
# 질문 : 잔고함수와 사운드, 기타
#1. 위탁증거금과 지정한 계좌예수금의 차이, 계좌종류(1:위탁, 2:저축, 3:선/옵션)에 따라 사용하는 함수인가?
# 지정계좌위탁증거금 = GetOpenOrderInitialMargin(계좌번호); // 선물옵션용 함수인것인가?
# 지정계좌예수금 = GetUnclearedDeposits(계좌번호);
#2. 계좌종류(1:위탁, 2:저축, 3:선/옵션), 1:위탁이면 [1103]계좌평가(실시간)화면으로 연계되는것인가? 매뉴얼은 3번선물옵션 설명만
#3. 종목순번은 0번부터 시작인가? 1번부터 시작인가? 0번부터 인것 같은데, YL매뉴얼에 그레이 표시는 무엇인가?
#3-1. [1103]계좌평가(실시간)에서 비번입력후 조회하여야만 잔고함수 사용가능한 것인가?
#3-2. YT에 접속시 [1103]계좌평가(실시간)메뉴를 비번자동입력 조회할 수 없는 것인가? 반드시 수작업 입력해야 하는가?
# YT에 접속시 [1103]계좌평가(실시간)를 최소 1회 조회하고 나면 가원장 구축상태가 된다.
#4. YL 매뉴얼에서 잔고함수 사용시에 기술한 (사용자는 반드시 여기에 동의 해야만 사용할 수 있습니다.) : 동의 메뉴가 있는지요? 찾지를 못하겠네요
# 전에 동의를 했던 것인지 모르겠고, 찾지를 못했지만 가원장 구축된다.
#5. 가상화면 Alt+1~6 번에 각각 전략실행차트 가동시에 현재 가상화면1번 선택상황이면 2~5번까지 실행중인 상태인가.
#6. PlaySound는 for문 n번 반복이 안된다. 사운드설정상태나 cool time 대기시간이 있는 것인가?
#7. Phone, SMS 송신 기능이 현재 서비스 되는가? SMS(Grey)
#======================================================#
# 자금관리 2번 : 자금관리 , 자금관리 중 동일가중(비중) 진입수량 관리만 한다.
#======================================================#
Var : 계좌번호("") ;
Var : 보유계좌총갯수(0), 구축상태(0), 계좌종류(0), 보유총종목수(0), 종목순번(0), 지정계좌위탁증거금(0), 지정계좌예수금(0),
종목평가손익합계(0), 보유종목평가합계(0) ;
Arrays: 단축코드[50](""), 평균단가[50](0), 종목현재가격[50](0), 종목평가손익[50](0), 종목보유수량[50](0) ; // 배열 개별처리
#Array : 보유종목[5,50](0) ; // 배열 전체처리 [1]단축코드,[2]평균단가 ,, 이겅 문자랑 숫자네
#------------------------------------------------------#
var : Equity(100000000), Leverage(0.7), NumberOfPortfolios(10) ;
var : WorkingCapital(0), CapitalOfLeverage(0), ewAmount(0), EntryQuantity(0), ReserveFunds(0) ;
#------------------------------------------------------#
#GetAccount(Accountindex) // 계좌번호순서 : 관리 메뉴의 계좌순서 설정에서 정렬한다.
보유계좌총갯수 = GetNumAccounts;
계좌번호 = GetAccount(0); // index 0번부터 시작, 0번째 계좌번호 받기
For Value99 = 1 to 10
{
구축상태 = GetAccountStatus(계좌번호); // 가원장 구축상태 (구축 :1, 미구축 : 0)
If 구축상태 == 1 Then Value99 = 10;
}
If 구축상태 == 0 Then
{
#Phone_Call(주인님! 가원장 안되요!) // 기능이 있을라나
#SMS_Call(주인님! 가원장 안되요!) // 기능이 있을라나, 그레이 된것으로 보아 서비스 안하는듯
For Value10 = 1 to 3 // 사운드는 n번 반복이 안된다. 설정상태나 대기상태가 있는 것 같다.
{
PlaySound("C:₩예스트레이더₩data₩Sound₩ahooga.wav") ; // wav만 되나 mp3는 안되는것인가
#PlaySound("C:₩예스트레이더₩data₩Sound₩party.wav") ; // 요건 소리도 크고 좀 길다 .3초 정도인가.
Alert("가원장 NO 돼지소리 %.f", 구축상태) ;
}
}
If 구축상태 == 1 Then
{
Alert("가원장 OK %.f", 구축상태) ;
PlaySound("C:₩예스트레이더₩data₩Sound₩accept.wav") ;
}
계좌종류 = GetAccountType(계좌번호); // 계좌종류(1:위탁, 2:저축, 3:선/옵션)
보유총종목수 = GetNumPositions(계좌번호) ;
지정계좌위탁증거금 = GetOpenOrderInitialMargin(계좌번호); // 위탁증거금과 계좌예수금의 차이?? 선물옵션용 함수인것인가?
지정계좌예수금 = GetUnclearedDeposits(계좌번호); // 위탁증거금과 계좌예수금의 차이??
# 종목순번은 0번부터 시작? ,1부터 시작? 확인 필요
종목평가손익합계 = 0; 보유종목평가합계 = 0;
For 종목순번 = 0 To 보유총종목수-1 // For 종목순번 = 1 To 보유총종목수 (종목순번이 1번부터이면)
{ // 종목순번은 1번부터 시작? ,0부터 시작? 확인 필요
단축코드[종목순번] = GetPositionSymbol(종목순번,계좌번호);
평균단가[종목순번] = GetPositionAveragePrice(단축코드[종목순번],계좌번호);
종목현재가격[종목순번] = GetPositionMarketValue(단축코드[종목순번],계좌번호);
종목평가손익[종목순번] = GetPositionOpenPL(단축코드[종목순번],계좌번호);
종목보유수량[종목순번] = GetPositionQuantity(단축코드[종목순번],계좌번호);
종목평가손익합계 = 종목평가손익합계 + 종목평가손익[종목순번];
보유종목평가합계 = 보유종목평가합계 + 종목평가손익[종목순번] + (종목현재가격[종목순번]*종목보유수량[종목순번]);
}
#------------------------------------------------------#
WorkingCapital = 지정계좌예수금 + 보유종목평가합계 ; # 총운전자금 = 지정계좌예수금 + 보유종목평가합계
CapitalOfLeverage = WorkingCapital * Leverage ; # 운용자금 = 총운전자금*Leverage
ReserveFunds = WorkingCapital - CapitalOfLeverage ; # 예비자금 = 총운전자금 - 운용자금
#지우지 말것
#ewAmount = CapitalOfLeverage / (NumberOfPortfolios - 보유총종목수) ; # 동일가중금액(진입금액) = 운용자금 / 종목수
ewAmount = CapitalOfLeverage / (NumberOfPortfolios) ; # 동일가중금액(진입금액) = 운용자금 / 종목수
If 보유총종목수 < NumberOfPortfolios and 지정계좌예수금 > ewAmount Then
EntryQuantity = int(ewAmount / Close) ; # 진입수량 = int(진입금액/종가)
Else
EntryQuantity = 0 ;
#------------------------------------------------------#
If Index == 0 Then
Print("C:₩주식연구₩계좌평가.csv", ", 계좌번호, 구축상태, 계좌종류, 보유총종목수, 지정계좌위탁증거금, 지정계좌예수금, 진입수량") ; # , 종목수, 진입금액, 진입단가, 진입수량
If LastBarOnChart == 1 Then
{
Print("C:₩주식연구₩계좌평가.csv", ", %s, %.f, %.f, %.f, %.f, %.f, %.f",
계좌번호, 구축상태, 계좌종류, 보유총종목수, 지정계좌위탁증거금, 지정계좌예수금, EntryQuantity) ; # , 종목수, 진입금액, 진입단가, 진입수량
#MessageLog("계좌번호 %s", 계좌번호) ;
}
#======================================================#
# 매매 <진입 / 청산>
#======================================================#
Condition40 = O < C ; // 양봉
Condition89 = C[1]*0.98 <= C[0] ; // 현재 0.98% 이상 상승
if Condition40 == True Then
{
#ewAmount = 9000 + NetProfit; #디버그 핸들링, 완료 후 주석처리할 것
#EntryQuantity = int(ewAmount / Close) ; #디버그 핸들링, 완료 후 주석처리할 것
If EntryQuantity > 1 Then # 진입수량 > 1 이면 잔고함수로 관리
buy("stopEQ_Y" , AtStop, C, EntryQuantity) ;
Else # 가원장 미구축
buy("stopEQ_N" , AtStop, C) ; # 속성창 비용/수량탭의 고정자산으로 사전입력 관리
#Print("C:₩주식연구₩진입수량.csv", ", %.f, %.f, %.f, %.2f, %.f, %.f, %.f, %.f, %.f",
# Equity, NetProfit, WorkingCapital, Leverage, CapitalOfLeverage, NumberOfPortfolios, ewAmount, Close, EntryQuantity );
#Print("C:₩주식연구₩계좌평가.txt", ", %s, %.f, %.f, %.f, %.f",
# 계좌번호, 구축상태, 보유총종목수, 위탁증거금, 지정계좌예수금);
}
if Condition89 != True Then ExitLong("s82");
2022-05-17
1233
글번호 158954
시스템