API SPHERA Trading - problema integrazione

di il
1 risposte

API SPHERA Trading - problema integrazione

Buonasera, 

sono nuovo del forum e da poco operante nel settore, con alcune basi di programmazioni in c.

Sto cercando di collegare tramite Api la piattaforma che uso per fare Trading, Sphera by Kline. Le api sono in c.

Ho questo codice :

#include "snapi.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef _WIN32
#include <Windows.h>
#define sleep(x) Sleep(1000 * (x))
#else
#include <unistd.h>
#endif

// Dichiarazione delle funzioni di callback
void OnDatainCallback(int codmsg, kcapidata* data, void* userdata);
void OnRequestDatainCallback(int codmsg, kcapidata* data, void* userdata);
void OnStatusCallback(int StatusCode, char* StatusText, void* userdata);

kcInterface pinterf;
kcapidata data;

typedef struct {
   char tipopr[50];
   char riford[50];
   char riforg[50];
   char numpdn[50];    
} MarketData;

MarketData g_marketData;

void OnRequestDatainCallback(int codmsg, kcapidata* data, void* userdata) {

   char buf[1024];


   if (codmsg == CODMSGLOGIN) 
   {
       printf("Received CODMSGLOGIN\n");
       if (kc_GetString(data, "risposta", buf, sizeof(buf)) == KC_OK) {
           printf("Login risposta %s\n", buf);
           if (strcmp(buf, "1") == 0) {
               printf("Login riuscito\n");
           }
           else {
               printf("Login fallito o parzialmente riuscito\n");
           }
       }
       else {
           printf("Login risposta NOK\n");
       }
               
       if (kc_GetString(data, "idcon", buf, sizeof(buf)) == KC_OK)
           printf("Login idcon %s\n", buf);
       else
           printf("Login idcon NOK\n");
   }

   else if (codmsg == CODVALMOB)
   {
       if (kc_GetString(data, "cod", buf, 12) == KC_OK)
           printf("VALMOB cod %s \n", buf);
       else
           printf("VALMOB cod NOK \n");

       if (kc_GetString(data, "codisin", buf, 12) == KC_OK)
           printf("VALMOB codisin %s \n", buf);
       else
           printf("VALMOB codisin NOK \n");                

       if (kc_GetString(data, "qtamin", buf, 50) == KC_OK)
           printf("VALMOB qtamin %s \n", buf);
       else
           printf("VALMOB qtamin NOK \n");

       if (kc_GetString(data, "tic", buf, 50) == KC_OK)
           printf("VALMOB tick %s \n", buf);
       else
           printf("VALMOB tick NOK \n");

       if (kc_GetString(data, "tipmer", buf, 50) == KC_OK)
           printf("VALMOB tipmer %s \n", buf);
       else
           printf("VALMOB tipmer NOK \n");
   }

   else if (codmsg == CODMKT)
   {
       if (kc_GetString(data, "tipopr", buf, 50) == KC_OK) {
           strncpy_s(g_marketData.tipopr, sizeof(g_marketData.tipopr), buf, 50);
           printf("CODMKT tipopr %s \n", g_marketData.tipopr);
       }
       else {
           printf("CODMKT tipopr NOK \n");
       }

       if (kc_GetString(data, "riford", buf, 50) == KC_OK) {
           strncpy_s(g_marketData.riford, sizeof(g_marketData.riford), buf, 50);
           printf("CODMKT riford %s \n", g_marketData.riford);
       }
       else {
           printf("CODMKT riford NOK \n");
       }

       if (kc_GetString(data, "riforg", buf, 50) == KC_OK) {
           strncpy_s(g_marketData.riforg, sizeof(g_marketData.riforg), buf, 50);
           printf("CODMKT riforg %s \n", g_marketData.riforg);
       }
       else {
           printf("CODMKT riforg NOK \n");
       }

       if (kc_GetString(data, "numpdn", buf, 50) == KC_OK) {
           strncpy_s(g_marketData.numpdn, sizeof(g_marketData.numpdn), buf, 50);
           printf("CODMKT numpdn %s \n", g_marketData.numpdn);
       }
       else {
           printf("CODMKT numpdn NOK \n");
       }

       if (kc_GetString(data, "coderr", buf, 50) == KC_OK)
           printf("CODMKT coderr %s \n", buf);
       else
           printf("CODMKT coderr NOK \n");

       if (kc_GetString(data, "note", buf, 50) == KC_OK)
           printf("CODMKT note %s \n", buf);
       else
           printf("CODMKT note NOK \n");
   }

   else {
       printf("Received unknown codmsg %d\n", codmsg);
   }
}

void insert_ord(char* segno)
{
   kcapidata data;

   if (kc_malloc(CODMKT, &data) == KC_OK) 
       printf("kc_malloc OK\n");
   else {
       printf("kc_malloc NOK\n"); 
       return;
   }

   if (kc_SetString(data, "codcli", "TRD00651") == KC_OK)
       printf("kc_SetString OK\n"); 
   else 
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "titolo", "ENI") == KC_OK)
       printf("kc_SetString OK\n");
   else 
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "codmkt", "AFF") == KC_OK)
       printf("kc_SetString OK\n");
   else
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "quanti", "100") == KC_OK) 
       printf("kc_SetString OK\n");
   else
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "prezuni", "14.200") == KC_OK)
       printf("kc_SetString OK\n");
   else
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "segno", segno) == KC_OK)
       printf("kc_SetString OK\n");
   else 
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "partem", "1") == KC_OK) 
       printf("kc_SetString OK\n");
   else
       printf("kc_SetString NOK\n");
   
   if (kc_SetString(data, "tipord", "O") == KC_OK) 
       printf("kc_SetString OK\n"); 
   else 
       printf("kc_SetString NOK\n");

   if (kc_SetString(data, "tipopr", "1") == KC_OK) 
       printf("kc_SetString OK\n"); 
   else 
       printf("kc_SetString NOK\n");


   if (kc_submit(pinterf, data) == KC_OK) 
       printf("kc_submit OK\n"); 
   else 
       printf("kc_submit NOK\n");
   
   if (kc_free(data) == KC_OK)
       printf("kc_free OK\n"); 
   else 
       printf("kc_free NOK\n");
}

Il problema è che mi inserisce l'ordine, ma la callback non mi gestisce i dati e non mi fa vedere i dati di ritorno nel caso di invio ordine e quindi di messaggio CODMKT, per cui non mi salva nemmeno i valori nelle variabili globali. 

Cosa sbaglio ?

1 Risposte

  • Re: API SPHERA Trading - problema integrazione

    Premetto che non conosco quest'API, né sono riuscito a trovare la documentazione online. Però vedo che hai dichiarato un “data” globale e uno locale in insert_ord. Di conseguenza nella funzione stai usando quello locale, l'altro non viene toccato.

    PS: nell'editor usa il comando per inserire il blocco di codice, se no è faticoso leggerlo.

Devi accedere o registrarti per scrivere nel forum
1 risposte