GET_TRADES via BrokerCommand

Posted By: byakuren81

GET_TRADES via BrokerCommand - 03/04/22 16:49

Hello,

I implemented BrokerCommand for GET_TRADES in the broker API and called from Zorro at INITRUN:
int npos = brokerTrades(0);
printf("\nNumber of positions loaded: %d", npos);

However I do not get any opened trades when calling: for(open_trades).

I get the correct number of positions but I cannot modify the value of the argument dwParameters in my implementation of BrokerCommand as it is of type DWORD.
So I cannot pass the address of the first element of the TRADE array to Zorro.

I thought I could call brokerCommand on GET_TRADES directly and add the trades to Zorro internal trade list using the method enterTrade but I face the same issue on passing to Zorro the address of the first TRADE array element.
In the documentation I see 3 overloaded methods for brokerCommand but only one BrokerCommand in the broker API.

Moreover extern "C" functions cannot be overloaded so I cannot specialize BrokerCommand to pass this address Zorro.

Could you please tell me how to proceed?


Posted By: byakuren81

Re: GET_TRADES via BrokerCommand - 03/06/22 20:12

I found the solution:

In your broker API code, within your implementation of the function BrokerCommand(int nCommand, DWORD dwParameters), convert the argument dwParameters to an hexadecimal pointer address:

char hex[10];
sprintf(hex, "%x", dwParameters );
TRADE* trades = (TRADE*)strtoul(hex, NULL, 16);

Then fill the trades array with the trades you will have loaded from the broker.

Important: remember to set the structure alignment of your code to 4 as mentioned in Zorro documentation in Broker / Feed Plugin.
In Visual Studio 2017, go to your project properties, then under C/C++ Code Generation set Struct Member Alignment to 4.

Finally from Zorro call during INITRUN:
int npos = brokerTrades(0);

And check your broker API code works:
for(open_trades)
{
printf("\nTradeID number %d is loaded", TradeID);
}

© 2024 lite-C Forums