mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 02:57:56 +00:00
MQL: small update expert code of sending quote to client
This commit is contained in:
+73
-85
@@ -11,33 +11,12 @@
|
||||
#import "MT5Connector.dll"
|
||||
bool initExpert(int expertHandle, int port, string& err);
|
||||
bool deinitExpert(int expertHandle, string& err);
|
||||
/*
|
||||
bool sendIntResponse(int expertHandle, int response, string& err);
|
||||
bool sendBooleanResponse(int expertHandle, int response, string& err);
|
||||
bool sendDoubleResponse(int expertHandle, double response, string& err);
|
||||
bool sendStringResponse(int expertHandle, string response, string& err);
|
||||
bool sendVoidResponse(int expertHandle, string& err);
|
||||
bool sendDoubleArrayResponse(int expertHandle, double& values[], int size, string& err);
|
||||
bool sendIntArrayResponse(int expertHandle, int& values[], int size, string& err);
|
||||
bool sendLongResponse(int expertHandle, long response, string& err);
|
||||
bool sendULongResponse(int expertHandle, ulong response, string& err);
|
||||
bool sendLongArrayResponse(int expertHandle, long& values[], int size, string& err);
|
||||
bool sendMqlRatesArrayResponse(int expertHandle, MqlRates& values[], int size, string& err);
|
||||
bool sendErrorResponse(int expertHandle, int code, string message, string& err);
|
||||
*/
|
||||
|
||||
bool sendEvent(int expertHandle, int eventType, string payload, string& err);
|
||||
bool sendResponse(int expertHandle, string response, string& err);
|
||||
|
||||
bool getCommandType(int expertHandle, int& res, string& err);
|
||||
/*
|
||||
bool getIntValue(int expertHandle, int paramIndex, int& res, string& err);
|
||||
bool getUIntValue(int expertHandle, int paramIndex, uint& res, string& err);
|
||||
bool getULongValue(int expertHandle, int paramIndex, ulong& res, string& err);
|
||||
bool getLongValue(int expertHandle, int paramIndex, long& res, string& err);
|
||||
bool getDoubleValue(int expertHandle, int paramIndex, double& res, string& err);
|
||||
bool getStringValue(int expertHandle, int paramIndex, string& res, string& err);
|
||||
bool getBooleanValue(int expertHandle, int paramIndex, bool& res, string& err);
|
||||
*/
|
||||
bool getPayload(int expertHandle, string& res, string& err);
|
||||
#import
|
||||
|
||||
///--------------------------------------------------------------------------------------
|
||||
@@ -201,24 +180,23 @@ void OnTick()
|
||||
MqlRates rates_array[];
|
||||
CopyRates(symbol, Period(), 1, 1, rates_array);
|
||||
|
||||
MtTimeBarEvent* time_bar = new MtTimeBarEvent(symbol, rates_array[0]);
|
||||
MtTimeBarEvent time_bar(symbol, rates_array[0]);
|
||||
SendMtEvent(ON_LAST_TIME_BAR_EVENT, time_bar);
|
||||
delete time_bar;
|
||||
}
|
||||
lastbar_time_changed = true;
|
||||
}
|
||||
|
||||
_last_bar_open_time = lastbar_time;
|
||||
}
|
||||
|
||||
if (Enable_OnTickEvent)
|
||||
{
|
||||
{
|
||||
MqlTick last_tick;
|
||||
SymbolInfoTick(Symbol(),last_tick);
|
||||
|
||||
MtOnTickEvent * tick_event = new MtOnTickEvent(symbol, last_tick);
|
||||
SendMtEvent(ON_TICK_EVENT, tick_event);
|
||||
delete tick_event;
|
||||
}
|
||||
MtQuote quote(symbol, last_tick);
|
||||
SendMtEvent(ON_TICK_EVENT, quote);
|
||||
}
|
||||
|
||||
if (IsTesting())
|
||||
{
|
||||
@@ -227,9 +205,8 @@ void OnTick()
|
||||
{
|
||||
_is_ticks_locked = true;
|
||||
|
||||
MtLockTickEvent * lock_tick_event = new MtLockTickEvent(symbol);
|
||||
MtLockTickEvent lock_tick_event(symbol);
|
||||
SendMtEvent(ON_LOCK_TICKS_EVENT, lock_tick_event);
|
||||
delete lock_tick_event;
|
||||
}
|
||||
|
||||
OnTimer();
|
||||
@@ -241,33 +218,29 @@ void OnTradeTransaction(
|
||||
const MqlTradeRequest& request, // request structure
|
||||
const MqlTradeResult& result // result structure
|
||||
)
|
||||
{
|
||||
if(!Enable_OnTradeTransactionEvent) return;
|
||||
{
|
||||
if (!Enable_OnTradeTransactionEvent) return;
|
||||
|
||||
#ifdef __DEBUG_LOG__
|
||||
PrintFormat("%s:", __FUNCTION__);
|
||||
#endif
|
||||
|
||||
|
||||
MtOnTradeTransactionEvent* trans_event = new MtOnTradeTransactionEvent(trans, request, result);
|
||||
MtOnTradeTransactionEvent trans_event(trans, request, result);
|
||||
SendMtEvent(ON_TRADE_TRANSACTION_EVENT, trans_event);
|
||||
delete trans_event;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void OnBookEvent(const string& symbol)
|
||||
{
|
||||
|
||||
{
|
||||
if(!Enable_OnBookEvent) return;
|
||||
|
||||
#ifdef __DEBUG_LOG__
|
||||
PrintFormat("%s: %s", __FUNCTION__, symbol);
|
||||
#endif
|
||||
|
||||
MtOnBookEvent * book_event = new MtOnBookEvent(symbol);
|
||||
MtOnBookEvent book_event(symbol);
|
||||
SendMtEvent(ON_BOOK_EVENT, book_event);
|
||||
delete book_event;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int preinit()
|
||||
{
|
||||
@@ -318,11 +291,6 @@ int init()
|
||||
long chartID = ChartID();
|
||||
ExpertHandle = (int) ChartGetInteger(chartID, CHART_WINDOW_HANDLE);
|
||||
|
||||
MqlTick last_tick;
|
||||
SymbolInfoTick(Symbol(),last_tick);
|
||||
double Bid = last_tick.bid;
|
||||
double Ask = last_tick.ask;
|
||||
|
||||
if (!initExpert(ExpertHandle, Port, _error))
|
||||
{
|
||||
MessageBox(_error, "MtApi", 0);
|
||||
@@ -412,6 +380,8 @@ int executeCommand()
|
||||
Print("executeCommand: commnad type = ", commandType);
|
||||
}
|
||||
#endif
|
||||
|
||||
string response = CreateSuccessResponse();
|
||||
|
||||
switch (commandType)
|
||||
{
|
||||
@@ -421,8 +391,8 @@ int executeCommand()
|
||||
case 155: //Request
|
||||
Execute_Request();
|
||||
break;
|
||||
//case 1: // OrderSend
|
||||
//Execute_OrderSend();
|
||||
case 1: // GetQuote
|
||||
response = Execute_GetQuote();
|
||||
break;
|
||||
case 63: //OrderCloseAll
|
||||
Execute_OrderCloseAll();
|
||||
@@ -1024,12 +994,15 @@ int executeCommand()
|
||||
default:
|
||||
{
|
||||
Print("Unknown command type = ", commandType);
|
||||
//sendVoidResponse(ExpertHandle, _response_error);
|
||||
string resp = CreateErrorResponse(-1, "Unknown command type");
|
||||
sendResponse(ExpertHandle, resp, _response_error);
|
||||
response = CreateErrorResponse(-1, "Unknown command type");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!sendResponse(ExpertHandle, response, _response_error))
|
||||
{
|
||||
PrintResponseError("sendResponse", _response_error); \
|
||||
}
|
||||
|
||||
return (commandType);
|
||||
}
|
||||
@@ -1066,6 +1039,14 @@ int executeCommand()
|
||||
#define SEND_STRING_RESPONSE(response) SEND_RESPONSE_OR_PRINT_ERROR(sendStringResponse, response, __FUNCTION__)
|
||||
|
||||
//-------------------------------------------------------------
|
||||
string Execute_GetQuote()
|
||||
{
|
||||
MqlTick tick;
|
||||
SymbolInfoTick(Symbol(), tick);
|
||||
|
||||
MtQuote quote(Symbol(), tick);
|
||||
return CreateSuccessResponse(quote.CreateJson());
|
||||
}
|
||||
|
||||
void Execute_Request()
|
||||
{
|
||||
@@ -7102,19 +7083,26 @@ string CreateErrorResponse(int code, string message_er)
|
||||
return result;
|
||||
}
|
||||
|
||||
string CreateSuccessResponse(string responseName, JSONValue* responseBody)
|
||||
string CreateSuccessResponse(JSONValue* responseBody = NULL)
|
||||
{
|
||||
JSONObject *joResponse = new JSONObject();
|
||||
JSONObject joResponse;
|
||||
joResponse.put("ErrorCode", new JSONString("0"));
|
||||
|
||||
if (responseBody != NULL)
|
||||
{
|
||||
joResponse.put(responseName, responseBody);
|
||||
}
|
||||
joResponse.put("Value", responseBody);
|
||||
|
||||
string result = joResponse.toString();
|
||||
delete joResponse;
|
||||
return result;
|
||||
return joResponse.toString();
|
||||
}
|
||||
|
||||
string CreateSuccessResponse(string responseName, JSONValue* responseBody)
|
||||
{
|
||||
JSONObject joResponse;
|
||||
joResponse.put("ErrorCode", new JSONString("0"));
|
||||
|
||||
if (responseBody != NULL)
|
||||
joResponse.put(responseName, responseBody);
|
||||
|
||||
return joResponse.toString();
|
||||
}
|
||||
|
||||
string ExecuteRequest_CopyTicks(JSONObject *jo)
|
||||
@@ -7717,7 +7705,7 @@ string ExecuteRequest_Sell(JSONObject *jo)
|
||||
return CreateSuccessResponse("Value", result_value_jo);
|
||||
}
|
||||
|
||||
//------------ Events -------------------------------------------------------
|
||||
//------------ MtProtocol -------------------------------------------------------
|
||||
|
||||
enum MtEventTypes
|
||||
{
|
||||
@@ -7728,13 +7716,13 @@ enum MtEventTypes
|
||||
ON_LOCK_TICKS_EVENT = 5
|
||||
};
|
||||
|
||||
class MtEvent
|
||||
class MtObject
|
||||
{
|
||||
public:
|
||||
virtual JSONObject* CreateJson() = 0;
|
||||
virtual JSONObject* CreateJson() const = 0;
|
||||
};
|
||||
|
||||
class MtOnTradeTransactionEvent : public MtEvent
|
||||
class MtOnTradeTransactionEvent : public MtObject
|
||||
{
|
||||
public:
|
||||
MtOnTradeTransactionEvent(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)
|
||||
@@ -7744,7 +7732,7 @@ public:
|
||||
_result = result;
|
||||
}
|
||||
|
||||
virtual JSONObject* CreateJson()
|
||||
virtual JSONObject* CreateJson() const
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Trans", MqlTradeTransactionToJson(_trans));
|
||||
@@ -7759,7 +7747,7 @@ private:
|
||||
MqlTradeResult _result;
|
||||
};
|
||||
|
||||
class MtOnBookEvent : public MtEvent
|
||||
class MtOnBookEvent : public MtObject
|
||||
{
|
||||
public:
|
||||
MtOnBookEvent(const string& symbol)
|
||||
@@ -7767,7 +7755,7 @@ public:
|
||||
_symbol = symbol;
|
||||
}
|
||||
|
||||
virtual JSONObject* CreateJson()
|
||||
virtual JSONObject* CreateJson() const
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Symbol", new JSONString(_symbol));
|
||||
@@ -7778,16 +7766,16 @@ private:
|
||||
string _symbol;
|
||||
};
|
||||
|
||||
class MtOnTickEvent : public MtEvent
|
||||
class MtQuote : public MtObject
|
||||
{
|
||||
public:
|
||||
MtOnTickEvent(string symbol, const MqlTick& tick)
|
||||
MtQuote(string symbol, const MqlTick& tick)
|
||||
{
|
||||
_symbol = symbol;
|
||||
_tick = tick;
|
||||
}
|
||||
|
||||
virtual JSONObject* CreateJson()
|
||||
virtual JSONObject* CreateJson() const
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Tick", MqlTickToJson(_tick));
|
||||
@@ -7801,7 +7789,7 @@ private:
|
||||
MqlTick _tick;
|
||||
};
|
||||
|
||||
class MtTimeBarEvent: public MtEvent
|
||||
class MtTimeBarEvent: public MtObject
|
||||
{
|
||||
public:
|
||||
MtTimeBarEvent(string symbol, const MqlRates& rates)
|
||||
@@ -7810,7 +7798,7 @@ public:
|
||||
_rates = rates;
|
||||
}
|
||||
|
||||
virtual JSONObject* CreateJson()
|
||||
virtual JSONObject* CreateJson() const
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Rates", MqlRatesToJson(_rates));
|
||||
@@ -7824,7 +7812,7 @@ private:
|
||||
MqlRates _rates;
|
||||
};
|
||||
|
||||
class MtLockTickEvent: public MtEvent
|
||||
class MtLockTickEvent: public MtObject
|
||||
{
|
||||
public:
|
||||
MtLockTickEvent(string symbol)
|
||||
@@ -7832,7 +7820,7 @@ public:
|
||||
_symbol = symbol;
|
||||
}
|
||||
|
||||
virtual JSONObject* CreateJson()
|
||||
virtual JSONObject* CreateJson() const
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Instrument", new JSONString(_symbol));
|
||||
@@ -7843,9 +7831,9 @@ private:
|
||||
string _symbol;
|
||||
};
|
||||
|
||||
void SendMtEvent(MtEventTypes eventType, MtEvent* mtEvent)
|
||||
void SendMtEvent(MtEventTypes eventType, const MtObject& mtObj)
|
||||
{
|
||||
JSONObject* json = mtEvent.CreateJson();
|
||||
JSONObject* json = mtObj.CreateJson();
|
||||
if (sendEvent(ExpertHandle, (int)eventType, json.toString(), _error))
|
||||
{
|
||||
#ifdef __DEBUG_LOG__
|
||||
@@ -7941,7 +7929,7 @@ bool JsonToMqlTradeRequest(JSONObject *jo, MqlTradeRequest& request)
|
||||
return true;
|
||||
}
|
||||
|
||||
JSONObject* MqlTickToJson(MqlTick& tick)
|
||||
JSONObject* MqlTickToJson(const MqlTick& tick)
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("MtTime", new JSONNumber(tick.time));
|
||||
@@ -7953,7 +7941,7 @@ JSONObject* MqlTickToJson(MqlTick& tick)
|
||||
return jo;
|
||||
}
|
||||
|
||||
JSONObject* MqlTradeResultToJson(MqlTradeResult& result)
|
||||
JSONObject* MqlTradeResultToJson(const MqlTradeResult& result)
|
||||
{
|
||||
JSONObject* jo = new JSONObject();
|
||||
jo.put("Retcode", new JSONNumber(result.retcode));
|
||||
@@ -7968,7 +7956,7 @@ JSONObject* MqlTradeResultToJson(MqlTradeResult& result)
|
||||
return jo;
|
||||
}
|
||||
|
||||
JSONObject* MqlTradeCheckResultToJson(MqlTradeCheckResult& result)
|
||||
JSONObject* MqlTradeCheckResultToJson(const MqlTradeCheckResult& result)
|
||||
{
|
||||
JSONObject* jo = new JSONObject();
|
||||
jo.put("Retcode", new JSONNumber(result.retcode));
|
||||
@@ -7982,7 +7970,7 @@ JSONObject* MqlTradeCheckResultToJson(MqlTradeCheckResult& result)
|
||||
return jo;
|
||||
}
|
||||
|
||||
JSONObject* MqlTradeTransactionToJson(MqlTradeTransaction& trans)
|
||||
JSONObject* MqlTradeTransactionToJson(const MqlTradeTransaction& trans)
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Deal", new JSONNumber(trans.deal));
|
||||
@@ -8004,7 +7992,7 @@ JSONObject* MqlTradeTransactionToJson(MqlTradeTransaction& trans)
|
||||
return jo;
|
||||
}
|
||||
|
||||
JSONObject* MqlTradeRequestToJson(MqlTradeRequest& request)
|
||||
JSONObject* MqlTradeRequestToJson(const MqlTradeRequest& request)
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("Action", new JSONNumber((int)request.action));
|
||||
@@ -8025,7 +8013,7 @@ JSONObject* MqlTradeRequestToJson(MqlTradeRequest& request)
|
||||
return jo;
|
||||
}
|
||||
|
||||
JSONObject* MqlRatesToJson(MqlRates& rates)
|
||||
JSONObject* MqlRatesToJson(const MqlRates& rates)
|
||||
{
|
||||
JSONObject *jo = new JSONObject();
|
||||
jo.put("mt_time", new JSONNumber((int)rates.time));
|
||||
|
||||
Reference in New Issue
Block a user