커뮤니티
사용하고 있는 수식에서 진입시간-청산시간을 반영하고 싶어요
2019-01-11 10:02:19
173
글번호 125156
기본 전제는 당일 청산입니다. (해외 선물 )
진입가능시간: 8:30분 부터 다음날 새벽 4시까지
진입된후 6시까지 청산되지 않으면 새벽 6시에 강제 청산하는 식을 아래식에 반영 부탁합니다.
참고로 맨마지막에 6시 청산 수식이 있는데 실제로는 6시에 청산이 안되요..ㅠㅠ
=========================================================
input : p1(2),p2(1),af(0.02), maxAF(0.2);
input : p1(2),p2(1),af(0.02), maxAF(0.2);
input : 익절1(50),익절2(40),손절1(50),손절2(50);
input : 매수1차상승(30),매도1차상승(30),매수손절(100),매도손절(100);
input : N1(1),N2(100);
Input :N3(25),N4(25),매수제한(0.25),매도제한(0.25);
Input :청산시간(060000);
Input :본전1(-25),본전2(-9);
Input :고점청산1(65),고점청산2(60);
var : cnt(0),sum1(0),sum2(0),avg1(0),avg2(0),avg3(0),T(0),mav2(0),mav3(0),value(0);
var : sum3(0),Tcond(false);
var1 = CSar(af,maxAF);
Var4 = highest(H,N3);
Var5 = lowest(L,N3);
var1 = CSar(af,maxAF);
Var6 = highest(H,N4);
Var7 = lowest(L,N4);
if DayClose(N2) > 0 Then
{
sum1 = 0;
sum2 = 0;
for cnt = 0 to N2-1
{
if cnt < N1 Then
sum1 = sum1 + DayClose(cnt);
if cnt < N2 Then
sum2 = sum2 + DayClose(cnt+1);
}
avg1 = sum1/N1;
avg2 = sum2/N2;
T = 0;
if avg1 >= avg2 Then
T = 1;
if avg1 < avg2 Then
T = -1;
if var1 > C Then
{
value1 = index;
value2 = C;
}
If var1 < C Then
{
value3 = index;
value4 = C;
}
#매수
if MarketPosition == 0 and
T == 1 and
index >= value1+P1 and
C > highest(H,P1)[1] and
C <= Var4-(Var4-Var5)*매수제한 and
C > value2 then
buy("매수",OnClose,def,1);
#매도
if MarketPosition == 0 and
T == -1 and
index >= value3+P2 and
C < Lowest(L,P2)[1] and
C >= Var7+(Var6-Var7)*매도제한 and
C < value4 then
Sell("매도",OnClose,def,1);
if MarketPosition == 1 then{
SetStopProfittarget(PriceScale*익절1, PointStop);
SetStopLoss(PriceScale*손절1, PointStop);
}
if MarketPosition == -1 then{
SetStopProfittarget(PriceScale*익절2, PointStop);
SetStopLoss(PriceScale*손절2, PointStop);
}
if MarketPosition == 1 Then
{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*고점청산1 Then
ExitLong("최고점즉시청산1",AtLimit,EntryPrice+PriceScale*고점청산1);
Else
{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*매수1차상승 Then
ExitLong("약손실청산1",AtStop,EntryPrice+PriceScale*본전1);
Else
ExitLong("손절1",AtStop,EntryPrice-PriceScale*매수손절);
}
}
if MarketPosition == -1 Then
{
If Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*고점청산2 Then
ExitShort("최고점즉시청산2",AtStop,EntryPrice+PriceScale*고점청산2);
Else
{
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*매도1차상승 Then
ExitShort("약손실청산2",AtStop,EntryPrice-PriceScale*본전2);
Else
ExitShort("손절2",AtStop,EntryPrice+PriceScale*매도손절);
}
}
}
if stime == 060000 Then{
exitlong("당일청산1");
ExitShort("당일청산2");
}
답변 1
예스스탁 예스스탁 답변
2019-01-11 13:58:40
안녕하세요
예스스탁입니다.
1
6시 청산이 신호가 발생하지 않는지 신호는 발생하는데 체결이 안되는지 모르겠습니다.
체결부분은 랭귀지에서 해결할 수 없는 부분입니다.
신호가 발생하지 않으면 차트에 해당시간의 봉이 있는지 확인하셔야 합니다.
수식은 단순히 사용자분이 지정한 시간을 수식안에 지정해 드릴뿐입니다.
사용자분의 차트의 주기등을 알수 없으므로 사용자분이 사용하는 차트의 주기에 맞게 지정해 주셔야 합니다.
당일청산함수로 6시에 청산되게 수정해 드립니다.
2
input : p1(2),p2(1),af(0.02), maxAF(0.2);
input : 익절1(50),익절2(40),손절1(50),손절2(50);
input : 매수1차상승(30),매도1차상승(30),매수손절(100),매도손절(100);
input : N1(1),N2(100);
Input :N3(25),N4(25),매수제한(0.25),매도제한(0.25);
Input :청산시간(060000);
Input :본전1(-25),본전2(-9);
Input :고점청산1(65),고점청산2(60);
var : cnt(0),sum1(0),sum2(0),avg1(0),avg2(0),avg3(0),T(0),mav2(0),mav3(0),value(0);
var : sum3(0),Tcond(false);
if sdate != sdate[1] Then
SetStopEndofday(060000);
if (sdate != sdate[1] and stime >= 083000) or
(sdate == sdate[1] and stime >= 083000 and stime[1] < 083000) Then
{
Tcond = true;
SetStopEndofday(0);
}
if (sdate != sdate[1] and stime >= 040000) or
(sdate == sdate[1] and stime >= 040000 and stime[1] < 040000) Then
Tcond = false;
var1 = CSar(af,maxAF);
Var4 = highest(H,N3);
Var5 = lowest(L,N3);
var1 = CSar(af,maxAF);
Var6 = highest(H,N4);
Var7 = lowest(L,N4);
if DayClose(N2) > 0 Then
{
sum1 = 0;
sum2 = 0;
for cnt = 0 to N2-1
{
if cnt < N1 Then
sum1 = sum1 + DayClose(cnt);
if cnt < N2 Then
sum2 = sum2 + DayClose(cnt+1);
}
avg1 = sum1/N1;
avg2 = sum2/N2;
T = 0;
if avg1 >= avg2 Then
T = 1;
if avg1 < avg2 Then
T = -1;
if var1 > C Then
{
value1 = index;
value2 = C;
}
If var1 < C Then
{
value3 = index;
value4 = C;
}
#매수
if Tcond == true and
MarketPosition == 0 and
T == 1 and
index >= value1+P1 and
C > highest(H,P1)[1] and
C <= Var4-(Var4-Var5)*매수제한 and
C > value2 then
buy("매수",OnClose,def,1);
#매도
if Tcond == true and
MarketPosition == 0 and
T == -1 and
index >= value3+P2 and
C < Lowest(L,P2)[1] and
C >= Var7+(Var6-Var7)*매도제한 and
C < value4 then
Sell("매도",OnClose,def,1);
if MarketPosition == 1 then{
SetStopProfittarget(PriceScale*익절1, PointStop);
SetStopLoss(PriceScale*손절1, PointStop);
}
if MarketPosition == -1 then{
SetStopProfittarget(PriceScale*익절2, PointStop);
SetStopLoss(PriceScale*손절2, PointStop);
}
if MarketPosition == 1 Then
{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*고점청산1 Then
ExitLong("최고점즉시청산1",AtLimit,EntryPrice+PriceScale*고점청산1);
Else
{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*매수1차상승 Then
ExitLong("약손실청산1",AtStop,EntryPrice+PriceScale*본전1);
Else
ExitLong("손절1",AtStop,EntryPrice-PriceScale*매수손절);
}
}
if MarketPosition == -1 Then
{
If Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*고점청산2 Then
ExitShort("최고점즉시청산2",AtStop,EntryPrice+PriceScale*고점청산2);
Else
{
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*매도1차상승 Then
ExitShort("약손실청산2",AtStop,EntryPrice-PriceScale*본전2);
Else
ExitShort("손절2",AtStop,EntryPrice+PriceScale*매도손절);
}
}
}
즐거운 하루되세요
> 이형지 님이 쓴 글입니다.
> 제목 : 사용하고 있는 수식에서 진입시간-청산시간을 반영하고 싶어요
> 기본 전제는 당일 청산입니다. (해외 선물 )
진입가능시간: 8:30분 부터 다음날 새벽 4시까지
진입된후 6시까지 청산되지 않으면 새벽 6시에 강제 청산하는 식을 아래식에 반영 부탁합니다.
참고로 맨마지막에 6시 청산 수식이 있는데 실제로는 6시에 청산이 안되요..ㅠㅠ
=========================================================
input : p1(2),p2(1),af(0.02), maxAF(0.2);
input : p1(2),p2(1),af(0.02), maxAF(0.2);
input : 익절1(50),익절2(40),손절1(50),손절2(50);
input : 매수1차상승(30),매도1차상승(30),매수손절(100),매도손절(100);
input : N1(1),N2(100);
Input :N3(25),N4(25),매수제한(0.25),매도제한(0.25);
Input :청산시간(060000);
Input :본전1(-25),본전2(-9);
Input :고점청산1(65),고점청산2(60);
var : cnt(0),sum1(0),sum2(0),avg1(0),avg2(0),avg3(0),T(0),mav2(0),mav3(0),value(0);
var : sum3(0),Tcond(false);
var1 = CSar(af,maxAF);
Var4 = highest(H,N3);
Var5 = lowest(L,N3);
var1 = CSar(af,maxAF);
Var6 = highest(H,N4);
Var7 = lowest(L,N4);
if DayClose(N2) > 0 Then
{
sum1 = 0;
sum2 = 0;
for cnt = 0 to N2-1
{
if cnt < N1 Then
sum1 = sum1 + DayClose(cnt);
if cnt < N2 Then
sum2 = sum2 + DayClose(cnt+1);
}
avg1 = sum1/N1;
avg2 = sum2/N2;
T = 0;
if avg1 >= avg2 Then
T = 1;
if avg1 < avg2 Then
T = -1;
if var1 > C Then
{
value1 = index;
value2 = C;
}
If var1 < C Then
{
value3 = index;
value4 = C;
}
#매수
if MarketPosition == 0 and
T == 1 and
index >= value1+P1 and
C > highest(H,P1)[1] and
C <= Var4-(Var4-Var5)*매수제한 and
C > value2 then
buy("매수",OnClose,def,1);
#매도
if MarketPosition == 0 and
T == -1 and
index >= value3+P2 and
C < Lowest(L,P2)[1] and
C >= Var7+(Var6-Var7)*매도제한 and
C < value4 then
Sell("매도",OnClose,def,1);
if MarketPosition == 1 then{
SetStopProfittarget(PriceScale*익절1, PointStop);
SetStopLoss(PriceScale*손절1, PointStop);
}
if MarketPosition == -1 then{
SetStopProfittarget(PriceScale*익절2, PointStop);
SetStopLoss(PriceScale*손절2, PointStop);
}
if MarketPosition == 1 Then
{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*고점청산1 Then
ExitLong("최고점즉시청산1",AtLimit,EntryPrice+PriceScale*고점청산1);
Else
{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*매수1차상승 Then
ExitLong("약손실청산1",AtStop,EntryPrice+PriceScale*본전1);
Else
ExitLong("손절1",AtStop,EntryPrice-PriceScale*매수손절);
}
}
if MarketPosition == -1 Then
{
If Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*고점청산2 Then
ExitShort("최고점즉시청산2",AtStop,EntryPrice+PriceScale*고점청산2);
Else
{
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*매도1차상승 Then
ExitShort("약손실청산2",AtStop,EntryPrice-PriceScale*본전2);
Else
ExitShort("손절2",AtStop,EntryPrice+PriceScale*매도손절);
}
}
}
if stime == 060000 Then{
exitlong("당일청산1");
ExitShort("당일청산2");
}
다음글
이전글