예스스탁
예스스탁 답변
2023-10-04 15:57:14
안녕하세요
예스스탁입니다.
1
시스템 트레이딩 설정창의 피라미딩탭에 보시면
하단에 최대 누적 수량 및 횟수를 제어하는 옵션이 있습니다.
1회 진입이나 누적으로 진입수량이 지정한 값 이상이면 신호가 발생하지 않습니다.
누적수량을 더 크게 지정하시거나
외부변수 중 capital을 조정해 보시기 바랍니다.
2
식상 이평계산 부분을 제외하면 별도로 간결하게 할 만한 부분이 없습니다.
이평은 변수처리해서 사용하시면 됩니다.
Input:maperiod(144),profittarget(0.8),stloss(15),water1(1),pleng(100),natrs(3),capital(1),trendscore(1.5);
var : cont(0),mascoring(0);
//추세판정
var1 = ma(C,maperiod*1);
var2 = ma(C,maperiod*2);
var3 = ma(C,maperiod*3);
var4 = ma(C,maperiod*5);
var5 = ma(C,maperiod*7);
if var5>var5[maperiod*7] Then Value1=1; Else value1=-1;
if Var4>Var4[maperiod*5] Then Value2=0.5; Else Value2=-0.5;
if Var3>Var3[maperiod*3] Then Value3=0.25; Else Value3=-0.25;
if Var2>Var2[maperiod*2] Then Value4=0.125; Else Value4=-0.125;
if var1>var1[maperiod*1] Then Value5=0.0625; Else value5=-0.0625;
Value10= value1+value2+value3+value4+value5;
value11 = ATR( pLeng ) * nAtrs ;
cont=(capital*0.01)/c;
if marketposition==0 and Value10 >= trendscore and CrossDown(c,BollBandDown(60,2)) Then
Begin
Buy("매수",AtMarket,def,cont);
End;
if MarketPosition == 1 and MaxEntries == 1 Then
Buy("mt1",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*2);
if MarketPosition == 1 and MaxEntries == 2 Then
Buy("mt2",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*4);
if MarketPosition == 1 and MaxEntries == 3 Then
Buy("mt3",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*8);
if MarketPosition == 1 and MaxEntries == 4 Then
Buy("mt4",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*16);
if MarketPosition == 1 and MaxEntries == 5 Then
Buy("mt5",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*32);
if MarketPosition == 1 and MaxEntries == 6 Then
Buy("mt6",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*64);
if MarketPosition==1 and (OpenPositionProfit/CurrentContracts)/AvgEntryPrice >= profittarget*0.01 Then
Begin
ExitLong("매수청산",AtMarket);
End;
즐거운 하루되세요
> 예스모어 님이 쓴 글입니다.
> 제목 : 업비트에서는 결과가 나오는데 동일전략이 다른 상품에서는 나오지 않습니다.
> 동일한 전략을 btckrw에서는 잘 적용이 되나
btc 마켓 종목에서는 적용이 되지 않습니다.
또한 아래 수식이 계산이 많이 들어가는 느낌이 드는데...
최적화할때에도 결과들이 누락되고 그래서...
속도를 더 빠르게 할 수 있는 코드로 수정이 가능할까요??
Input:maperiod(144),profittarget(0.8),stloss(15),water1(1),pleng(100),natrs(3),capital(1),trendscore(1.5);
var : cont(0),mascoring(0);
//추세판정
if ma(c,maperiod*7)>ma(c,maperiod*7)[maperiod*7] Then Value1=1; Else value1=-1;
if ma(c,maperiod*5)>ma(c,maperiod*5)[maperiod*5] Then Value2=0.5; Else Value2=-0.5;
if ma(c,maperiod*3)>ma(c,maperiod*3)[maperiod*3] Then Value3=0.25; Else Value3=-0.25;
if ma(c,maperiod*2)>ma(c,maperiod*2)[maperiod*2] Then Value4=0.125; Else Value4=-0.125;
if ma(c,maperiod*1)>ma(c,maperiod*1)[maperiod*1] Then Value5=0.0625; Else value5=-0.0625;
Value10= value1+value2+value3+value4+value5;
value11 = ATR( pLeng ) * nAtrs ;
cont=(capital*0.01)/c;
if marketposition==0 and Value10 >= trendscore and CrossDown(c,BollBandDown(60,2)) Then
Begin
Buy("매수",AtMarket,def,cont);
End;
if MarketPosition == 1 and MaxEntries == 1 Then
Buy("mt1",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*2);
if MarketPosition == 1 and MaxEntries == 2 Then
Buy("mt2",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*4);
if MarketPosition == 1 and MaxEntries == 3 Then
Buy("mt3",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*8);
if MarketPosition == 1 and MaxEntries == 4 Then
Buy("mt4",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*16);
if MarketPosition == 1 and MaxEntries == 5 Then
Buy("mt5",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*32);
if MarketPosition == 1 and MaxEntries == 6 Then
Buy("mt6",AtLimit,LatestEntryPrice(0)*(1-water1*0.01),cont*64);
if MarketPosition==1 and (OpenPositionProfit/CurrentContracts)/AvgEntryPrice >= profittarget*0.01 Then
Begin
ExitLong("매수청산",AtMarket);
End;