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 ?