답변완료
수식어 부탁드립니다
var : entry(0);
if bdate != bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if MarketPosition <= 0 and entry < 1 Then
buy("b",atlimit,dayhigh-PriceScale*12000);
if MarketPosition == 1 Then
exitlong("bx",atlimit,lowest(L,BarsSinceEntry)+PriceScale*120);
if MarketPosition >= 0 and entry < 1 Then
sell("s",atlimit,daylow+PriceScale*70);
if MarketPosition == -1 Then
ExitShort("sx",atlimit,Highest(H,BarsSinceEntry)-PriceScale*185);
if sdate != sdate[1] Then
SetStopEndofday(60000);
if bdate != bdate[1] Then
SetStopEndofday(0);
----------------------
진입신호이후 상하 변동폭에 익절이 정해지는 식이여서 원하는 익절이 불가합니다.
진입신호에서 익절로 청산되는 식으로 변경을 부탁드리고 손절은 20틱입니다.
----------------------------
위 수식어에서 청산을 틱이 아닌 특정시간으로 설정할 수있는지요.
청산이 아침 05시30분이 가능하다면 그런 청산의 수식어를 추가로 부탁드립니다.
2022-06-29
1439
글번호 160265
시스템
답변완료
매수 주문에 관한 질문
안녕하세요~
제가 매수 A라는 시스템 로직을 짰는데요 이게 처음 신호가 나왔을때 1계약 매수하고, 청산할때까지 추가 매수는 없었으면 좋겠는데 계속 추가 주문이 들어가는데 어떻게 해야할까요?
피라미딩 체크도 허용안함입니다.
예를들어 MACD가 우상향할때 매수해서 우하향할때 매도해라 라는 수식을 쓰면
IF
A=MACD(12,26,9)
A>A[1] THEN
Buy(s);
if MarketPosition == 1 Then
{
if A<A[1] Then
ExitLong();
}
이런 식으로 되어 있는데 현재 MACD가 우사향하고 다음봉도 우상향 3번째 봉도 우상향하면
2번째, 3번째 봉에서 계속 매수 신호가 나가나요?
#질문1.
그렇다면 최초 신호에 진입하고 매도할때까지 매수를 안하려면 어떻게 설정해야하나요?
#질문2.
현재 모의투자 계좌를 쓰고 있는데, A라는 매수요건에 해당해서 1계약이 체결 이후 매도 신호가 안나오는데 B라는 다른 차트에서 매수요건에 해당하여 1계약 추가 체결 이렇게 되면 제 계좌안에 2개의 매수 계약이 있는 상태라 평단가가 달라 지는데, 이게 싫다면 계좌를 여러개 개설해서 1계자당 1개의 시스템 매매만 돌리는 수밖에 없나요?
또한 이럴 경우 A의 청산로직이 발생하거나 B의 청산 로직이 A보다 먼저 발생할 경우 2계약 모두 매도가 나가게 하려면 어떤 수식을 사용해야 하나요? 그대로 두면 A의 청산 로직이 발생하면 1계약 매도 나가고, B가 발생하면 또 1계약 매도청산이 자동으로 되는게 맞죠~?
#질문3.
Buy(s); 와 Buy();의 차이가 무엇인가요?
var : d7mav(0,Data7) 여기서 선언할때 괄호안의 0은 왜 넣어주는 건가요? 아래처럼 변수를 쓰는데 선언 이렇게 하면 제대로 한건지요?
var : d1mav1(0,Data1),d1mav2(0,Data1),d1mav3(0,data1),d1mav4(0,data1),d1mav5(0,data1),d1atan(0,data1),d1macd(0,data1),d1stoK(0,data1),d1stoD(0,data1),d1CCI(0,data1);
var : d7mav(0,Data7),d7stoK(0,Data7),d7stoD(0,Data7);
d1mav1 = data1(ma(C,5));
d1mav2 = data1(ma(C,10));
d1mav3 = data1(ma(C,15));
d1mav4 = data1(ma(C,20));
d1mav5 = data1(ma(C,30));
d1atan = Atan((d1mav1 - d1mav1[1])/2);
d1macd = data1(macd(5,20));
d1stoK = data1(FastK(5));
d1stoD = data1(FastD(5,3));
d1CCI = CCI(9);
d7mav = data7(ma(C,5));
d7stoK = data7(FastK(5));
d7stoD = data7(FastD(5,3));
#질문4.
시뮬레이션차트는 장중에 작동이 안되나요?
#질문5.
수식이 오류가 나는데 질문입니다.
매도 청산 로직이 현재 이렇게 되어 있는데요
if MarketPosition == 1 Then
{
if (data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) Then
exitshort();
if (data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) Then
exitshort();
if (data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD) Then
exitshort();
if (data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) Then
exitshort();
if (data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD) Then
exitshort();
}
=================================================================================
위에 식을 괄호로 묶어서 OR로 연결하면 매도 신호가 안나가요? 오류가 뜨네요~
if MarketPosition == 1 Then
{
if ((data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) OR
(data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) OR
(data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD OR
(data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) OR
(data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD)) Then
exitshort();
}
질문6.
현재 하나의 시스템 랭귀지 안에 4개의 부분으로 나눠놨는데 매도 청산신호가 안나갑니다
1. 매수로직
2. 매수청산
3. 매도로직
4. 매도청산
이렇게 되어 있는데 4번만 발생이 안되는데 왜 그럴까요~?
2022-06-29
1270
글번호 160264
시스템
답변완료
수식 변환 문의
수고 하십니다.
아래 식 변환 부탁드립니다.
수고하세요...
#########################
input length = 5;
def n = length;
def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def x = bn;
def y = close;
# calculate summation values
def startBar = lastBar - (n - 1);
def sumX = if bn < startBar then 0 else x + sumX[1];
def sumY = if bn < startBar then 0 else y + sumY[1];
def sumX2 = if bn < startBar then 0 else Power(x, 2) + sumX2[1];
def sumX3 = if bn < startBar then 0 else Power(x, 3) + sumX3[1];
def sumX4 = if bn < startBar then 0 else Power(x, 4) + sumX4[1];
def sumXY = if bn < startBar then 0 else x * y + sumXY[1];
def sumX2Y = if bn < startBar then 0 else Power(x, 2) * y + sumX2Y[1];
# intermediary calculations
def xx = sumX2 - Power(sumX, 2) / n;
def xy = sumXY - (sumX * sumY / n);
def xx2 = sumX3 - (sumX2 * sumX / n);
def x2y = sumX2Y - (sumX2 * sumY / n);
def x2x2 = sumX4 - (Power(sumX2, 2) / n);
# calculate coefficients
def a0 = (x2y * xx - xy * xx2) / (xx * x2x2 - Power(xx2, 2));
def b0 = (xy * x2x2 - x2y * xx2) / (xx * x2x2 - Power(xx2, 2));
def c0 = sumY / n - b0 * sumX / n - a0 * sumX2 / n;
# for a, b, and c use the final value on the last bar of the chart for all calculations
def a = GetValue(a0, bn - lastBar);
def b = GetValue(b0, bn - lastBar);
def c = GetValue(c0, bn - lastBar);
# calculate and plot
plot theCurve = if bn < startBar then Double.NaN else a * Power(x, 2) + b * x + c;
2022-06-28
1414
글번호 160260
지표
답변완료
수식변환의뢰
아래의 수식을 예스언어로 변환부탁드립니다.
StdevIf(data, compare, value)
- data 벡터에서 value와 비교하여 해당되는 값들로만 전체 구간에 대해
표준편차를 구한다.
(compare=-1:value보다작음, 0:value와 같음, 1:value보다 큼)
StdevIf(C-avg(C, 24), -1, 0)
종가-24일평균값이 0보다 작은 값들에 대해서만, 표준편차를 구한다.
사용법 : AvgIf(data, compare, value)
- data 벡터에서 value와 비교하여 해당되는 값들로만 평균을 구한다.
(compare=-1:value보다작음, 0:value와 같음, 1:value보다 큼)
AvgIf(C-avg(C, 24), -1, 0)
종가-24일평균값이 0보다 작은 값들에 대해서만 평균값을 구한다.
2022-06-28
1652
글번호 160253
사용자 함수