- Você tem alguma questão sobre Metatrader 5! Pergunte Aqui!
- Ajuste de dividendos, juros e bonificações
- Question
Caros,
gostaria de saber com enviar ordem de compra a um preco expecifico, exemplo, grafico de 5 Minutos, quando o last romper a barra anterior enviar ordem de compra na high da barra anterior, ja consequi fazer ele enviar a ordem, porem ele nao manda no preco que eu determinei.
exemplo
void OnTick() { //--- MqlTick latest_price; // To be used for getting recent/latest price quotes MqlRates mrate[]; // To be used to store the prices, volumes and spread of each bar MqlTradeRequest mrequest; // To be used for sending our trade requests MqlTradeResult mresult; // To be used to get our trade results MqlTradeRequest mrequest2; // To be used for sending our trade requests MqlTradeResult mresult2; // To be used to get our trade results int Mybars=Bars(_Symbol,_Period); if(!SymbolInfoTick(_Symbol,latest_price)) { Alert("Error getting the latest price quote - error:",GetLastError(),"!!"); return; } if(CopyRates(_Symbol,_Period,0,3,mrate)<0) { Alert("Error copying rates/history data - error:",GetLastError(),"!!"); return; } // the rates arrays // ArraySetAsSeries(mrate,true); // the MA-8 values arrays ArraySetAsSeries(maVal,true); if(CopyBuffer(maHandle,0,0,5,maVal)<0) { Alert("Error copying Moving Average indicator buffer - error:",GetLastError()); ResetLastError(); return; } //Print("Br Anterior High = " + string( mrate[1].high) + ", Br Ult. = " + string(latest_price.last)+ " DtHr = " + StringSubstr(string(latest_price.time) ,14,2) ); // && int(StringSubstr(string(latest_price.time) ,14,2))> Hms Print("********************** "+string(maVal[0])+" **********************"); //Ordem de Compra if( (latest_price.last > mrate[1].high) && (OC == 0) )//&& (latest_price.last > maVal[0] ) ) { OC = 1; Hora_ = Mybars; Prc_Env = mrate[1].high; Print("********************** Ordem de Compra **********************"); ZeroMemory(mrequest); mrequest.action = TRADE_ACTION_DEAL; // immediate order execution mrequest.price = mrate[1].high; // latest ask price mrequest.sl = NormalizeDouble(mrate[1].high - 500*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(mrate[1].high + 500*_Point,_Digits); // Take Profit mrequest.symbol = _Symbol; // currency pair mrequest.volume = 5; // number of lots to trade mrequest.magic = EA_Magic; // Order Magic Number mrequest.type = ORDER_TYPE_BUY; // Buy Order mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type mrequest.deviation=0; // Deviation from current price if(OrderSend(mrequest,mresult) == false) { Alert("Error copying rates/history data - error:",GetLastError(),"!!"); return; } } //Ordem de Venda if( (latest_price.last < mrate[1].low) && (OC == 1) && ( Mybars > Hora_) ) { OC = 0; Hora_ = 0; Print("********************** Ordem de Venda ("+string(Prc_Env)+")**********************"); ZeroMemory(mrequest2); mrequest2.action = TRADE_ACTION_SLTP; // setting the TP & SL mrequest2.symbol = _Symbol; // symbol mrequest2.sl = latest_price.last - 5 * _Point; // Stop Loss mrequest2.tp = latest_price.last + 5 * _Point; // Take Profit if(OrderSend(mrequest2,mresult2) == false) { Alert("The order request could not be completed -error:",GetLastError()," with trade return code ",mresult.retcode); return; } } if( ( latest_price.last > (Prc_Env+15) ) && (OC == 1) && ( Mybars > Hora_) ) { OC = 0; Hora_ = 0; Print("********************** Ordem de Venda **********************"); ZeroMemory(mrequest2); mrequest2.action = TRADE_ACTION_SLTP; // setting the TP & SL mrequest2.symbol = _Symbol; // symbol mrequest2.sl = latest_price.last - 5 * _Point; // Stop Loss mrequest2.tp = latest_price.last + 5 * _Point; // Take Profit if(OrderSend(mrequest2,mresult2) == false) { Alert("The order request could not be completed -error:",GetLastError()," with trade return code ",mresult.retcode); return; } } }
Olá Mackson,
da próxima vez que postar partes de código no fórum, por favor use o botão SRC para que a formatação saia da maneira correta. Dessa vez eu faço pra você... :-)
Caros,
gostaria de saber com enviar ordem de compra a um preco expecifico, exemplo, grafico de 5 Minutos, quando o last romper a barra anterior enviar ordem de compra na high da barra anterior, ja consequi fazer ele enviar a ordem, porem ele nao manda no preco que eu determinei.
exemplo
Olá Mackson, você precisa definir antes o que exatamente você quer...
Se você pretende enviar uma ordem de compra para execução imediata, logo, usar a máxima da barra anterior pode lhe trazer problemas, uma vez que sua ordem pode ser rejeitada por estar fora do preço.
Entretanto, se você quiser colocar uma ordem pendente para ser executada na máxima da barra anterior, então o tipo de operação (no caso, você usou TRADE_ACTION_DEAL) deve ser alterado para que você possa colocar uma ordem pendente.
Logo, antes de colocar a ordem, é preciso de antemão saber se ela é do tipo pendente ou do tipo de execução imediata.
Espero ter ajudado.
Abraços,
Malacarne
- 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