커뮤니티
수식 수정부탁드립니다.
2019-01-24 14:07:37
142
글번호 125539
아래 수식으로 진입 시간이나 종료 시간을 함수로 조정하려하는데
예를 들어 진입 시간이나 종료 시간을 변경하여 시스템 매매를 하여도
0~24시로 인식하여 매매되는 현상이 일어나는데 수식중 어디가 잘못된건지
찾지를 못하겠습니다. 수정 부탁드립니다.
그리고 함수식으로 정해진 매매시간동안 하루 지정 횟수만 매매가 되도록
수식도 포함 부탁드립니다.
input: b_time1(000000),e_time1(240000);
input: 상단(95),하단(5),익절틱수(10);
input : 당일수익틱수(160);
input : 당일목표손실(100);
Input : short(16), long(26), signal(25);
Var : MACDv(0), MACDs(0),macdo(0) ;
MACDv = MACD(short, long);
MACDs = ema(MACDv,signal);
macdo = MACDv-MACDs;
Var : stoK(0),stoD(0),T1(0),T2(0);
var : Tcond(false);
Var : N1(0),dayPl(0),당일수익(0),당일손실(0),Xcond(false);
당일수익 = PriceScale*당일수익틱수;
당일손실 = PriceScale*당일목표손실;
if (sdate != sdate[1] and stime >= b_time1) or
(sdate == sdate[1] and stime >= b_time1 and stime[1] < b_time1) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] Then
{
if (IsExitName("금일종료",1) == true or IsExitName("금일종료1",1) == true or
IsExitName("금일종료2",1) == true or IsExitName("금일종료3",1) == true) then
Xcond = true;
if daypl >= 당일수익 or daypl <= -당일손실 Then
Xcond = true;
}
If b_time1<=sTime and sTime<= e_time1 Then
{
stoK = StochasticsK(stoK_p11,stoK_p12);
stoD = StochasticsD(stoK_p11,stoK_p12,stoK_p13);
}
if Xcond == false and
MarketPosition == 0 and
MarketPosition >= 0 and
CrossDown(MACDo,0) then
sell("매도",AtMarket);
if MarketPosition == -1 Then
{
ExitShort("금일종료",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("금일종료1",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if Crossup(stok,상단) then
ExitShort("매도청산",AtMarket);
}
if Xcond == false and
MarketPosition == 0 and
MarketPosition <= 0 and
crossup(MACDo,0) then
buy("매수",AtMarket);
if MarketPosition == 1 Then
{
ExitShort("금일종료2",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("금일종료3",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if Crossdown(stok,하단) then
Exitlong("매수청산",AtMarket);
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
답변 1
예스스탁 예스스탁 답변
2019-01-25 14:19:31
안녕하세요
예스스탁입니다.
시간에 24시가 없습니다. 24시는 0시로 지정하셔야 합니다.
또한 기존 수식에 시간을 지정해서 Tcond = true;로 변수에 값은 저장하지만
해당 변수를 진입식에 조건으로 사용하지는 않았습니다.
수정한 식입니다.
input: b_time1(000000),e_time1(240000);
input: 상단(95),하단(5),익절틱수(10);
input : 당일수익틱수(160);
input : 당일목표손실(100);
input : 당일진입횟수(5);
Input : short(16), long(26), signal(25);
input : stoK_p11(10),stoK_p12(5),stoK_p13(5);
Var : MACDv(0), MACDs(0),macdo(0) ;
Var : stoK(0),stoD(0),T1(0),T2(0);
var : Tcond(false),entry(0);
Var : N1(0),dayPl(0),당일수익(0),당일손실(0),Xcond(false);
MACDv = MACD(short, long);
MACDs = ema(MACDv,signal);
macdo = MACDv-MACDs;
당일수익 = PriceScale*당일수익틱수;
당일손실 = PriceScale*당일목표손실;
stoK = StochasticsK(stoK_p11,stoK_p12);
stoD = StochasticsD(stoK_p11,stoK_p12,stoK_p13);
if (sdate != sdate[1] and stime >= e_time1) or
(sdate == sdate[1] and stime >= e_time1 and stime[1] < e_time1) Then
{
Tcond = false;
}
if (sdate != sdate[1] and stime >= b_time1) or
(sdate == sdate[1] and stime >= b_time1 and stime[1] < b_time1) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
T1 = TotalTrades[1];
}
if MarketPosition == 0 Then
entry = TotalTrades-t1;
Else
entry = TotalTrades-t1+1;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] Then
{
if (IsExitName("금일종료",1) == true or IsExitName("금일종료1",1) == true or
IsExitName("금일종료2",1) == true or IsExitName("금일종료3",1) == true) then
Xcond = true;
if daypl >= 당일수익 or daypl <= -당일손실 Then
Xcond = true;
}
if entry < 당일진입횟수 and
Tcond == true and
Xcond == false and
MarketPosition == 0 and
MarketPosition >= 0 and
CrossDown(MACDo,0) then
sell("매도",AtMarket);
if MarketPosition == -1 Then
{
ExitShort("금일종료",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("금일종료1",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if Crossup(stok,상단) then
ExitShort("매도청산",AtMarket);
}
if entry < 당일진입횟수 and
Tcond == true and
Xcond == false and
MarketPosition == 0 and
MarketPosition <= 0 and
crossup(MACDo,0) then
buy("매수",AtMarket);
if MarketPosition == 1 Then
{
ExitShort("금일종료2",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("금일종료3",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if Crossdown(stok,하단) then
Exitlong("매수청산",AtMarket);
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
즐거운 하루되세요
> 미완 님이 쓴 글입니다.
> 제목 : 수식 수정부탁드립니다.
> 아래 수식으로 진입 시간이나 종료 시간을 함수로 조정하려하는데
예를 들어 진입 시간이나 종료 시간을 변경하여 시스템 매매를 하여도
0~24시로 인식하여 매매되는 현상이 일어나는데 수식중 어디가 잘못된건지
찾지를 못하겠습니다. 수정 부탁드립니다.
그리고 함수식으로 정해진 매매시간동안 하루 지정 횟수만 매매가 되도록
수식도 포함 부탁드립니다.
input: b_time1(000000),e_time1(240000);
input: 상단(95),하단(5),익절틱수(10);
input : 당일수익틱수(160);
input : 당일목표손실(100);
Input : short(16), long(26), signal(25);
Var : MACDv(0), MACDs(0),macdo(0) ;
MACDv = MACD(short, long);
MACDs = ema(MACDv,signal);
macdo = MACDv-MACDs;
Var : stoK(0),stoD(0),T1(0),T2(0);
var : Tcond(false);
Var : N1(0),dayPl(0),당일수익(0),당일손실(0),Xcond(false);
당일수익 = PriceScale*당일수익틱수;
당일손실 = PriceScale*당일목표손실;
if (sdate != sdate[1] and stime >= b_time1) or
(sdate == sdate[1] and stime >= b_time1 and stime[1] < b_time1) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] Then
{
if (IsExitName("금일종료",1) == true or IsExitName("금일종료1",1) == true or
IsExitName("금일종료2",1) == true or IsExitName("금일종료3",1) == true) then
Xcond = true;
if daypl >= 당일수익 or daypl <= -당일손실 Then
Xcond = true;
}
If b_time1<=sTime and sTime<= e_time1 Then
{
stoK = StochasticsK(stoK_p11,stoK_p12);
stoD = StochasticsD(stoK_p11,stoK_p12,stoK_p13);
}
if Xcond == false and
MarketPosition == 0 and
MarketPosition >= 0 and
CrossDown(MACDo,0) then
sell("매도",AtMarket);
if MarketPosition == -1 Then
{
ExitShort("금일종료",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("금일종료1",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if Crossup(stok,상단) then
ExitShort("매도청산",AtMarket);
}
if Xcond == false and
MarketPosition == 0 and
MarketPosition <= 0 and
crossup(MACDo,0) then
buy("매수",AtMarket);
if MarketPosition == 1 Then
{
ExitShort("금일종료2",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("금일종료3",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if Crossdown(stok,하단) then
Exitlong("매수청산",AtMarket);
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);