souzap:
....
use Alt+S para postar o seu código, é ilegível dessa forma.
Jonathan Pereira:
use Alt+S para postar o seu código, é ilegível dessa forma.
#include <Trade\Trade.mqh> CTrade trade; int h_mm3; int h_mm8; int h_mm20; double mm3[]; double mm8[]; double mm20[]; MqlRates rates[]; datetime candleNovo; datetime candleAtual; int OnInit (){ ArraySetAsSeries(rates, true); ArraySetAsSeries(mm3, true); ArraySetAsSeries(mm8, true); ArraySetAsSeries(mm20, true); h_mm3 = iMA(Symbol(), Period(), 3, 0, MODE_SMA, PRICE_CLOSE); h_mm8 = iMA(Symbol(), Period(), 8, 0, MODE_SMA, PRICE_CLOSE); h_mm20 = iMA(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE); return(INIT_SUCCEEDED); } void OnTick(){ CopyBuffer(h_mm3, 0, 0, 3, mm3); CopyBuffer(h_mm8, 0, 0, 3, mm8); CopyBuffer(h_mm20, 0, 0, 3, mm20); CopyRates(Symbol(), Period(), 0, 3, rates); //-- SETUP bool agCompra = (mm3[2] > rates[2].low && mm3[2] < rates[2].high) && (mm8[2] > rates[2].low && mm8[2] < rates[2].high) && (mm20[2] > rates[2].low && mm20[2] < rates[2].high); bool candleDeAlta = rates[2].close < rates[1].open && rates[1].open < rates[1].close; bool mediasEmOrdemCompra = mm3[1] > mm8[1] && mm8[1] > mm20[1]; bool agVenda = (mm3[2] < rates[2].high && mm3[2] > rates[2].low) && (mm8[2] < rates[2].high && mm8[2] > rates[2].low) && (mm20[2] < rates[2].high && mm20[2] > rates[2].low); bool candleDeBaixa = rates[2].close > rates[1].open && rates[1].open > rates[1].close; bool mediasEmOrdemVenda = mm3[1] < mm8[1] && mm8[1] < mm20[1]; candleAtual = rates[0].time; if (candleAtual != candleNovo){ candleNovo = rates[0].time; Comment("Candle novo: ", rates[0].time); }else{ Comment("Candle novo: ", rates[0].time); return; } if(agCompra && mediasEmOrdemCompra){ ObjectCreate(0, rates[1].time+"_", OBJ_ARROW_BUY, 0,rates[1].time, rates[1].low); if(PositionsTotal() == 0 && OrdersTotal() == 0 ){ double precoEntrada = NormalizeDouble(rates[1].high + (1*_Point), _Digits); double _sl = NormalizeDouble(rates[1].low - (5*_Point), _Digits); double _tp = NormalizeDouble(precoEntrada + (2*(precoEntrada - _sl)), _Digits); trade.BuyStop(1, precoEntrada, Symbol(), _sl, _tp, 0, 0, "Agulhada!"); }else{ } if(agVenda && mediasEmOrdemVenda){ ObjectCreate(0, rates[1].time+"_", OBJ_ARROW_SELL, 0,rates[1].time, rates[1].high); if(PositionsTotal() == 0 && OrdersTotal() == 0){ double precoEntrada = NormalizeDouble(rates[1].high - (1*_Point), _Digits); double _sl = NormalizeDouble(rates[1].low + (5*_Point), _Digits); double _tp = NormalizeDouble(precoEntrada - (2*(precoEntrada - _sl)), _Digits); trade.SellStop(1, precoEntrada, Symbol(), _sl, _tp, 0, 0, "Agulhada!"); } } } }
Alguém ????
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
Boa noite pessoal, sou novo no MQL5(APRENDENDO), e estou com um problema que a dias não consigo resolver, caso alguém verifique, encontre o erro e puder ajudar com a solução ficarei muito grato.
Vamos lá, no código que estou utilizando eu gostaria que so abrisse no maximo 2 ordens, de compra e venda ou venda e compra (com TP e SL). Mas ele so consegue fazer uma compra, e nao abre outra até a mesma fechar, segue abaixo o código, agradeço desde já a todos.
#include <Trade\Trade.mqh>
CTrade trade;
int h_mm3;
int h_mm8;
int h_mm20;
double mm3[];
double mm8[];
double mm20[];
MqlRates rates[];
datetime candleNovo;
datetime candleAtual;
int OnInit (){
ArraySetAsSeries(rates, true);
ArraySetAsSeries(mm3, true);
ArraySetAsSeries(mm8, true);
ArraySetAsSeries(mm20, true);
h_mm3 = iMA(Symbol(), Period(), 3, 0, MODE_SMA, PRICE_CLOSE);
h_mm8 = iMA(Symbol(), Period(), 8, 0, MODE_SMA, PRICE_CLOSE);
h_mm20 = iMA(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE);
return(INIT_SUCCEEDED);
}
void OnTick(){
CopyBuffer(h_mm3, 0, 0, 3, mm3);
CopyBuffer(h_mm8, 0, 0, 3, mm8);
CopyBuffer(h_mm20, 0, 0, 3, mm20);
CopyRates(Symbol(), Period(), 0, 3, rates);
//-- SETUP
bool agCompra = (mm3[2] > rates[2].low && mm3[2] < rates[2].high) && (mm8[2] > rates[2].low && mm8[2] < rates[2].high) && (mm20[2] > rates[2].low && mm20[2] < rates[2].high);
bool candleDeAlta = rates[2].close < rates[1].open && rates[1].open < rates[1].close;
bool mediasEmOrdemCompra = mm3[1] > mm8[1] && mm8[1] > mm20[1];
bool agVenda = (mm3[2] < rates[2].high && mm3[2] > rates[2].low) && (mm8[2] < rates[2].high && mm8[2] > rates[2].low) && (mm20[2] < rates[2].high && mm20[2] > rates[2].low);
bool candleDeBaixa = rates[2].close > rates[1].open && rates[1].open > rates[1].close;
bool mediasEmOrdemVenda = mm3[1] < mm8[1] && mm8[1] < mm20[1];
candleAtual = rates[0].time;
if (candleAtual != candleNovo){
candleNovo = rates[0].time;
Comment("Candle novo: ", rates[0].time);
}else{
Comment("Candle novo: ", rates[0].time);
return;
}
if(agCompra && mediasEmOrdemCompra){
ObjectCreate(0, rates[1].time+"_", OBJ_ARROW_BUY, 0,rates[1].time, rates[1].low);
if(PositionsTotal() == 0 && OrdersTotal() == 0 ){
double precoEntrada = NormalizeDouble(rates[1].high + (1*_Point), _Digits);
double _sl = NormalizeDouble(rates[1].low - (5*_Point), _Digits);
double _tp = NormalizeDouble(precoEntrada + (2*(precoEntrada - _sl)), _Digits);
trade.BuyStop(1, precoEntrada, Symbol(), _sl, _tp, 0, 0, "Agulhada!");
}else{
}
if(agVenda && mediasEmOrdemVenda){
ObjectCreate(0, rates[1].time+"_", OBJ_ARROW_SELL, 0,rates[1].time, rates[1].high);
if(PositionsTotal() == 0 && OrdersTotal() == 0){
double precoEntrada = NormalizeDouble(rates[1].high - (1*_Point), _Digits);
double _sl = NormalizeDouble(rates[1].low + (5*_Point), _Digits);
double _tp = NormalizeDouble(precoEntrada - (2*(precoEntrada - _sl)), _Digits);
trade.SellStop(1, precoEntrada, Symbol(), _sl, _tp, 0, 0, "Agulhada!");
}
}
}
}