Olá. Tudo bem?
Estou com dificuldade em controlar o número de abertura de ordem do meu robô. A ordem é executada no local determinado. Mas como é scalp de poucos pontos, são feitas outras aberturas na mesma vela após o fechamento rápido da ordem anterior.
Gostaria de abrir apenas uma ordem quando for dado o sinal e não abrir nenhuma ordem nos próximos 15 candles de 1 minuto.
Fico muito grato se me ajudarem.
- [AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você.
- Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6.
- [ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3.
Basta colocar uma variável com o conteúdo do ultimo numero de barras, e só abrir outra ordem se a diferença for maior que 15.
static int tradeok; // Variável local estática, começando com zero. if(Bars(Symbol(),PERIOD_CURRENT)>trade) { sendordercode(); // sua rotina de abertura de ordem tradeok = 15 + Bars(Symbol(),PERIOD_CURRENT); }
Olá. Muito obrigado por responder.
Parece simples mas não consegui fazer o que me indicou. Teria como me mostrar como você faria? Por favor!
//+------------------------------------------------------------------+ //| ROBÔ MACD.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //|Codigo de leitura da biblioteca metatrader | //+------------------------------------------------------------------+ #include <trade\trade.mqh> CTrade trade; //+------------------------------------------------------------------+ //|Parametros de entrada | //+------------------------------------------------------------------+ input group "Dados de operação" input double contrato =20; //Contratos input double takeProfit=0; //Stop Gain input double stopLoss=0; //Stop Loss input group "Dados de horários" input int hAbertura=9; //Hora de abertura input int hFechamento=17; //Hora de fechamento input int mAbertura=15; //Minuto de abertura input int mFechamento=45 ; //Minuto de fechamento //+------------------------------------------------------------------+ //| Handles | //+------------------------------------------------------------------+ int ind_c; //Validação de indicador int handle; double linha_macd[]; double linha_sinal[]; double nAbrir[]; MqlRates rates []; int OnInit(){ ArraySetAsSeries(rates, true); ArraySetAsSeries(linha_macd, true); ArraySetAsSeries(linha_sinal, true); ArraySetAsSeries(nAbrir, true); handle = iMACD(_Symbol,_Period, 12, 26, 9, PRICE_CLOSE); return (INIT_SUCCEEDED); } datetime HoraCdePosicao; void OnTick() { CopyRates(Symbol(),0,0,3, rates); // Leitura do buffer das setas criadas CopyBuffer(handle,0,0,3,linha_macd); // leitura do buffer das barras cinzas do MACD CopyBuffer(handle,1,0,3,linha_sinal); // Leitura do buffer da linha vermelha do MACD bool sinalcompra=false; bool sinalvenda=false; //+------------------------------------------------------------------+ //|INdicador criado com indicação de compra e venda | //+------------------------------------------------------------------+ if (linha_sinal[1] < -150 ) // se a linha vermelha passar para baixo de -150 { ObjectCreate(0, rates[1].time,OBJ_ARROW_BUY,0, rates[1].time, rates[1].high ); // criar objeto com seta pra cima indicando compra } if (linha_sinal[1] > 150 ) // se a linha vermelha passar para baixo de -150 { ObjectCreate(0, rates[1].time,OBJ_ARROW_SELL,0, rates[1].time, rates[1].high ); // criar objeto com seta pra baixo indicando venda } //+------------------------------------------------------------------+ //| VERIFICAR SE ESTOU POSICIONADO | //+------------------------------------------------------------------+ bool comprado = false; bool vendido = false; if (PositionSelect(_Symbol)) // verificando a posição de compra ou venda no gráfico //--- se a posição for comprada if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY ) { comprado = true; } //--- se a posição for vendida if( PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL ) { vendido = true; } //+------------------------------------------------------------------+ //| Ordens de compra e venda | //+------------------------------------------------------------------+ if( !comprado && !vendido ) { if (linha_sinal[1] < -150 ) // Se a linha vermelha passar para baixo de -150 {sinalcompra= true;} // Sinal de compra se torna verdadeiro if (linha_sinal[1] > 150 ) // Se a linha vermelha passar para cima de 150 {sinalvenda=true;} // Sinal de venda se torna verdadeiro if( sinalcompra) // Se o sinal de compra é verdadeiro { double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); trade.Buy(contrato,_Symbol,ask,ask -500 *_Point, ask+150*_Point,"[Compra a mercado]"); // execução de compra //trade.Buy(contrato,_Symbol,0,0,0,"[Compra a mercado]"); } //--- sinal de venda if( sinalvenda) // Se o sinal de venda é verdadeiro { double bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); trade.Sell(contrato,_Symbol,bid,bid+500*_Point, bid-150*_Point,"[Venda a mercado]"); // execução de compra //trade.Sell(contrato,_Symbol,0,0,0,"[venda a mercado]"); } //+------------------------------------------------------------------+ //| Evitar trader na mesma barra | //+------------------------------------------------------------------+ } }
desde ja agradeço
//+------------------------------------------------------------------+ //| Ordens de compra e venda | //+------------------------------------------------------------------+ if( !comprado && !vendido ) { if (linha_sinal[1] < -150 ) // Se a linha vermelha passar para baixo de -150 {sinalcompra= true;} // Sinal de compra se torna verdadeiro if (linha_sinal[1] > 150 ) // Se a linha vermelha passar para cima de 150 {sinalvenda=true;} // Sinal de venda se torna verdadeiro static int tradeok; // Variável local estática, começando com zero. if(Bars(Symbol(),PERIOD_CURRENT)>trade) { if( sinalcompra) // Se o sinal de compra é verdadeiro { double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); trade.Buy(contrato,_Symbol,ask,ask -500 *_Point, ask+150*_Point,"[Compra a mercado]"); // execução de compra //trade.Buy(contrato,_Symbol,0,0,0,"[Compra a mercado]"); tradeok = 15 + Bars(Symbol(),PERIOD_CURRENT); } //--- sinal de venda if( sinalvenda) // Se o sinal de venda é verdadeiro { double bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); trade.Sell(contrato,_Symbol,bid,bid+500*_Point, bid-150*_Point,"[Venda a mercado]"); // execução de compra //trade.Sell(contrato,_Symbol,0,0,0,"[venda a mercado]"); tradeok = 15 + Bars(Symbol(),PERIOD_CURRENT); } }
Só fazer essa mudança e ser feliz.
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