Senhores, bom dia.
Procurei na documentação, mas não encontrei uma solução. Estou definindo entradas apenas com TP definido, sem SL, pois o SL será uma ordem à mercado quando uma condição específica for "desfeita". Então independente do preço, ele vai stopar à mercado. Só que quando uso a classe CTrade e defino uma ordem com SL com 0, ele fica dando um monte de erros parecidos com este abaixo:
failed modify #X sell X ATIVO sl: 0, tp: PREÇO -> sl: 0, tp: PREÇO [Invalid stops]
Já tentei definir o SL com valor 0, com NULL, etc. Mas não funciona.
Alguém sabe como posso enviar uma ordem usando a CTrade class sem definir um StopLoss?
Agradeço qualquer ajuda.
Define o SL com valor zero e normaliza o TP pro preco do ativo. Se nao me engano tem no CSymbol um normalizePrice. Mesmo que o preço pareça normalizado ou o vindo do mercado pareça correto, é importante normalizar o TP e o SL para evitar esse erro de invalid stop.
Boa noite!!
Além do que já foi orientado acima, antes de enviar o comando para modificar os stops da posição, deve ser feita a verificação abaixo também:
//+--------------------------------------------------------------------------------------------------------------------+ //| Verifica se distância entre o TakeProfit/StopLoss e o preço de fechamento é maior do que SYMBOL_TRADE_STOPS_LEVEL | //+--------------------------------------------------------------------------------------------------------------------+ bool Check_SL_TP(ENUM_ORDER_TYPE type, double SL, double TP) { //--- Local variables bool SL_check = false, TP_check = false; //--- Gets the last price for current symbol double BID = SymbolInfoDouble(_Symbol, SYMBOL_BID); double ASK = SymbolInfoDouble(_Symbol, SYMBOL_ASK); //--- get the SYMBOL_TRADE_STOPS_LEVEL level int stops_level = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL); if(stops_level != 0) { PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must not be nearer than %d points from the closing price", stops_level, stops_level); } //--- check only two order types switch(type) { //--- Buy operation case ORDER_TYPE_BUY: { //--- check the StopLoss SL_check = (BID - SL > stops_level * _Point); if(!SL_check) { ERRMSG = StringFormat("For order %s StopLoss=%.5f must be less than %.5f (Bid=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), SL, BID - stops_level * _Point, BID, stops_level); } //--- check the TakeProfit TP_check = (TP - BID > stops_level * _Point); if(!TP_check) { ERRMSG = StringFormat("For order %s TakeProfit=%.5f must be greater than %.5f (Bid=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), TP, BID + stops_level * _Point, BID, stops_level); } //--- return the result of checking return(SL_check && TP_check); } //--- Sell operation case ORDER_TYPE_SELL: { //--- check the StopLoss SL_check = (SL - ASK > stops_level * _Point); if(!SL_check) { ERRMSG = StringFormat("For order %s StopLoss=%.5f must be greater than %.5f (Ask=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), SL, ASK + stops_level * _Point, ASK, stops_level); } //--- check the TakeProfit TP_check = (ASK - TP > stops_level * _Point); if(!TP_check) { ERRMSG = StringFormat("For order %s TakeProfit=%.5f must be less than %.5f (Ask=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), TP, ASK - stops_level * _Point, ASK, stops_level); } //--- return the result of checking return(TP_check && SL_check); } break; } //--- Verification succeeded return(false); }
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Senhores, bom dia.
Procurei na documentação, mas não encontrei uma solução. Estou definindo entradas apenas com TP definido, sem SL, pois o SL será uma ordem à mercado quando uma condição específica for "desfeita". Então independente do preço, ele vai stopar à mercado. Só que quando uso a classe CTrade e defino uma ordem com SL com 0, ele fica dando um monte de erros parecidos com este abaixo:
failed modify #X sell X ATIVO sl: 0, tp: PREÇO -> sl: 0, tp: PREÇO [Invalid stops]
Já tentei definir o SL com valor 0, com NULL, etc. Mas não funciona.
Alguém sabe como posso enviar uma ordem usando a CTrade class sem definir um StopLoss?
Agradeço qualquer ajuda.