Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Como sei que o SL/TP foi acionado na OnTradeTransaction()?
Para entender a lógica das mensagens no OnTrade*, faço uma impressão dos parâmetros de entrada no momento em que o evento de interesse ocorreu.
Faça o mesmo, tudo se torna claro de uma só vez.
Lembre-se, o TP no MT5 é sempre (ao contrário do MT4) uma ordem de mercado, que fica pendurada no servidor MT5, não na bolsa/ECN. Assim, quando é acionado, haverá latência + deslizamento de mercado de qualquer sinal. Em alguns MT4 TP são pedidos limitados que são colocados diretamente na ECN. Portanto, não há lá latência (MT-ECN) e nenhum deslizamento negativo, mas há um redirecionamento. Portanto, TP é uma das fortes desvantagens de MT5 sobre MT4.
Para entender a lógica das mensagens no OnTrade*, faço uma impressão dos parâmetros de entrada no momento em que o evento de interesse ocorreu.
Faça o mesmo, tudo se torna claro de uma só vez.
Experimentei-o. Neste caso, OnTrade() não tem utilidade e até mesmo nenhum bem, já que temos que processar o histórico de cada evento comercial.
Faz sentido descobrir sobre o acionamento do SL/TP na OnTradeTransaction() porque você pode filtrá-lo por tipo de evento. Neste caso, defini o tipo de evento como "Adicionar à história", depois o tipo comercial como "Sair" e depois um impasse.
Experimentei-o. Neste caso, a OnTrade() não tem qualquer utilidade, mesmo prejudicial, pois terá que processar o histórico em cada evento comercial.
Você estava falando da OnTrade*.
bool FirstRun = true;
void OnTick()
{
if (FirstRun)
{
const double Price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
FirstRun = (OrderSend(_Symbol, OP_BUY, 1, Price, 0, 0, Price + 10 * _Point) <= 0);
}
}
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
if (!FirstRun)
Print(ToString(Trans) + ToString(Request) + ToString(Result));
}
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + "\n"
string ToString( const MqlTradeTransaction &Trans )
{
return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) +
TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) +
TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}
string ToString( const MqlTradeRequest &Request )
{
return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) + TOSTRING(Request.tp) +
TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
TOSTRING(Request.position) + TOSTRING(Request.position_by));
}
string ToString( const MqlTradeResult &Result )
{
return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
TOSTRING(Result.retcode_external));
}
2016.11.23 23:59:57 deal #3 sell 1.00 EURUSD at 1.06245 done (based on order #3)
2016.11.23 23:59:57 deal performed [#3 sell 1.00 EURUSD at 1.06245]
2016.11.23 23:59:57 order performed sell 1.00 at 1.06245 [#3 sell 1.00 EURUSD at 1.06245]
2016.11.23 23:59:57 Trans.deal = 3
2016.11.23 23:59:57 Trans.order = 3
2016.11.23 23:59:57 Trans.type = TRADE_TRANSACTION_DEAL_ADD
2016.11.23 23:59:57 Trans.order_type = ORDER_TYPE_BUY
2016.11.23 23:59:57 Trans.order_state = ORDER_STATE_STARTED
2016.11.23 23:59:57 Trans.deal_type = DEAL_TYPE_SELL
2016.11.23 23:59:57 Trans.time_type = ORDER_TIME_GTC
2016.11.23 23:59:57 Trans.time_expiration = 1970.01.01 00:00:00
2016.11.23 23:59:57 Trans.price = 1.06245
2016.11.23 23:59:57 Trans.price_trigger = 0.0
2016.11.23 23:59:57 Trans.price_sl = 0.0
2016.11.23 23:59:57 Trans.volume = 1.0
2016.11.23 23:59:57 Trans.position = 2
2016.11.23 23:59:57 Trans.position_by = 0
2016.11.23 23:59:57 Request.action = ENUM_TRADE_REQUEST_ACTIONS::0
2016.11.23 23:59:57 Request.magic = 0
2016.11.23 23:59:57 Request.order = 0
2016.11.23 23:59:57 Request.symbol =
2016.11.23 23:59:57 Request.volume = 0.0
2016.11.23 23:59:57 Request.price = 0.0
2016.11.23 23:59:57 Request.sl = 0.0
2016.11.23 23:59:57 Request.tp = 0.0
2016.11.23 23:59:57 Request.deviation = 0
2016.11.23 23:59:57 Request.type = ORDER_TYPE_BUY
2016.11.23 23:59:57 Request.type_filling = ORDER_FILLING_FOK
2016.11.23 23:59:57 Request.type_time = ORDER_TIME_GTC
2016.11.23 23:59:57 Request.expiration = 1970.01.01 00:00:00
2016.11.23 23:59:57 Request.comment =
2016.11.23 23:59:57 Request.position = 0
2016.11.23 23:59:57 Result.retcode = 0
2016.11.23 23:59:57 Result.deal = 0
2016.11.23 23:59:57 Result.order = 0
2016.11.23 23:59:57 Result.volume = 0.0
2016.11.23 23:59:57 Result.price = 0.0
2016.11.23 23:59:57 Result.bid = 0.0
2016.11.23 23:59:57 Result.ask = 0.0
2016.11.23 23:59:57 Result.comment =
2016.11.23 23:59:57 Result.request_id = 0
2016.11.23 23:59:57
2016.11.23 23:59:57 Trans.deal = 0
2016.11.23 23:59:57 Trans.order = 3
2016.11.23 23:59:57 Trans.symbol = EURUSD
2016.11.23 23:59:57 Trans.type = TRADE_TRANSACTION_ORDER_DELETE
2016.11.23 23:59:57 Trans.order_type = ORDER_TYPE_SELL
2016.11.23 23:59:57 Trans.order_state = ORDER_STATE_FILLED
2016.11.23 23:59:57 Trans.deal_type = DEAL_TYPE_BUY
2016.11.23 23:59:57 Trans.time_type = ORDER_TIME_GTC
2016.11.23 23:59:57 Trans.price = 1.06245
2016.11.23 23:59:57 Trans.price_trigger = 0.0
2016.11.23 23:59:57 Trans.price_sl = 0.0
2016.11.23 23:59:57 Trans.price_tp = 0.0
2016.11.23 23:59:57 Trans.volume = 1.0
2016.11.23 23:59:57 Trans.position = 2
2016.11.23 23:59:57 Trans.position_by = 0
2016.11.23 23:59:57 Request.action = ENUM_TRADE_REQUEST_ACTIONS::0
2016.11.23 23:59:57 Request.magic = 0
2016.11.23 23:59:57 Request.symbol =
2016.11.23 23:59:57 Request.volume = 0.0
2016.11.23 23:59:57 Request.price = 0.0
2016.11.23 23:59:57 Request.stoplimit = 0.0
2016.11.23 23:59:57 Request.sl = 0.0
2016.11.23 23:59:57 Request.tp = 0.0
2016.11.23 23:59:57 Request.deviation = 0
2016.11.23 23:59:57 Request.type = ORDER_TYPE_BUY
2016.11.23 23:59:57 Request.type_filling = ORDER_FILLING_FOK
2016.11.23 23:59:57 Request.expiration = 1970.01.01 00:00:00
2016.11.23 23:59:57 Request.comment =
2016.11.23 23:59:57 Request.position = 0
2016.11.23 23:59:57 Request.position_by = 0
2016.11.23 23:59:57 Result.retcode = 0
2016.11.23 23:59:57 Result.deal = 0
2016.11.23 23:59:57 Result.order = 0
2016.11.23 23:59:57 Result.volume = 0.0
2016.11.23 23:59:57 Result.price = 0.0
2016.11.23 23:59:57 Result.ask = 0.0
2016.11.23 23:59:57 Result.comment =
2016.11.23 23:59:57 Result.request_id = 0
2016.11.23 23:59:57 Result.retcode_external = 0
2016.11.23 23:59:57
2016.11.23 23:59:57 Trans.deal = 0
2016.11.23 23:59:57 Trans.order = 3
2016.11.23 23:59:57 Trans.symbol = EURUSD
2016.11.23 23:59:57 Trans.type = TRADE_TRANSACTION_HISTORY_ADD
2016.11.23 23:59:57 Trans.order_state = ORDER_STATE_FILLED
2016.11.23 23:59:57 Trans.deal_type = DEAL_TYPE_BUY
2016.11.23 23:59:57 Trans.time_type = ORDER_TIME_GTC
2016.11.23 23:59:57 Trans.time_expiration = 1970.01.01 00:00:00
2016.11.23 23:59:57 Trans.price = 1.06245
2016.11.23 23:59:57 Trans.price_trigger = 0.0
2016.11.23 23:59:57 Trans.price_sl = 0.0
2016.11.23 23:59:57 Trans.price_tp = 0.0
2016.11.23 23:59:57 Trans.volume = 0.0
2016.11.23 23:59:57 Trans.position_by = 0
2016.11.23 23:59:57 Request.action = ENUM_TRADE_REQUEST_ACTIONS::0
2016.11.23 23:59:57 Request.magic = 0
2016.11.23 23:59:57 Request.order = 0
2016.11.23 23:59:57 Request.symbol =
2016.11.23 23:59:57 Request.volume = 0.0
2016.11.23 23:59:57 Request.price = 0.0
2016.11.23 23:59:57 Request.stoplimit = 0.0
2016.11.23 23:59:57 Request.sl = 0.0
2016.11.23 23:59:57 Request.deviation = 0
2016.11.23 23:59:57 Request.type = ORDER_TYPE_BUY
2016.11.23 23:59:57 Request.type_filling = ORDER_FILLING_FOK
2016.11.23 23:59:57 Request.type_time = ORDER_TIME_GTC
2016.11.23 23:59:57 Request.expiration = 1970.01.01 00:00:00
2016.11.23 23:59:57 Request.comment =
2016.11.23 23:59:57 Request.position = 0
2016.11.23 23:59:57 Request.position_by = 0
2016.11.23 23:59:57 Result.retcode = 0
2016.11.23 23:59:57 Result.order = 0
2016.11.23 23:59:57 Result.volume = 0.0
2016.11.23 23:59:57 Result.price = 0.0
2016.11.23 23:59:57 Result.bid = 0.0
2016.11.23 23:59:57 Result.ask = 0.0
2016.11.23 23:59:57 Result.comment =
2016.11.23 23:59:57 Result.request_id = 0
2016.11.23 23:59:57 Result.retcode_external = 0
fxsaber:
O resultado do testador
Sim, mas e depois?
Onde mostra que o SL/TP é acionado? - Essa é a dificuldade))
fechar uma posição .
Este é o problema. Mas a MT5 de alguma forma obtém esta informação, a julgar pelo registro e desenho das posições fechadas.
Será que já não funciona mais assim?
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
Como sei se Take Profit ou Stop Loss é desencadeado?
Stanislav Korotky, 2014.10.16 12:06
Verifiquei por SL/TP a posição (ordem) e que o preço de fechamento é melhor ou igual a TP e pior ou igual a SL.Será que isso não funciona mais?
Posso ter o código?
...sim, sim, posso ter Mashka pela coxa, desculpe... Mostre-me o código, por favor.
Será que já não funciona mais assim?