답변완료
문의
답변주신 내용 참고삼아 제가 원했던 수식을 작성해보았습니다.
input : uppyra검증1(0.00),상승pyra1(0.00),상승N1(20);
input : uppyra검증2(0.00),상승pyra2(0.00),상승N2(10);
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
LP = C2;
if data2(C >= C2[BarsSinceEntry]+uppyra검증1 and H >= LP+상승Pyra1 and
((C2[BarsSinceEntry]< 0.99) and (C2[BarsSinceEntry] >= 0.01) and MaxContracts < 상승N1)) Then
buy("bb1");
if data2(C >= C2[BarsSinceEntry]+uppyra검증2 and H >= LP+상승Pyra2 and
((C2[BarsSinceEntry]< 2.99) and (C2[BarsSinceEntry] >= 1.00) and MaxContracts < 상승N2)) Then
buy("bb2");
그런데, 이 수식에 변경사항이 있습니다.
피라미딩수식은 그대로 살리고
그 안의 진입가격 구간만 밖으로
꺼내고 그 진입가격은 주종목을 따르는 형식이 필요합니다.
주종목 옵션 가격구간 (0.01 ~ 0.99)을 전제로 한 선물보조차트 피라미딩 방식1
주종목 옵션 가격구간 (1.00 ~ 2.99)을 전제로 한 선물보조차트 피라미딩 방식2
************************************************************************************
안녕하세요
예스스탁입니다.
첫매수가를 기준으로 구분해 드립니다.
Input : 최대(2.99),최소(0.01);
input: 시간1(090000),시간2(144500),봉갯수3(1),상승4(0.10),통제range5(10.00);
input : uppyra검증(0.00),상승pyra(0.00),상승N1(10),상승N2(20);
var : V1(0,data2),C2(0,data1),LP(0,data1);
C2 = data2(c);
if data2(bdate != bdate[1]) Then
{
v1 = 0;
}
if data2(stime >= 시간1 and stime < 시간2) Then
{
v1 = v1 + 1;
if data2(v1 == 봉갯수3 and C > lowD(0)+상승4 and HighD(0) < lowD(0)+통제range5) and 최대 >= C and C >= 최소 Then
buy();
}
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
LP = C2;
if data2(C >= C2[BarsSinceEntry]+uppyra검증 and H >= LP+상승Pyra and
((C2[BarsSinceEntry]< 1.00 and MaxContracts < 상승N1) or (C2[BarsSinceEntry] >= 1.0 and MaxContracts < 상승N2))) Then
buy("bb");
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 진입가격별 피라미딩
> 옵션 진입가격에 제한을 둔 수식입니다.
진입가격별로 피라미딩 수량을 조절하는 부분만 변경해주세요.
피라미딩그룹은 2개면 됩니다.
예)
1.00 에서 2.99 구간 진입했을 때는 10개 적용
0.01 에서 0.99 구간 진입했을 때는 20개 적용
********************************************************************************
안녕하세요
예스스탁입니다.
첫매수가를 기준으로 구분해 드립니다.
Input : 최대(2.99),최소(0.01);
input: 시간1(090000),시간2(144500),봉갯수3(1),상승4(0.10),통제range5(10.00);
input : uppyra검증(0.00),상승pyra(0.00),상승N1(10),상승N2(20);
var : V1(0,data2),C2(0,data1),LP(0,data1);
C2 = data2(c);
if data2(bdate != bdate[1]) Then
{
v1 = 0;
}
if data2(stime >= 시간1 and stime < 시간2) Then
{
v1 = v1 + 1;
if data2(v1 == 봉갯수3 and C > lowD(0)+상승4 and HighD(0) < lowD(0)+통제range5) and 최대 >= C and C >= 최소 Then
buy();
}
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
LP = C2;
if data2(C >= C2[BarsSinceEntry]+uppyra검증 and H >= LP+상승Pyra and
((C2[BarsSinceEntry]< 1.00 and MaxContracts < 상승N1) or (C2[BarsSinceEntry] >= 1.0 and MaxContracts < 상승N2))) Then
buy("bb");
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 진입가격별 피라미딩
> 옵션 진입가격에 제한을 둔 수식입니다.
진입가격별로 피라미딩 수량을 조절하는 부분만 변경해주세요.
피라미딩그룹은 2개면 됩니다.
예)
1.00 에서 2.99 구간 진입했을 때는 10개 적용
0.01 에서 0.99 구간 진입했을 때는 20개 적용
********************************************************************************
Input : 최대(2.99),최소(0.01);
input: 시간1(090000),시간2(144500),봉갯수3(1),상승4(0.10),통제range5(10.00);
input : uppyra검증(0.00),상승pyra(0.00),상승N(0);
var : V1(0,data2),C2(0,data1),LP(0,data1);
C2 = data2(c);
if data2(bdate != bdate[1]) Then
{
v1 = 0;
}
if data2(stime >= 시간1 and stime < 시간2) Then
{
v1 = v1 + 1;
if data2(v1 == 봉갯수3 and C > lowD(0)+상승4 and HighD(0) < lowD(0)+통제range5) and 최대 >= C and C >= 최소 Then
buy();
}
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
LP = C2;
if data2(C >= C2[BarsSinceEntry]+uppyra검증 and MaxContracts < 상승N and H >= LP+상승Pyra) Then
buy("bb");
}
2020-02-21
312
글번호 136184
시스템
답변완료
제가 테스트로 만든 매도 시스템 인데요.
제가 테스트로 만든 매도 시스템 인데요.
1:50 분에 행잉맨이 발생하면
2:20 분에 close < high[1] 이면 매도
2:30 분에 close < high[1] 이면 매도
이런 단순한 프로그램인데요.
이 시스템이 생성한 파일을 보면 매도가 발생했다는 메시지가 나오는데요.
실제 매도는 안되요(매도 시스템을 적용했을때요)
한달 내내 이문제로 씨름 하고 있는데요 뭐가 문제인지 도저히 알수가 없어서..
고수님들께 문의 드려요.
아래 파일을 한번 봐주시면 감사드리겠습니다.
----------------------------------------------------
input : starttime(220000),endtime(020000),intervalMin(2),intervalHammer(4),interval25(1), interval30(2),deceisionDuration(1),hat(1.3),head(1.4),pricegap(0.07);
var : S1(0),D1(0),TM(0),TF(0);
var : CurMin(0);
var : curTime(0);
var : con2(False);
var : file_name("c:₩dantawang4-gc-xxxxxxxx.csv");
curMin = TimeToMinutes(time)-TimeToMinutes(sTime);
if(NextBarOpen > 0) Then
{
Print(file_name,"bar open 봉번호=%f 봉시작=%f 봉끝=%f barsinceentry[0]=%f BarsSinceEntry=%f " ,index, sTime,Time, BarsSinceEntry[0],BarsSinceEntry);
if HangingMan2(hat, head, pricegap) == True Then
{
con2 = True;
Print(file_name, "xHangingMan2--------------------------------------------------------------------------!");
Print(file_name,"[x-curtime=%f time=%f curmin=%f con2=%s time to create hanginman", CurrentTime(),time, curMin, con2 );
Value1 = time; #CurrentTime() ;
}
}
#MessageLog("curmin=%f intervalHammer=%f Close=%f", curmin, intervalHammer, Close);
Print(file_name,"curTime=%f time=%f curMin >= IntervalHammer %f >= %f " ,CurrentTime(),time, curmin, intervalHammer);
#Print(file_name, " %f current HangingMan2 time now!" , curTime);
if curMin >= IntervalHammer then {
Print(file_name," [curtime=%f time=%f Value1time=%f stime=%f con2=%s] <----------",CurrentTime(),time, Value1, stime,con2);
Print(file_name," TimeToMinutes(time) - TimeToMinutes(Value1)=%f TimeToMinutes(currunt) - TimeToMinutes(Value1)=%f",TimeToMinutes(time) - TimeToMinutes(Value1), TimeToMinutes(CurrentTime()) - TimeToMinutes(Value1));
Print(file_name, "%f %f e(%f>=%f) " , TimeToMinutes(time) , TimeToMinutes(Value1) , TimeToMinutes(time) - TimeToMinutes(Value1) , intervalMin);
if( con2 == True and ( TimeToMinutes(time) - TimeToMinutes(Value1) >= IntervalMin) ) Then {
#curTime = CurrentTime() + 1 ;
Print(file_name, "curTime=%f %f exit time!" ,CurrentTime(), Value1);
Condition10 = False;
Condition1 = False;
con2 = False;
Value10 = 0.0;
}
}
#----해머나 행잉맨을 찾은 후에--------------------------------------------------------------------------
#-----condition10=true이면
#25-30 분 사이에 결정.
Print(file_name , "%f curMin >= interval25 %f >= %f and %f < %f" ,time, curMin, interval25 ,curMin , Interval25 + deceisionDuration );
if curMin >= interval25 and curMin < Interval25 + deceisionDuration then {
Print(file_name , "1---------------------------------------------");
Print(file_name , "curTime=%f time=%f Close=%f < Close[1]=%f ",CurrentTime(), time,Close, Close[1]);
if( con2 == True and Close < Close[1] ) Then {
#Sell("sell1");
#sell("s",AtMarket);
Sell ("HM", AtStop,High[1]);
MessageLog("HangingMan sell!");
Print(file_name, "curTime=%f time=%f HangingMan sell! ",CurrentTime(), time);
Print(file_name,"curTime=%f time=%f High[1]=%f Low[1]=%f Close[1]=%f",CurrentTime(), time,High[1], Low[1], Close[1]);
Condition10 = false;
con2 = false;
Condition1 = false;
}
}
#----해머나 행잉맨을 찾은 후에--------------------------------------------------------------------------
#-----condition10=true이면
#30-35 분 사이에 결정.
Print(file_name , "curTime=%f time=%f curMin >= interval30 %f >= %f and %f < %f" ,CurrentTime(), time,curMin, interval30 ,curMin , interval30 + deceisionDuration );
if curMin >= interval30 and curMin < Interval30 + deceisionDuration then {
Print(file_name , "2---------------------------------------------");
Print(file_name , "curTime=%f time=%f Close < Close[1] Close=%f < Close[1]=%f ",CurrentTime(),time, Close, Close[1]);
if( con2 == True and Close < Close[1] ) Then {
#if MarketPosition[0] == 0 Then{
#Sell("sell2");
#sell("s2",AtMarket);
Sell ("HM2", AtStop,High[1]);
Print(file_name, "curTime=%f time=%f HangingMan sell! ",CurrentTime(), time);
Print(file_name,"curTime=%f time=%f High[1]=%f Low[1]=%f Close[1]=%f",CurrentTime(), time,High[1], Low[1], Close[1]);
#}
Condition10 = false;
con2 = false;
Condition1 = false;
#Value10 = 0.0;
}
}
# Condition1 == true 이면 다음 시그널 시작
#특정 시간 이후 청산.
if BarsSinceEntry == 1 Then
{
Print(file_name, "curTime=%f time=%f EXIT SHORT! ", CurrentTime(),time);
exitShort();
}
if MarketPosition[0] == -1 AND BarsSinceEntry == 0 AND High > High[1] Then
{
Print(file_name,"------------------------reached high!==============");
Print(file_name,"curTime=%f time=%f High[1]=%f", CurrentTime(),time,High[1]);
Print(file_name,"------------------------reached high!==============");
exitShort();
}
if MarketPosition[0] == -1 AND BarsSinceEntry == 1 AND High > High[2] Then
{
Print(file_name,"------------------------reached high!==============");
Print(file_name,"curTime=%f time=%f High[2]=%f", CurrentTime(), time,High[2]);
Print(file_name,"------------------------reached high!==============");
exitShort();
}
2020-02-21
383
글번호 136177
시스템
답변완료
지표문의
안녕하세요
보내주신 내용 잘 받았습니다. 감사합니다.
그리고 이해했습니다.
그런데, 죄송하지만 제가 프로그램 및 컴퓨터를 잘 몰라서,
그냥 5분, 15분, 30분 60분, 360분 볼린져 밴드챠트를 15분 기준으로
작성해 주시면 않될련지요?
바로 복사해서 붙혀넣기만 하면 되게 부탁드립니다.
번거롭게해서 죄송하지만 부탁드립니다.
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 지표문의
>
안녕하세요
예스스탁입니다.
1
타주기의 계산은 기본차트의 배수가 되는 주기만 가능합니다.
하나수식에서 여러 타주기는 시간상 모두 작성해 드릴수 없습니다.
아래식으로 기본차트 주기의 배수로 "타주기분"조정해서 반복적용하시면 됩니다.
input : 타주기분(15),P(20),Dv(2);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),SumSqrt(0),Stdv(0);
var : sum(0),BBmd(0),Bbup(0),BBdn(0);
Array : CC[100](0);
if Bdate != Bdate[1] Then{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{
for cnt = 1 to 99{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P] > 0 then{
sum = 0;
for cnt = 0 to P-1{
sum = sum + CC[cnt];
}
BBmd = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1 {
SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2;
}
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
plot1(BBmd);
plot2(BBup);
plot3(BBdn);
}
}
2
분봉에서 틱은 계산이 불가능합니다.
반대로 틱봉에서 분봉도 정확히 계산이 가능하지 않고
위 1번식 적용해서 근사값으로 보셔야 합니다.
틱봉에서 배수로 높은 다른 틱봉의 그리는 수식은 아래와 같습니다.
100틱봉에서 500틱은 N에 5로 지정해 주시면 됩니다.
input : N(5),P(20),Dv(2);
var : D1(0),TF(0),idx(0);
var : cnt(0),SumSqrt(0),Stdv(0);
var : sum(0),BBmd(0),Bbup(0),BBdn(0);
Array : CC[100](0);
if Bdate != Bdate[1] Then
{
D1 = sdate;
idx = 0;
}
Else
idx = idx+1;
if D1 > 0 then
{
TF = idx%N;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
for cnt = 1 to 99
{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + CC[cnt];
}
BBmd = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1
{
SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2;
}
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
plot1(BBmd);
plot2(BBup);
plot3(BBdn);
}
}
즐거운 하루되세요
> softtoug 님이 쓴 글입니다.
> 제목 : 지표문의
> 안녕하세요
하기 지표문의 드립니다. 도움 부탁드립니다
* 한개의 챠트에 시간대별 볼린져 밴드를 그물망 챠트처럼 만들고 싶습니다.
5분, 15분, 30분, 60분, 360분
이렇게 5개의 시간대별 볼린져 밴드 챠트가 한 챠트에 보여지게 부탁드립니다.
기준은 15분 봉으로 부탁드립니다.
- 옵션으로 상기 챠트에 900틱 시간대도 추가한 옵션 부탁드립니다.
감사합니다.
2020-02-21
353
글번호 136176
지표