예스스탁
예스스탁 답변
2020-03-16 19:27:35
안녕하세요
예스스탁입니다.
1
input: ii(50), jj(100), kk(150), ll(200), mm(250),pp(5),uu(7),vv(2),ww(8),ee(2);
var : maxv(0),center(0),minv(0),dif(0),t(0),hv(0),lv(0);
var : _up(0),uh1(0),ul1(0),uh2(0),ul2(0);
var : _dn(0),dh1(0),dl1(0),dh2(0),dl2(0);
var1 = ma(c,ii);
var2 = ma(c,jj);
var3 = ma(c,kk);
var4 = ma(c,ll);
var5 = ma(c,mm);
value1 = ema(c,ee);
if var5 > 0 then
{
maxv = max(var1,var2,var3,var4,var5);
minv = min(var1,var2,var3,var4,var5);
center = (maxv+minv)/2;
dif = maxv-minv;
}
if crossup(c,minv) Then
{
T = 1;
hv = h;
}
if CrossDown(c,maxv) Then
{
T = -1;
lv = l;
}
if T == 1 then
{
if h > hv Then
hv = h;
if hv < center+PriceScale*pp Then
buy("b1",AtStop,center+PriceScale*pp);
if hv < maxv+PriceScale*pp Then
buy("b2",AtStop,maxv+PriceScale*pp);
}
if crossup(c,maxv+PriceScale*vv) Then
{
_up = 1;
uh1 = h;
uh2 = uh1[1];
}
if CrossDown(c,maxv+PriceScale*vv) Then
{
_up = -1;
ul1 = l;
ul2 = ul1[1];
}
if _up == 1 Then
{
if h > uh1 Then
uh1 = h;
if uh2 > 0 and uh2 >= maxv+PriceScale*uu and ul1 >= maxv-PriceScale*vv and uh1 < maxv+PriceScale*ww Then
buy("b3",AtStop,maxv+PriceScale*ww);
}
if _up == -1 Then
{
if l < ul1 Then
ul1 = l;
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,value1);
if T == -1 then
{
if l < lv Then
lv = h;
if lv > center-PriceScale*pp Then
sell("s1",AtStop,center-PriceScale*pp);
if lv > minv-PriceScale*pp Then
sell("s2",AtStop,minv-PriceScale*pp);
}
if CrossDown(c,minv-PriceScale*vv) Then
{
_dn = -1;
dh1 = h;
dh2 = dh1[1];
}
if CrossUp(c,maxv-PriceScale*vv) Then
{
_dn = 1;
dl1 = l;
dl2 = dl1[1];
}
if _dn == 1 Then
{
if h > dh1 Then
dh1 = h;
}
if _dn == -1 Then
{
if l < dl1 Then
dl1 = l;
if dl2 > 0 and dl2 <= minv-PriceScale*uu and dh1 <= minv+PriceScale*vv and dl1 > minv-PriceScale*ww Then
sell("s3",AtStop,minv-PriceScale*ww);
}
if MarketPosition == -1 Then
ExitShort("sx",AtStop,value1);
2
Input: bb(12),dv(2),cc(3),dd(3),ff(2);
Var : SumSqrt(0), Counter(0),AVGV(0),Stdv(0),BBmd(0),BBup(0),BBdn(0);
var : T(0),hv(0),lv(0);
BBmd = ema(c,bb);
If index >= bb Then{
SumSqrt = 0;
For Counter = 0 To bb - 1 Begin
SumSqrt = SumSqrt + (C[Counter] - BBmd) * (C[Counter] - BBmd);
End;
Stdv = SquareRoot(SumSqrt / bb);
BBup = BBmd + (Dv * stdv);
BBdn = BBmd - (Dv * stdv);
}
if crossup(c,bbdn) Then
{
T = 1;
hv = h;
}
if CrossDown(c,bbup) Then
{
T = -1;
lv = l;
}
if T == 1 then
{
if h > hv Then
hv = h;
if hv < bbmd+PriceScale*cc Then
buy("b1",AtStop,BBmd+PriceScale*cc);
}
if T == -1 then
{
if l < lv Then
lv = l;
if lv > bbmd-PriceScale*cc Then
sell("s1",AtStop,BBmd-PriceScale*cc);
}
if MarketPosition == 1 Then
{
if c > bbup Then
exitlong("bx1",AtStop,bbup-PriceScale*dd);
if c < bbup and c > bbmd Then
exitlong("bx2",AtStop,bbmd-PriceScale*ff);
}
if MarketPosition == -1 Then
{
if c < bbdn Then
ExitShort("sx1",AtStop,bbdn+PriceScale*dd);
if c < bbup and c > bbmd Then
ExitShort("sx2",AtStop,bbmd+PriceScale*ff);
}
즐거운 하루되세요
> 즐겁게 님이 쓴 글입니다.
> 제목 : 질문 올립니다.
> 안녕하세요. 늘 감사드립니다.
올리는 질문마다 항상 상세하고 친절하게 답을 주셔서, 그 것을 보며 공부하면서 아주 많이 배우게 되어 대단히 감사합니다.
지금,
둘 내지 세 개의 기준(조건)을 순차적으로(즉, 동시가 아니라 차례대로...) 충족시키고 나면 즉시(AtLimit, AtStop 활용) 주문이 나가서 체결가능하게 하는 매매식을 만드는 방법에 대해 공부하고 있습니다.
이런 예제 소스를 보여 주시면, 보고 열심히 공부하고자 합니다.
잘 부탁드립니다.
예로서,
A. 이평선들 Max Min 돌파이탈 지지저항 전략
변수들:
5개의 이평선들(기간값 각각 input: ii(50), jj(100), kk(150), ll(200), mm(250); 외부변수)의
최대값(var: Max(0))과 최소값(var: Min(0)),
그 것의 중심선 (var: Center(0); Center = (Max+Min)/2); )
Max와 Min의 차이 (var: Dif(0); Dif = Max-Min;)
// 매수1 ((돌파 매수)):
(제1조건:) (C가 Min 아래에 있다가) C가 Min을 뚫고 올라 간 후
(제2조건:) C가 Center를 nn(7)(외부변수)틱보다 더 높게 올라 가면
[ = 즉, C가 Center+nn*PriceScale을 CrossUp 또는 C > Center+nn*PriceScale ],
then 즉시(AtStop?) 매수
[ = Buy("B1", AtStop...); ].
(제3조건) 제1조건, 제2조건 충족 후, C가 Max를 pp(5)(외부변수)보다 더 높게 올라 가면,
[ = 즉, C가 Max+pp*PriceScale을 CrossUp 또는 C > Max+pp*PriceScale],
then 즉시((AtStop?) 매수
[ = Buy("B2", AtStop...); ] // 즉 피라미딩 가능.
// 매수2 ((지지 매수)):
(제1조건): C가 Max의 uu(7)((외부변수)) 틱 위에 있었다가
(제2조건): C가 Max의 아래 위 각 vv(2)((외부변수))틱 범위 속에 들어 갔다가 ((즉, Max에 접근했다가))
(제3조건): C가 Max의 ww(8)((외부변수)) 틱 위로 올라 가는 순간 즉시 매수
[ = Buy("B3", AtStop...); ].
// 매수청산
C가 EMA(ee)(=ee(2)=기간값 2. 외부변수로)를 하향 이탈하는 즉시 ExitLong("EL1", AtStop?...);
// 매도1, 매도2, 매도청산은 매수의 경우와 정 반대로... ((외부변수는 그 대로 같이 사용))
B. 볼린저 밴드 급등 매매 전략
// 매수
(제1조건) C가 하단선을 아래에서 위로 돌파
(제2조건) C가 중간선(EMA(bb) (bb(12)는 볼밴 중심선인 EMA의 기간값 외부변수)을 cc(3)(=외부변수)틱 돌파 ((즉 중간선+cc틱을 상향돌파)) 즉시 매수
[ = Buy("BB", AtStop...); ]
//매수청산1
(제1조건) C가 볼밴 상단선 위에 있다
(제2조건) C가 볼밴 상단선을 dd 틱 (input: dd(3); // 외부변수)만큼 하회하는 즉시 ExitLong("EL1", AtLimit?...);
//매수청산2
(제1조건) C가 볼밴 중심선과 상단선 사이에 있다.
(제2조건) C가 볼밴 중심선을 ff틱(ff(2)=외부변수) 하회하는 즉시 매수청산 = ExitLong("EL2", AtStop?)
//매도와 매도청산은 매수의 경우와 정반대로...
대단히 감사합니다!