답변완료
시스템질문
안녕하세요~
<질문1>
아래수식에서
매수 4,5,6의 매수에 있어 매수1,2,3이 한봉에 2개이상 매수되는경우
작동을 안하는것 같은데요 수정부탁드립니다
<질문2>
아래수식에서
매수3가 매수되었을때만 매수4,매수5,매수6이 중복 매수되지 않도록 되어있는데요
매수1, 매수2, 매수3 어떤것이 매수되더라도
매수된값들을 체크하여 최저가로 매수된 가격을 기준으로
매수4, 매수5, 매수6가 순차적으로 매수되도록 변경하고 싶습니다
*매수는 매수조건이 동일가격에서 만족되더라도 항상 중복매수되지 않도록부탁드립니다
감사합니다~
INPUT : 매수(0), 매도조건(1);
var : cond(False),LP(0);
var1 = ma(C,3);
var2 = ma(C,5);
var3 = ma(C,10);
var4 = ma(C,60);
value1 = 0;
if value1 == 0 and C < Var4 and CrossDown(c,var3) and cond == False Then
{
if MarketPosition == 0 or (MarketPosition == 1 and C < LP and Condition1 == False) Then
{
value1 = 1;
Buy("매수3");
}
}
if value1 == 0 and C < var4 and CrossDown(c,var2) and cond == False Then
{
if MarketPosition == 0 or (MarketPosition == 1 and C < LP and Condition1 == False) Then
{
value1 = 1;
Buy("매수2");
}
}
if value1 == 0 and C < Var4 and CrossDown(c,var1) and cond == False Then
{
if MarketPosition == 0 or (MarketPosition == 1 and C < LP and Condition1 == False) Then
{
value1 = 1;
Buy("매수1");
}
}
if MarketPosition == 1 Then
{
if 매수 == 1 Then
Cond = true;
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수1" Then
{
LP = LatestEntryPrice(0);
Condition1 = true;
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수2" Then
{
LP = LatestEntryPrice(0);
Condition2 = true;
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수3" Then
{
LP = LatestEntryPrice(0);
Condition3 = true;
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수4" Then
{
LP = LatestEntryPrice(0);
Condition4 = true;
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수5" Then
{
LP = LatestEntryPrice(0);
Condition5 = true;
}
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수6" Then
{
LP = LatestEntryPrice(0);
Condition6 = true;
}
if Condition3 == true Then
{
if Condition4 == False Then
Buy("매수4",AtLimit,LP*0.97);
if Condition4 == true and Condition5 == False Then
Buy("매수5",AtLimit,LP*0.95);
if Condition4 == true and Condition5 == true and Condition6 == False Then
Buy("매수6",AtLimit,LP*0.90);
}
if 매도조건 == 1 Then
{
ExitLong("bx1",AtLimit,AvgEntryPrice*1.05,"",Floor(MaxContracts*0.2),1);
ExitLong("bx2",AtLimit,AvgEntryPrice*1.08,"",Floor(MaxContracts*0.5),1);
ExitLong("bx3",AtLimit,AvgEntryPrice*1.10);
}
if 매도조건 == 2 Then
{
ExitLong("bx",AtLimit,AvgEntryPrice*1.15);
}
}
Else
{
Condition1 = False;
Condition2 = False;
Condition3 = False;
}
2021-01-01
671
글번호 145035
시스템
답변완료
시스템매매 함수로 부탁드립니다.
아래와 같은 지표수식에서 돌파와 붕괴 지표가 RED로 바뀌고 이평1이 이평2를 돌파할때 매수
돌파와 붕괴 지표가 BLUE로 바뀌고 이평2가 이평1를 돌파할때 매도, 10틱 이익이면 청산, 10틱손실이면 손절할수 있게 수식을 분단위 기준으로 부탁드립니다.
var : 이평1(0),이평2(0),t(0);
var : hh(0),hd(0),ht(0),hh1(0),hd1(0),ht1(0),고점추세선(0);
var : ll(0),ld(0),lt(0),ll1(0),ld1(0),lt1(0),저점추세선(0);
이평1 = ma(C,20);
이평2 = ma(C,60);
Plot1(이평1);
Plot2(이평2);
If crossup(이평1,이평2) Then
{
t = 1;
hh = h;
hd = sDate;
ht = sTime;
hh1 = hh[1];
hd1 = hd[1];
ht1 = ht[1];
if hh1 > 0 Then
{
TL_SetExtRight(고점추세선,False);
고점추세선 = TL_New(hd1,ht1,hh1,hd,ht,hh);
TL_SetColor(고점추세선,RED);
TL_SetExtRight(고점추세선,true);
}
}
If crossdown(이평1,이평2) Then
{
t = -1;
ll = l;
ld = sDate;
lt = sTime;
ll1 = ll[1];
ld1 = ld[1];
lt1 = lt[1];
if ll1 > 0 Then
{
TL_SetExtRight(저점추세선,False);
저점추세선 = TL_New(ld1,lt1,ll1,ld,lt,ll);
TL_SetColor(저점추세선,BLUE);
TL_SetExtRight(저점추세선,true);
}
}
if t == 1 Then
{
if h > hh Then
{
hh = h;
hd = sDate;
ht = sTime;
TL_SetEnd(고점추세선,hd,ht,hh);
}
}
if t == -1 Then
{
if l < ll Then
{
ll = l;
ld = sDate;
lt = sTime;
TL_SetEnd(저점추세선,ld,lt,ll);
}
}
If c > TL_GetValue(고점추세선,sDate,sTime) and C[1] < TL_GetValue(고점추세선,sDate[1],sTime[1]) Then
{
plot3(L-0.5,"돌파",BLUe);
}
If c > TL_GetValue(저점추세선,sDate,sTime) and C[1] < TL_GetValue(저점추세선,sDate[1],sTime[1]) Then
{
plot3(L-0.5,"돌파",REd);
}
If c < TL_GetValue(고점추세선,sDate,sTime) and C[1] > TL_GetValue(고점추세선,sDate[1],sTime[1]) Then
{
plot4(H+0.5,"붕괴",BLUe);
}
If c < TL_GetValue(저점추세선,sDate,sTime) and C[1] > TL_GetValue(저점추세선,sDate[1],sTime[1]) Then
{
plot4(H+0.5,"붕괴",REd);
}
2020-12-30
787
글번호 145032
시스템
답변완료
오류수정 부탁드립니다. 감사합니다.
Inputs: Length(NumericSimple),TargetUpLevel(NumericSimple),TargetDnLevel(NumericSimple),
NxtYn(NumericSimple), // 다음 봉의 값을 구하려면 1을 아니면 0을 넣어준다.
oUpBand(NumericRef), // 주소전달방식임을 선언
oDnBand(NumericRef), // 값을 입력받는게 아니라 여기에 결과값을 채워서 반환한다.
oMidLine(NumericRef); // 변수명 앞에 소문자를 o를 붙인 것은 output 변수입을 나타냅니다.
Variables: Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0),MidLevel(0);
If CurrentBar == 1 AND Length > 0 Then Begin
UpSum = 0;
DownSum = 0;
For Counter = 0 To Length - 1 Begin
UpAmt = C[Counter] - C[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
End;
UpAvg = UpSum / Length;
DownAvg = DownSum / Length;
End
Else
If CurrentBar > 1 AND Length > 0 Then Begin
UpAmt = C[0] - C[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length;
DownAvg = (DownAvg[1] * (Length - 1) + DownAmt) / Length;
End;
If UpAvg + DownAvg <> 0 Then
Value1 = 100 * UpAvg / (UpAvg + DownAvg);
Else
Value1 = 0;
If nxtYn == 1 Then // 다음 봉 여부가 1일 경우
{
If Value1 > TargetUpLevel Then // 상단밴드
oUpBand = (((TargetUpLevel - 100) / TargetUpLevel * UpAvg) + DownAvg) * (Length - 1) + C;
Else
oUpBand = ((TargetUpLevel / (100 - TargetUpLevel) * DownAvg) - UpAvg) * (Length - 1) + C;
If Value1 > TargetDnLevel Then // 하단밴드
oDnBand = (((TargetDnLevel - 100) / TargetDnLevel * UpAvg) + DownAvg) * (Length - 1) + C;
Else
oDnBand = ((TargetDnLevel / (100 - TargetDnLevel) * DownAvg) - UpAvg) * (Length - 1) + C;
MidLevel = (TargetUpLevel + TargetDnLevel) / 2; // 중간라인
If Value1 > MidLevel Then
oMidLine = (((MidLevel - 100) / MidLevel * UpAvg) + DownAvg) * (Length - 1) + C;
Else
oMidline = ((MidLevel / (100 - MidLevel) * DownAvg) - UpAvg) * (Length - 1) + C;
}
Else // 다음 봉 여부가 0인 경우
{
If Value1[1] > TargetUpLevel Then
oUpBand = (((TargetUpLevel - 100) / TargetUpLevel * UpAvg[1]) + DownAvg[1]) * (Length - 1) + C[1];
Else
oUpBand = ((TargetUpLevel / (100 - TargetUpLevel) * DownAvg[1]) - UpAvg[1]) * (Length - 1) + C[1];
If Value1[1] > TargetDnLevel Then
oDnBand = (((TargetDnLevel - 100) / TargetDnLevel * UpAvg[1]) + DownAvg[1]) * (Length - 1) + C[1];
Else
oDnBand = ((TargetDnLevel / (100 - TargetDnLevel) * DownAvg[1]) - UpAvg[1]) * (Length - 1) + C[1];
MidLevel = (TargetUpLevel + TargetDnLevel) / 2;
If Value1[1] > MidLevel Then
oMidLine = (((MidLevel - 100) / MidLevel * UpAvg[1]) + DownAvg[1]) * (Length - 1) + C[1];
Else
oMidline = ((MidLevel / (100 - MidLevel) * DownAvg[1]) - UpAvg[1]) * (Length - 1) + C[1];
}
RSI_BAND = 1; //사용자함수는 반환값이 있어야 한다고 했습니다.
// oUpBand, oDnBand, oMidLine 는 메모리 주소이지 반환값이 아닙니다.
// 그래서 마지막에 아무 값이나 넘겨 줘야 하기 때문에 그냥 1을 넣어 줬습니다.
2020-12-30
786
글번호 145029
사용자 함수
답변완료
DATA2와 DATA3을 이용하는 시스템 매매식을 부탁드립니다.
해외선물 기준
동일종목으로 시간은 다르게 참조
주종목 10분 Keltner Channel 변수값 MALEN 10 CONST 0.8 ATRs 0 Price Channel 변수값 LENGTH 14
DATA2 60분 Keltner Channel 변수값 MALEN 10 CONST 0.8 ATRs 0 Price Channel 변수값 LENGTH 20
DATA3 240분 Keltner Channel 변수값 MALEN 10 CONST 0.8 ATRs 0 Price Channel 변수값 LENGTH 24
기준으로 해외선물을 다음 조건을 기준(전체기준 중 일부입니다)으로 매매를 할 예정입니다.
기본 시스템식을 부탁드립니다.
[진입은 1계약으로 청산 후 동일 조건이 오면 계속 진입과 청산을 반복 하도록 매매식을 부탁드립니다]
[1]매수
1.매수1조건
매수1 진입
1.CrossDown(C,BCHAN) and DATA2 CrossDown(C,LOWER) and DATA3 CrossDown(C,CENTLINE)
2.L(저가)==BCHAN-PriceScale*4 and DATA2 LOWER > C > BCHAN and DATA3 CENTLINE > C > LOWER
매수1 청산
1.CrossUp(C,TCHAN) and DATA2 CrossUp(C,TCHAN) and DATA3 CrossUp(C,TCHAN)
2.H(고가)==TCHAN+PriceScale*4 and DATA2 H==TCHAN+PriceScale*12 and DATA3 H==TCHAN+PriceScale*12
매수1 손절
1.L(저가)==BCHAN-PriceScale*6
2.매수2조건
매수2 진입
1.CrossDown(C,BCHAN) and DATA2 CrossDown(C,LOWER) and DATA3 CrossDown(C,CENTLINE)
2.L==BCHAN-PriceScale*4 and DATA2 LOWER > C > BCHAN and DATA3 CENTLINE > C > LOWER
매수2 청산
1. CrossUp(C,TCHAN) and DATA2 CrossUp(C,TCHAN) and DATA3 CrossUp(C,UPPER)
2. H==TCHAN+PriceScale*4 and DATA2 H==TCHAN+PriceScale*12 and DATA3 TCHAN>C>UPPER
매수2 손절
1.L==BCHAN-PriceScale*6
3.매수3조건
매수3 진입
1.CrossDown(C,BCHAN) and DATA2 CrossDown(C,BCHAN) and DATA3 CrossDown(C,LOWER)
2.L==BCHAN-PriceScale*4 and DATA2 L==BCHAN-PriceScale*12 and DATA3 LOWER > C > BCHAN
매수3 청산
1.CrossUp(C,TCHAN) and DATA2 CrossUp(C,CENTLINE) and DATA3 CrossUp(C,UPPER)
2.H==TCHAN+PriceScale*4 and DATA2 UPPER>C>CENTLINE and DATA3 CENTLINE>C>LOWER
매수3 손절
1.L==BCHAN-PriceScale*6 and DATA2 L==TCHAN-PriceScale*19
[2]매도
1.매도1조건
매도1 진입
1.CrossUp(C,TCHAN) and DATA2 CrossUp(C,TCHAN) and DATA3 CrossUp(C,TCHAN)
2.H(고가)==TCHAN+PriceScale*4 and DATA2 H==TCHAN+PriceScale*12 and DATA3 H==TCHAN+PriceScale*12
매도1 청산
1.CrossDown(C,BCHAN) and DATA2 CrossDown(C,BCHAN) and DATA3 CrossDown(C,LOWER)
2.L(저가)==BCHAN-PriceScale*4 and DATA2 L==BCHAN-PriceScale*12 and DATA3 LOWER > C > BCHAN
매도1 손절
1.H(고가)==TCHAN+PriceScale*6 and DATA2 H==TCHAN+PriceScale*19 and DATA3 H==TCHAN+PriceScale*19
2.매도2조건
매도2 진입
1.CrossUp(C,TCHAN) and DATA2 CrossUp(C,TCHAN) and DATA3 CrossUp(C,TCHAN)
2.H==TCHAN+PriceScale*4 and DATA2 H==TCHAN+PriceScale*12 and DATA3 H==TCHAN+PriceScale*12
매도2 청산
1.CrossDown(C,BCHAN) and DATA2 CrossDown(C,LOWER) and DATA3 CrossDown(C,CENTLINE)
2.L==BCHAN-PriceScale*4 and DATA2 LOWER>C>BCHAN and DATA3 CENTLINE > C > LOWER
매도2 손절
1.H==TCHAN+PriceScale*6 and DATA2 H==TCHAN+PriceScale*19 and DATA3 H==TCHAN+PriceScale*19
3.매도3조건
매도3 진입
1.CrossUp(C,TCHAN) and DATA2 CrossUp(C,TCHAN) and DATA3 CrossUp(C,UPPER)
2.H==TCHAN+PriceScale*4 and DATA2 H==TCHAN+PriceScale*12 and DATA3 TCHAN>C>UPPER
매도6 청산
1.CrossDown(C,BCHAN) and DATA2 CrossDown(C,LOWER) and DATA3 CrossDown(C,CENTLINE)
2.L==BCHAN-PriceScale*4 and DATA2 LOWER>C>BCHAN and DATA3 CENTLINE > C > LOWER
매도6 손절
1.H==TCHAN+PriceScale*6 and DATA2 H==TCHAN+PriceScale*19
2020-12-30
824
글번호 145005
시스템