예스스탁
예스스탁 답변
2021-03-18 15:28:51
안녕하세요
예스스탁입니다.
식을 수정했습니다.
기존식이 지정한 날짜시간 이후에 한번만 거래가 진행되는 내용이어서
변수 e를 초기화하는 부분을 간과했습니다.
여러번 거래가 진행되므로 완전청산 후에 e가 초기화되는 내용을 추가했습니다.
Input : 투자금액(1000000),Period(14), N(1), LPercent(30), S7Percent(70), S8Percent(80), S9Percent(90),시작일(20210315),시작시간(090000);
var : value(0), e(0),x(0),count(0),Vma(0), Tcond(false);
var : HH(0),Bxcond1(false),Bxcond2(false),Bxcond3(false);
var : LL(0),Sxcond1(false),Sxcond2(false),Sxcond3(false);
Array : VV[5](0),XX[5](0);
value = RSI(Period);
vv[0] = floor((투자금액*0.1)/NextBarOpen);
vv[1] = floor((투자금액*0.1)/NextBarOpen);
vv[2] = floor((투자금액*0.1)/NextBarOpen);
vv[3] = floor((투자금액*0.2)/NextBarOpen);
vv[4] = floor((투자금액*0.2)/NextBarOpen);
vv[5] = floor((투자금액*0.3)/NextBarOpen);
if NextBarSdate >= 시작일 and NextBarStime >= 시작시간 Then
Tcond = true;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
count = count+1;
if sdate >= 시작일 and stime >= 시작시간 Then
Tcond = true;
if Tcond == true then
{
#첫번째 매수
if (TotalTrades == 0 or MarketPosition == 0) then
{
if MarketPosition == 0 and CrossDown(value, LPercent) Then
{
buy("b1",onclose,def,vv[MaxEntries]);
}
}
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
{
e = e +1;
if e == 0 then
XX[e] = CurrentContracts;
Else
XX[e] = CurrentContracts-CurrentContracts[1];
}
#두번째 매수
If MarketPosition == 1 and e == 1 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b2",onclose,def,vv[MaxEntries]);
}
#세번재매수
If MarketPosition == 1 and e == 2 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b3",onclose,def,vv[MaxEntries]);
}
#네번재매수
If MarketPosition == 1 and e == 3 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b4",onclose,def,vv[MaxEntries]);
}
#다섯번재매수
If MarketPosition == 1 and e == 4 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b5",onclose,def,vv[MaxEntries]);
}
if condition1 == false and crossup(value,S7Percent) then
{
condition1 = true;
exitlong("bx1",onclose,def,"",floor(maxcontracts*0.2),1);
}
if condition2 == true and crossup(value,S8Percent) then
{
condition2 = true;
exitlong("bx2",onclose,def,"",floor(maxcontracts*0.4),1);
}
if condition3 == true and crossup(value,S9Percent) then
{
condition3 = true;
exitlong("bx3");
}
if crossdown(value,S7Percent) then
exitlong("bx");
}
else
{
e = 0;
condition1 = false;
condition2 = false;
condition3 = false;
condition4 = false;
}
}
즐거운 하루되세요
> 바나 님이 쓴 글입니다.
> 제목 : 매수매도 수식 재질문
> "작성하신 수식이 지정한 날짜와 시간이후에 1회만 진입되게 작성이 되어 있습니다.
외부변수 N이 1이고 count < N으로 첫진입조건이 되어 있습니다.
지정한 날짜와 시간이후에 별도의 횟수제한이 없으시면 "b1"진입에 count < N 조건을 삭제하시면 되고
몇회로 제한하고자 하시면 N값을 늘리시면 됩니다." 이렇게 답변을 해주셨는데
count < N 조건을 삭제하고 돌렸더니
1차 2차 매수 진행 후에 매도신호가 나와 모두 매도가 되고 나면 다시 매수가 진행되긴 하지만 1차 2차부터 다시 매수하는게 아니라 3차부터 이어서 매수를 하더라구요. 저는 올매도 진행후에는 다시 1차매수로 돌아가게 하고 싶은데 어떻게 하면 될까요?
그리고 한가지 더 궁금한게 있는데, 코인별로 RSI하락에도 매수신호가 발생하는게 있고 발생하지 않는경우가 있는데 원인을 잘 모르겠습니다.(첨부파일 참조)
Input : 투자금액(1000000),Period(14), N(1), LPercent(30), S7Percent(70), S8Percent(80), S9Percent(90),시작일(20210315),시작시간(090000);
var : value(0), e(0),x(0),count(0),Vma(0), Tcond(false);
var : HH(0),Bxcond1(false),Bxcond2(false),Bxcond3(false);
var : LL(0),Sxcond1(false),Sxcond2(false),Sxcond3(false);
Array : VV[5](0),XX[5](0);
value = RSI(Period);
vv[0] = floor((투자금액*0.1)/NextBarOpen);
vv[1] = floor((투자금액*0.1)/NextBarOpen);
vv[2] = floor((투자금액*0.1)/NextBarOpen);
vv[3] = floor((투자금액*0.2)/NextBarOpen);
vv[4] = floor((투자금액*0.2)/NextBarOpen);
vv[5] = floor((투자금액*0.3)/NextBarOpen);
if NextBarSdate >= 시작일 and NextBarStime >= 시작시간 Then
Tcond = true;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
count = count+1;
if sdate >= 시작일 and stime >= 시작시간 Then
Tcond = true;
if Tcond == true then
{
#첫번째 매수
if (TotalTrades == 0 or MarketPosition == 0) then
{
if MarketPosition == 0 and count < N and CrossDown(value, LPercent) Then
{
buy("b1",onclose,def,vv[MaxEntries]);
}
}
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
{
e = e +1;
if e == 0 then
XX[e] = CurrentContracts;
Else
XX[e] = CurrentContracts-CurrentContracts[1];
}
#두번째 매수
If MarketPosition == 1 and e == 1 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b2",onclose,def,vv[MaxEntries]);
}
#세번재매수
If MarketPosition == 1 and e == 2 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b3",onclose,def,vv[MaxEntries]);
}
#네번재매수
If MarketPosition == 1 and e == 3 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b4",onclose,def,vv[MaxEntries]);
}
#다섯번재매수
If MarketPosition == 1 and e == 4 and CrossDown(value, LPercent) and NextBarSdate == sdate Then
{
buy("b5",onclose,def,vv[MaxEntries]);
}
if condition1 == false and crossup(value,S7Percent) then
{
condition1 = true;
exitlong("bx1",onclose,def,"",floor(maxcontracts*0.2),1);
}
if condition2 == true and crossup(value,S8Percent) then
{
condition2 = true;
exitlong("bx2",onclose,def,"",floor(maxcontracts*0.4),1);
}
if condition3 == true and crossup(value,S9Percent) then
{
condition3 = true;
exitlong("bx3");
}
if crossdown(value,S7Percent) then
exitlong("bx");
}
else
{
condition1 = false;
condition2 = false;
condition3 = false;
condition4 = false;
}
}