oslib/osc/trade/osc_ontradetransactionexport.mqh

189 lines
26 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:15:18 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| osc_ontradetransactionexport.mqh |
//| Copyright 2019, OS Corp |
//| http://www.os.org |
//| |
//| Versao 0.001 |
//| 1. |
//| |
//| 2. |
//| |
//+------------------------------------------------------------------+
//
class osc_ontradetransactionexport{
private:
//---------------------------
int m_csvFile;
//bool openCSV(datetime from, string sufix);
//uint printHeaderCSV(int csvFile);
//int printDetCSV(int csvFile, const MqlTradeTransaction &tran,
// const MqlTradeRequest &req ,
// const MqlTradeResult &res );
//---------------------------
//-------------------------
ulong m_microsec_ant;
ulong m_microsec ;
ulong getMicrosec(){
m_microsec = GetMicrosecondCount()-m_microsec_ant;
m_microsec_ant += m_microsec;
return m_microsec;
}
//-------------------------
public:
bool initialize(string sufixo_arq="ONTRAN");
bool openCSV(datetime from, string sufix);
uint printHeaderCSV();
uint printDetCSV(const MqlTradeTransaction &tran,
const MqlTradeRequest &req ,
const MqlTradeResult &res );
void closeCSV(){ FileClose(m_csvFile); }
};
bool osc_ontradetransactionexport::initialize(string sufixo_arq="ONTRAN"){
if( ! openCSV(TimeTradeServer(),sufixo_arq) ) return false;
printHeaderCSV();
return true;
}
uint osc_ontradetransactionexport::printHeaderCSV(){
return FileWrite(m_csvFile,
"ms" ,
// struct MqlTradeTransaction
"1deal" , // ulong // Bilhetagem da opera<EFBFBD><EFBFBD>o (deal)
"1order" , // ulong // Bilhetagem da ordem
"1symbol" , // string // Nome do ativo da negocia<EFBFBD><EFBFBD>o
"1type" , // ENUM_TRADE_TRANSACTION_TYPE // Tipo de transa<EFBFBD><EFBFBD>o da negocia<EFBFBD><EFBFBD>o
"1order_type" , // ENUM_ORDER_TYPE // Tipo de ordem
"1order_state" , // ENUM_ORDER_STATE // Estado da ordem
"1deal_type" , // ENUM_DEAL_TYPE // Tipo de opera<EFBFBD><EFBFBD>o (deal)
"1time_type" , // ENUM_ORDER_TYPE_TIME // Tipo de ordem por per<EFBFBD>odo de a<EFBFBD><EFBFBD>o
"1time_expiration", // datetime // Hora de expira<EFBFBD><EFBFBD>o da ordem
"1price" , // double // Pre<EFBFBD>o
"1price_trigger" , // double // Pre<EFBFBD>o de ativa<EFBFBD><EFBFBD>o de ordem tipo Stop limit
"1price_sl" , // double // N<EFBFBD>vel de Stop Loss
"1price_tp" , // double // N<EFBFBD>vel de Take Profit
"1volume" , // double // Volume em lotes
"1position" , // ulong // Position ticket
"1position_by" , // ulong // Ticket of an opposite position
// struct MqlTradeRequest
"2action" , // ENUM_TRADE_REQUEST_ACTIONS // Tipo de opera<EFBFBD><EFBFBD>o de negocia<EFBFBD><EFBFBD>o
"2magic" , // ulong // Expert Advisor -conselheiro- ID (n<EFBFBD>mero m<EFBFBD>gico)
"2order" , // ulong // Bilhetagem da ordem
"2symbol" , // string // S<EFBFBD>mbolo de negocia<EFBFBD><EFBFBD>o
"2volume" , // double // Volume solicitado para uma encomenda em lotes
"2price" , // double // Pre<EFBFBD>o
"2stoplimit" , // double // N<EFBFBD>vel StopLimit da ordem
"2sl" , // double // N<EFBFBD>vel Stop Loss da ordem
"2tp" , // double // N<EFBFBD>vel Take Profit da ordem
"2deviation" , // ulong // M<EFBFBD>ximo desvio poss<EFBFBD>vel a partir do pre<EFBFBD>o requisitado
"2type" , // ENUM_ORDER_TYPE // Tipo de ordem
"2type_filling" , // ENUM_ORDER_TYPE_FILLING // Tipo de execu<EFBFBD><EFBFBD>o da ordem
"2type_time" , // ENUM_ORDER_TYPE_TIME // Tipo de expira<EFBFBD><EFBFBD>o da ordem
"2expiration" , // datetime // Hora de expira<EFBFBD><EFBFBD>o da ordem (para ordens do tipo ORDER_TIME_SPECIFIED))
"2comment" , // string // Coment<EFBFBD>rio sobre a ordem
"2position" , // ulong // Bilhete da posi<EFBFBD><EFBFBD>o
"2position_by" , // ulong // Bilhete para uma posi<EFBFBD><EFBFBD>o oposta
// struct MqlTradeResult
"3retcode" , // uint // C<EFBFBD>digo de retorno da opera<EFBFBD><EFBFBD>o
"3deal" , // ulong // Bilhetagem (ticket) da opera<EFBFBD><EFBFBD>o (deal),se ela for realizada
"3order" , // ulong // Bilhetagem (ticket) da ordem, se ela for colocada
"3volume" , // double // Volume da opera<EFBFBD><EFBFBD>o (deal), confirmada pela corretora
"3price" , // double // Pre<EFBFBD>o da opera<EFBFBD><EFBFBD>o (deal), se confirmada pela corretora
"3bid" , // double // Pre<EFBFBD>o de Venda corrente
"3ask" , // double // Pre<EFBFBD>o de Compra corrente
"3comment" , // string // Coment<EFBFBD>rio da corretora para a opera<EFBFBD><EFBFBD>o (por default, ele <EFBFBD> preenchido com a descri<EFBFBD><EFBFBD>o c<EFBFBD>digo de retorno de um servidor de negocia<EFBFBD><EFBFBD>o)
"3request_id" , // uint // Identificador da solicita<EFBFBD><EFBFBD>o definida pelo terminal durante o despacho
"3retcode_external"); // uint // C<EFBFBD>digo de resposta do sistema de negocia<EFBFBD><EFBFBD>o exterior
}
uint osc_ontradetransactionexport::printDetCSV(const MqlTradeTransaction &tran,
const MqlTradeRequest &req ,
const MqlTradeResult &res ){
return FileWrite(m_csvFile,
getMicrosec(),
// struct MqlTradeTransaction
tran.deal , // ulong // Bilhetagem da opera<EFBFBD><EFBFBD>o (deal)
tran.order , // ulong // Bilhetagem da ordem
tran.symbol , // string // Nome do ativo da negocia<EFBFBD><EFBFBD>o
EnumToString(tran.type) , // ENUM_TRADE_TRANSACTION_TYPE // Tipo de transa<EFBFBD><EFBFBD>o da negocia<EFBFBD><EFBFBD>o
EnumToString(tran.order_type) , // ENUM_ORDER_TYPE // Tipo de ordem
EnumToString(tran.order_state) , // ENUM_ORDER_STATE // Estado da ordem
EnumToString(tran.deal_type) , // ENUM_DEAL_TYPE // Tipo de opera<EFBFBD><EFBFBD>o (deal)
EnumToString(tran.time_type) , // ENUM_ORDER_TYPE_TIME // Tipo de ordem por per<EFBFBD>odo de a<EFBFBD><EFBFBD>o
tran.time_expiration, // datetime // Hora de expira<EFBFBD><EFBFBD>o da ordem
tran.price , // double // Pre<EFBFBD>o
tran.price_trigger , // double // Pre<EFBFBD>o de ativa<EFBFBD><EFBFBD>o de ordem tipo Stop limit
tran.price_sl , // double // N<EFBFBD>vel de Stop Loss
tran.price_tp , // double // N<EFBFBD>vel de Take Profit
tran.volume , // double // Volume em lotes
tran.position , // ulong // Position ticket
tran.position_by , // ulong // Ticket of an opposite position
// struct MqlTradeRequest
EnumToString(req.action) , // ENUM_TRADE_REQUEST_ACTIONS // Tipo de opera<EFBFBD><EFBFBD>o de negocia<EFBFBD><EFBFBD>o
req.magic , // ulong // Expert Advisor -conselheiro- ID (n<EFBFBD>mero m<EFBFBD>gico)
req.order , // ulong // Bilhetagem da ordem
req.symbol , // string // S<EFBFBD>mbolo de negocia<EFBFBD><EFBFBD>o
req.volume , // double // Volume solicitado para uma encomenda em lotes
req.price , // double // Pre<EFBFBD>o
req.stoplimit , // double // N<EFBFBD>vel StopLimit da ordem
req.sl , // double // N<EFBFBD>vel Stop Loss da ordem
req.tp , // double // N<EFBFBD>vel Take Profit da ordem
req.deviation , // ulong // M<EFBFBD>ximo desvio poss<EFBFBD>vel a partir do pre<EFBFBD>o requisitado
EnumToString(req.type) , // ENUM_ORDER_TYPE // Tipo de ordem
EnumToString(req.type_filling) , // ENUM_ORDER_TYPE_FILLING // Tipo de execu<EFBFBD><EFBFBD>o da ordem
EnumToString(req.type_time) , // ENUM_ORDER_TYPE_TIME // Tipo de expira<EFBFBD><EFBFBD>o da ordem
req.expiration , // datetime // Hora de expira<EFBFBD><EFBFBD>o da ordem (para ordens do tipo ORDER_TIME_SPECIFIED))
req.comment , // string // Coment<EFBFBD>rio sobre a ordem
req.position , // ulong // Bilhete da posi<EFBFBD><EFBFBD>o
req.position_by , // ulong // Bilhete para uma posi<EFBFBD><EFBFBD>o oposta
// struct MqlTradeResult
res.retcode , // uint // C<EFBFBD>digo de retorno da opera<EFBFBD><EFBFBD>o
res.deal , // ulong // Bilhetagem (ticket) da opera<EFBFBD><EFBFBD>o (deal),se ela for realizada
res.order , // ulong // Bilhetagem (ticket) da ordem, se ela for colocada
res.volume , // double // Volume da opera<EFBFBD><EFBFBD>o (deal), confirmada pela corretora
res.price , // double // Pre<EFBFBD>o da opera<EFBFBD><EFBFBD>o (deal), se confirmada pela corretora
res.bid , // double // Pre<EFBFBD>o de Venda corrente
res.ask , // double // Pre<EFBFBD>o de Compra corrente
res.comment , // string // Coment<EFBFBD>rio da corretora para a opera<EFBFBD><EFBFBD>o (por default, ele <EFBFBD> preenchido com a descri<EFBFBD><EFBFBD>o c<EFBFBD>digo de retorno de um servidor de negocia<EFBFBD><EFBFBD>o)
res.request_id , // uint // Identificador da solicita<EFBFBD><EFBFBD>o definida pelo terminal durante o despacho
res.retcode_external); // uint // C<EFBFBD>digo de resposta do sistema de negocia<EFBFBD><EFBFBD>o exterior
}
//+-----------------------------------------------------------+
//| |
//+-----------------------------------------------------------+
bool osc_ontradetransactionexport::openCSV(datetime from, string sufix){
// data inicial. farah parte do nome do arquivo...
string strFrom = TimeToString(from,TIME_DATE|TIME_MINUTES|TIME_SECONDS);
StringReplace(strFrom,".","" );
StringReplace(strFrom," ","_");
StringReplace(strFrom,":","_");
string nameArqCSV = strFrom + "_" +
IntegerToString(getMicrosec())+ "_" + sufix + ".csv";
Print(":-| ",__FUNCTION__,": Creating file ", nameArqCSV, " in common file dir...");
m_csvFile = FileOpen(nameArqCSV, FILE_WRITE|FILE_CSV|FILE_ANSI|FILE_COMMON, ";");
if( m_csvFile<0 ){
Print(":-( ",__FUNCTION__,": Error creating file: ", nameArqCSV );
Print(":-( ",__FUNCTION__,": Erro code : ", GetLastError() );
return false;
}
return true;
}