// join an integer to a list and join a K object to a list int eg8() { K z=ki(20); K intlist=ktn(KI,0); K x=ktn(0,0); DO(5,ja(&intlist,&i)); jk(&x,intlist); jk(&x,z); k(c,"display",x,(K)0); return 1; }
static int ProcessMessage(const FeedData *data) { static int sent = 0; K condvec; if (trades == NULL) { trades = create_trade_schema(); } if (quotes == NULL) { quotes = create_quote_schema(); } switch(data->type) { case FF_TRADE_MSG: js(&kK(trades)[0], ss(data->core.sym)); js(&kK(trades)[1], ss(data->core.exg)); ja(&kK(trades)[2], (void *) &data->msg.trade.size); ja(&kK(trades)[3], (void *) &data->msg.trade.volume); ja(&kK(trades)[4], (void *) &data->core.sequence); ja(&kK(trades)[5], (void *) &data->msg.trade.price); condvec = ktn(4, KC); memcpy(&kC(condvec)[0], &data->core.cond, 4); jk(&kK(trades)[6], condvec); break; case FF_QUOTE_MSG: js(&kK(quotes)[0], ss(data->core.sym)); js(&kK(quotes)[1], ss(data->core.exg)); ja(&kK(quotes)[2], (void *) &data->msg.quote.asksize); ja(&kK(quotes)[3], (void *) &data->msg.quote.bidsize); ja(&kK(quotes)[4], (void *) &data->msg.quote.askprice); ja(&kK(quotes)[5], (void *) &data->msg.quote.bidprice); ja(&kK(quotes)[6], (void *) &data->core.sequence); condvec = ktn(4, KC); memcpy(&kC(condvec)[0], &data->core.cond, 4); jk(&kK(quotes)[7], condvec); break; } if (++sent >= 10) { SendToKDB("quote", quotes); quotes = NULL; SendToKDB("trade", trades); trades = NULL; sent = 0; } return FEED_STATE; }
K eval(K x,K y,K z){K*k;S*b,s;SQLULEN w;SQLLEN*nb;SQLINTEGER*wb;H*tb,u,t,j=0,p,m;F f;C c[128];I n=xj<0;D d=d1(n?-xj:xj);U(d)x=y;Q(z->t!=-KJ||xt!=-KS&&xt!=KC,"type") if(z->j)SQLSetStmtAttr(d,SQL_ATTR_QUERY_TIMEOUT,(SQLPOINTER)(SQLULEN)z->j,0); if(xt==-KS)Q1(SQLColumns(d,(S)0,0,(S)0,0,xs,S0,(S)0,0))else{I e;K q=kpn(xG,xn);ja(&q,"\0");e=SQLExecDirect(d,q->G0,xn);r0(q);Q1(e)} SQLNumResultCols(d,&j);P(!j,(d0(d),knk(0))) b=malloc(j*SZ),tb=malloc(j*2),wb=malloc(j*SZ),nb=malloc(j*SZ),x=ktn(KS,j),y=ktn(0,j);// sqlserver: no bind past nonbind DO(j,Q1(SQLDescribeCol(d,(H)(i+1),c,128,&u,&t,&w,&p,&m))xS[i]=sn(c,u); if(t>90)t-=82; Q(t<-11||t>12,xS[i])wb[i]=ut[tb[i]=t=t>0?t:12-t]==KS&&w?w+1:wt[t];if(ut[t]==KS&&(n||!wb[i]||wb[i]>9))tb[i]=13) DO(j,kK(y)[i]=ktn(ut[t=tb[i]],0);if(w=wb[i])Q1(SQLBindCol(d,(H)(i+1),ct[t],b[i]=malloc(w),w,nb+i))) for(;SQL_SUCCEEDED(SQLFetch(d));)DO(j,k=kK(y)+i;u=ut[t=tb[i]];s=b[i];n=SQL_NULL_DATA==(int)nb[i]; if(!u)jk(k,n?ktn(ct[t]?KC:KG,0):wb[i]?kp(s):gb(d,(H)(i+1),t)); else ja(k,n?nu(u):u==KH&&wb[i]==1?(t=(H)*s,(S)&t):u==KS?(s=dtb(s,nb[i]),(S)&s):u<KD?s:u==KZ?(f=ds(s)+(vs(s+6)+*(I*)(s+12)/1e9)/8.64e4,(S)&f):(w=u==KD?ds(s):vs(s),(S)&w))) if(!SQLMoreResults(d))O("more\n");DO(j,if(wb[i])free(b[i]))R free(b),free(tb),free(wb),free(nb),d0(d),xT(xD(x,y));}
K fa2q(double *data,long *dims,long d,long size){ int length=dims[0],elesize=size/length,i; K L; if(1==d){ L=ktn(KF,length); for(i=0;i<length;i++)kF(L)[i]=*(data+i); R L; }else if(1<d){ L=knk(0); for(i=0;i<length;i++)jk(&L,fa2q(data+i*elesize,dims+1,d-1,elesize)); R L; } R (K)0; }
double NuD1(double Re, double Pr) { // Nussalt number based on above correlation// return jk(Re)*Re*pow(Pr, (1/3.)); }