답변완료
유진예스트레이더 GetSTime 이상값
안녕하세요. 친절한 답변에 미리 감사드립니다. 아래의 수식으로 예스트레이더 내 예스스팟으로 차트객첵의 데이터를 외부의 데이터베이스로 인서트 할때 문제점입니다. 최초 외부 데이터베이스로 자료를 가져갈때 현재 시점으로부터 약 9000~10000봉 과거 봉들을 가져가는 수식입니다. 유진예스트레이더 예스스팟 좀 봐주십시오.
1. 한투예스트레이더 내 예스스팟에서는 GetSTime 의 수치들이 문제가 없습니다. 마이너스 음수 처리된 값이 나가는 경우가 없습니다.
2. 그런데 유진예스트레이더 내 예스스팟에서는 GetSTime 의 수치들에 문제가 있습니다. 마이너스 음수 처리된 오류값들이 나갑니다.
#######################################################
var choKkuenSi_sseulMisaBongSu=8600; // 손잡이- 10000 하면 좋으나 줄여도 됨.
var hhSseulGoId=1; // 손잡이 이나 고정- 봉번 ID는 날초 시 언제나 1번부터임.
var hhSdate=0;
var hhStime=0;
var hhO=0;
var hhH=0;
var hhL=0;
var hhC=0;
var hhV=0;
var sql인서트="0";
var hhBongBun=0;
function Main_OnStart()
{
Main.MessageList("AD yestrader ssj <soochool> sijac. hhSseulGoId=",hhSseulGoId);
//////////////// 자료고 날 최초시 갈래
for (var ffa=choKkuenSi_sseulMisaBongSu; ffa>=0; ffa--){ // 손잡이
//////////////// 마련
hhSdate=Chart1.GetSDate(1,ffa);
hhStime=Chart1.GetSTime(1,ffa);
hhO=Chart1.GetOpen(1,ffa);
hhH=Chart1.GetHigh(1,ffa);
hhL=Chart1.GetLow(1,ffa);
hhC=Chart1.GetClose(1,ffa);
hhV=Chart1.GetVolume(1,ffa);
//////////////// 로고 sql 마련
sql인서트=hhRoGoEreum+" (ID,SDATE,STIME,O,H,L,C,V) VALUES (";
sql인서트+=String(hhSseulGoId);
sql인서트+=",";
sql인서트+=String(hhSdate);
sql인서트+=",";
sql인서트+=String(hhStime);
sql인서트+=",";
sql인서트+=String(hhO);
sql인서트+=",";
sql인서트+=String(hhH);
sql인서트+=",";
sql인서트+=String(hhL);
sql인서트+=",";
sql인서트+=String(hhC);
sql인서트+=",";
sql인서트+=String(hhV);
sql인서트+=");";
//////////////// 로고 실행
DataBase1.인서트(sql인서트);
hhSseulGoId+=1; // 1증.
}
}
function Chart1_OnBarAppended(nData)
{
// Main.MessageList("Chart1_OnBarAppended / hhSseulGoId=",hhSseulGoId);
if (nData==1){
hhBongBun=0; // 0부여.
//////////////// 마련
hhSdate=Chart1.GetSDate(1,hhBongBun);
hhStime=Chart1.GetSTime(1,hhBongBun);
hhO=Chart1.GetOpen(1,hhBongBun);
hhH=Chart1.GetHigh(1,hhBongBun);
hhL=Chart1.GetLow(1,hhBongBun);
hhC=Chart1.GetClose(1,hhBongBun);
hhV=Chart1.GetVolume(1,hhBongBun);
//////////////// 로고 sql 마련
sql인서트=hhRoGoEreum+" (ID,SDATE,STIME,O,H,L,C,V) VALUES (";
sql인서트+=String(hhSseulGoId);
sql인서트+=",";
sql인서트+=String(hhSdate);
sql인서트+=",";
sql인서트+=String(hhStime);
sql인서트+=",";
sql인서트+=String(hhO);
sql인서트+=",";
sql인서트+=String(hhH);
sql인서트+=",";
sql인서트+=String(hhL);
sql인서트+=",";
sql인서트+=String(hhC);
sql인서트+=",";
sql인서트+=String(hhV);
sql인서트+=");";
//////////////// 로고 실행
DataBase1.인서트(sql인서트);
hhSseulGoId+=1; // 1증.
}
}
var choKkuenSi_sseulMisaBongSu=8600; // 손잡이- 10000 하면 좋으나 줄여도 됨.
var hhSseulGoId=1; // 손잡이 이나 고정- 봉번 ID는 날초 시 언제나 1번부터임.
var hhSdate=0;
var hhStime=0;
var hhO=0;
var hhH=0;
var hhL=0;
var hhC=0;
var hhV=0;
var sql인서트="0";
var hhBongBun=0;
function Main_OnStart()
{
Main.MessageList("AD yestrader ssj <soochool> sijac. hhSseulGoId=",hhSseulGoId);
//////////////// 자료고 날 최초시 갈래
for (var ffa=choKkuenSi_sseulMisaBongSu; ffa>=0; ffa--){ // 손잡이
//////////////// 마련
hhSdate=Chart1.GetSDate(1,ffa);
hhStime=Chart1.GetSTime(1,ffa);
hhO=Chart1.GetOpen(1,ffa);
hhH=Chart1.GetHigh(1,ffa);
hhL=Chart1.GetLow(1,ffa);
hhC=Chart1.GetClose(1,ffa);
hhV=Chart1.GetVolume(1,ffa);
//////////////// 로고 sql 마련
sql인서트=hhRoGoEreum+" (ID,SDATE,STIME,O,H,L,C,V) VALUES (";
sql인서트+=String(hhSseulGoId);
sql인서트+=",";
sql인서트+=String(hhSdate);
sql인서트+=",";
sql인서트+=String(hhStime);
sql인서트+=",";
sql인서트+=String(hhO);
sql인서트+=",";
sql인서트+=String(hhH);
sql인서트+=",";
sql인서트+=String(hhL);
sql인서트+=",";
sql인서트+=String(hhC);
sql인서트+=",";
sql인서트+=String(hhV);
sql인서트+=");";
//////////////// 로고 실행
DataBase1.인서트(sql인서트);
hhSseulGoId+=1; // 1증.
}
}
function Chart1_OnBarAppended(nData)
{
// Main.MessageList("Chart1_OnBarAppended / hhSseulGoId=",hhSseulGoId);
if (nData==1){
hhBongBun=0; // 0부여.
//////////////// 마련
hhSdate=Chart1.GetSDate(1,hhBongBun);
hhStime=Chart1.GetSTime(1,hhBongBun);
hhO=Chart1.GetOpen(1,hhBongBun);
hhH=Chart1.GetHigh(1,hhBongBun);
hhL=Chart1.GetLow(1,hhBongBun);
hhC=Chart1.GetClose(1,hhBongBun);
hhV=Chart1.GetVolume(1,hhBongBun);
//////////////// 로고 sql 마련
sql인서트=hhRoGoEreum+" (ID,SDATE,STIME,O,H,L,C,V) VALUES (";
sql인서트+=String(hhSseulGoId);
sql인서트+=",";
sql인서트+=String(hhSdate);
sql인서트+=",";
sql인서트+=String(hhStime);
sql인서트+=",";
sql인서트+=String(hhO);
sql인서트+=",";
sql인서트+=String(hhH);
sql인서트+=",";
sql인서트+=String(hhL);
sql인서트+=",";
sql인서트+=String(hhC);
sql인서트+=",";
sql인서트+=String(hhV);
sql인서트+=");";
//////////////// 로고 실행
DataBase1.인서트(sql인서트);
hhSseulGoId+=1; // 1증.
}
}
2025-01-15
320
글번호 226187
답변완료
예스스팟
var timer5 = 2; //5초
var 매수금 = 100000;
var OrderList = [];
var MKList = [];
var req;
function Main_OnStart()
{
//1번 타이머, 1초
Main.SetTimer(1, timer5*1000);
// 오늘 매수한 종목 관리 배열 초기화
MKList = [];
}
function Main_OnTimer(nEventID)
{
var d = new Date();
YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS > 090000 && HHMMSS < 151500)
{
//종목검색 수행
Main.ReqPowerSearch("매수조건")
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >= 1)
{
if (MKList.length == 0)
{
OrderList = aItemList;
}
else
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MKList.length; b++)
{
if (aItemList[a] == MKList[b].code)
{
Add = false;
}
}
if (Add == true && !IsStockInAccount(aItemList[a]))
{
OrderList.push(aItemList[a]);
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, timer5*1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
// 계좌에 같은 종목이 있는지 확인
if (!IsStockInAccount(MarketData.code)) {
// 계좌에 없는 경우에만 매수
Account1.OrderBuy(MarketData.code,1,0,1);
//Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1);
// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0);
//지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다.
Main.MessageList(MarketData.code + " 주식을 매수합니다.");
} else {
Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다.");
}
req = req+1;
if (req < OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, timer5*1000);
}
}
}
function IsStockInAccount(stockCode) {
// 계좌에 해당 종목이 있는지 확인하는 함수
var numberOfBalances = Account1.GetTheNumberOfBalances();
for (var i = 0; i < numberOfBalances; i++) {
Account1.SetBalance(i);
if (stockCode == Account1.Balance.code) {
return true; // 계좌에 같은 종목이 있으면 true 반환
}
}
return false; // 계좌에 같은 종목이 없으면 false 반환
}
===============================================
위와 같이 실전매매를 진행중인데요.
1) "매수조건"신호에 따라 사듯이, "매도조건"신호에 따라 팔려고 합니다. 가능하면 부탁드립니다.
2) 한종목당 1회만 매수진입조건인데, 매수신호가 나올때 마다 진입할려면 무엇을 어떻게 바꾸면 될까요? 개별종목 단타라서 분봉신호마다 들어갈려고 합니다.
항상 감사합니다.
2024-12-26
366
글번호 226177