답변완료
피라미딩 진입 수정 부탁드립니다.
첫 진입이후 3% 하락시 추가 피라미딩 진입하는 식인데, 작동을 안하네요.
수정 부탁드립니다.
var BL = [],req=0,step;
var CT = [];
function Main_OnStart()
{
//처음 시작시 step은 0
step = 0;
//시작시점의 보유종목수
var num1 = Account1.GetTheNumberOfBalances();
//보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장
if (num1 > 0)
{
step = 1;
for(var i = 0 ; i < num1 ; i++)
{
Account1.SetBalance(i);
BL[i] = Account1.Balance.code;
}
if (BL.length >= 1)
{
req = 0;
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2); // 최대진입횟수
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
}
else //보유종목이 없으면 바로 1분 타이머 시작
{
step = 2;
Main.MessageList("보유종목없음");
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
}
function Main_OnRcvChartEx(ChartEx)
{
if (step == 1 && ChartEx.GetCode(1) == BL[req])
{
step = 1;
CT[req] = ChartEx;
req = req+1;
if (req < BL.length)
{
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2);
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
else
{
step = 2;
Main.SetTimer(1, 100000);//1번 타이머, 60초
Main.MessageList("보유종목차트생성완료");
}
}
if (step == 2 && ChartEx.GetCode(1) == BL[req])
{
CT[req] = ChartEx;
req = req+1;
if (req < BL.length)
{
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2);
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
else
{
Main.MessageList("종목검색후차트생성완료");
//차트생성 완료하면 타이머 다시 셋팅
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
//타이머 종료
Main.KillTimer(1);
Main.ReqPowerSearch("종목검색")
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
//검색된 종목이 없으면
if (nCount == 0)
{
//타이머 다시 셋팅
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
//검색된 종목이 있으면
if (nCount >= 1)
{
//검색된 종목과 기존 만든 차트들의 종목코드를 비교해
//차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가
var cnt = 0;
for(var i = 0 ; i < aItemList.length ; i++)
{
var add = true;
for(var z = 0 ; z < CT.length ; z++)
{
if (aItemList[i] == CT[z].GetCode(1))
{
add = false;
break;
}
}
if (add == true)
{
cnt = cnt+1;
BL.push(aItemList[i]);
}
}
Main.MessageList("BL : ",req,BL);
//차트 생성해야할 종목이 있으면 차트요청
if (cnt >= 1)
{
//차트 요청
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료
0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, // 최대진입수량
2);
var ChartSet = new ReqChartItem(BL[req],15,CHART_PERIOD_MINUTE,500,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("Signal전략");
Main.ReqChartEx(ChartSet, SymSet);
}
else //없으면 타이머 다시 셋팅
{
Main.SetTimer(1, 100000);//1번 타이머, 60초
}
}
}
//생성된 차트들에서 신호가 발생하면
function Main_OnRiseSignal(ChartEx, Signal)
{
//매수신호 발생
if (Signal.signalKind == 1)
{
//잔고셋팅
Account1.SetBalance(Signal.code,0);
//보유수량이 없으면
if (Account1.Balance.count == 0)
{
//EntryVol주 시장가 매수
Account1.OrderBuy(Signal.code, EntryVol,Signal.price,1);
}
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅
Account1.SetBalance(Signal.code,0);
//보유수량이 있으면
if (Account1.Balance.count > 0)
{
//전량 시장가 매도
Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1);
}
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)
{
//체결데이터 수신 업데이트
if (lUp*dateID == 20001)
{
//루프를 돌아 생성된 종목중 어떤 종목인지 파악
for (i = 0; i < Math.min(itemcnt,100); i++)
{
//어떤 배열방의 종목인지 찾았으면
if (sItemCode == BL[i])
{
//해당 종목 잔고셋팅
Account1.SetBalance(BL[i].code, 0);
//잔고 수량이 있을때만
if (Account1.Balance.count > 0)
{
//하락시 매수할 가격이하 3% 하락이면 추가매수
if (BL[i].current <= Signal.Price[i]*0.97)
{
Account1.OrderBuy(BL[i].code,EntryVol,Signal.Price[i]*0.97, 0);
}
}
}
}
}
}
2020-10-17
2754
글번호 225340