oslib/osc/trade/osc_ontradetransactionexport.mqh
super.admin 07f69c4478 convert
2025-05-30 16:15:18 +02:00

188 lines
26 KiB
MQL5

//+------------------------------------------------------------------+
//| 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ção (deal)
"1order" , // ulong // Bilhetagem da ordem
"1symbol" , // string // Nome do ativo da negociação
"1type" , // ENUM_TRADE_TRANSACTION_TYPE // Tipo de transação da negociaçã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ção (deal)
"1time_type" , // ENUM_ORDER_TYPE_TIME // Tipo de ordem por período de ação
"1time_expiration", // datetime // Hora de expiração da ordem
"1price" , // double // Preço
"1price_trigger" , // double // Preço de ativação de ordem tipo Stop limit
"1price_sl" , // double // Nível de Stop Loss
"1price_tp" , // double // Ní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ção de negociação
"2magic" , // ulong // Expert Advisor -conselheiro- ID (número mágico)
"2order" , // ulong // Bilhetagem da ordem
"2symbol" , // string // Símbolo de negociação
"2volume" , // double // Volume solicitado para uma encomenda em lotes
"2price" , // double // Preço
"2stoplimit" , // double // Nível StopLimit da ordem
"2sl" , // double // Nível Stop Loss da ordem
"2tp" , // double // Nível Take Profit da ordem
"2deviation" , // ulong // Máximo desvio possível a partir do preço requisitado
"2type" , // ENUM_ORDER_TYPE // Tipo de ordem
"2type_filling" , // ENUM_ORDER_TYPE_FILLING // Tipo de execução da ordem
"2type_time" , // ENUM_ORDER_TYPE_TIME // Tipo de expiração da ordem
"2expiration" , // datetime // Hora de expiração da ordem (para ordens do tipo ORDER_TIME_SPECIFIED))
"2comment" , // string // Comentário sobre a ordem
"2position" , // ulong // Bilhete da posição
"2position_by" , // ulong // Bilhete para uma posição oposta
// struct MqlTradeResult
"3retcode" , // uint // Código de retorno da operação
"3deal" , // ulong // Bilhetagem (ticket) da operação (deal),se ela for realizada
"3order" , // ulong // Bilhetagem (ticket) da ordem, se ela for colocada
"3volume" , // double // Volume da operação (deal), confirmada pela corretora
"3price" , // double // Preço da operação (deal), se confirmada pela corretora
"3bid" , // double // Preço de Venda corrente
"3ask" , // double // Preço de Compra corrente
"3comment" , // string // Comentário da corretora para a operação (por default, ele é preenchido com a descrição código de retorno de um servidor de negociação)
"3request_id" , // uint // Identificador da solicitação definida pelo terminal durante o despacho
"3retcode_external"); // uint // Código de resposta do sistema de negociaçã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ção (deal)
tran.order , // ulong // Bilhetagem da ordem
tran.symbol , // string // Nome do ativo da negociação
EnumToString(tran.type) , // ENUM_TRADE_TRANSACTION_TYPE // Tipo de transação da negociaçã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ção (deal)
EnumToString(tran.time_type) , // ENUM_ORDER_TYPE_TIME // Tipo de ordem por período de ação
tran.time_expiration, // datetime // Hora de expiração da ordem
tran.price , // double // Preço
tran.price_trigger , // double // Preço de ativação de ordem tipo Stop limit
tran.price_sl , // double // Nível de Stop Loss
tran.price_tp , // double // Ní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ção de negociação
req.magic , // ulong // Expert Advisor -conselheiro- ID (número mágico)
req.order , // ulong // Bilhetagem da ordem
req.symbol , // string // Símbolo de negociação
req.volume , // double // Volume solicitado para uma encomenda em lotes
req.price , // double // Preço
req.stoplimit , // double // Nível StopLimit da ordem
req.sl , // double // Nível Stop Loss da ordem
req.tp , // double // Nível Take Profit da ordem
req.deviation , // ulong // Máximo desvio possível a partir do preço requisitado
EnumToString(req.type) , // ENUM_ORDER_TYPE // Tipo de ordem
EnumToString(req.type_filling) , // ENUM_ORDER_TYPE_FILLING // Tipo de execução da ordem
EnumToString(req.type_time) , // ENUM_ORDER_TYPE_TIME // Tipo de expiração da ordem
req.expiration , // datetime // Hora de expiração da ordem (para ordens do tipo ORDER_TIME_SPECIFIED))
req.comment , // string // Comentário sobre a ordem
req.position , // ulong // Bilhete da posição
req.position_by , // ulong // Bilhete para uma posição oposta
// struct MqlTradeResult
res.retcode , // uint // Código de retorno da operação
res.deal , // ulong // Bilhetagem (ticket) da operação (deal),se ela for realizada
res.order , // ulong // Bilhetagem (ticket) da ordem, se ela for colocada
res.volume , // double // Volume da operação (deal), confirmada pela corretora
res.price , // double // Preço da operação (deal), se confirmada pela corretora
res.bid , // double // Preço de Venda corrente
res.ask , // double // Preço de Compra corrente
res.comment , // string // Comentário da corretora para a operação (por default, ele é preenchido com a descrição código de retorno de um servidor de negociação)
res.request_id , // uint // Identificador da solicitação definida pelo terminal durante o despacho
res.retcode_external); // uint // Código de resposta do sistema de negociaçã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;
}